From b5a3ce49591a2a7fd7b2d460d8db60c271140b52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Garapich?= Date: Sun, 5 Jun 2022 21:17:13 +0200 Subject: [PATCH] refactor(*): make WebsocketEventEmitter a super class (#1707) --- src/games/gateways/games.gateway.ts | 22 +++++----------------- src/players/gateways/players.gateway.ts | 22 ++++------------------ src/shared/websocket-event-emitter.ts | 15 +++++++++++++-- 3 files changed, 22 insertions(+), 37 deletions(-) diff --git a/src/games/gateways/games.gateway.ts b/src/games/gateways/games.gateway.ts index 6ed561473..7da0c9e6e 100644 --- a/src/games/gateways/games.gateway.ts +++ b/src/games/gateways/games.gateway.ts @@ -1,8 +1,4 @@ -import { - WebSocketGateway, - OnGatewayInit, - SubscribeMessage, -} from '@nestjs/websockets'; +import { WebSocketGateway, SubscribeMessage } from '@nestjs/websockets'; import { Socket } from 'socket.io'; import { WsAuthorized } from '@/auth/decorators/ws-authorized.decorator'; import { PlayerSubstitutionService } from '../services/player-substitution.service'; @@ -14,7 +10,6 @@ import { } from '@nestjs/common'; import { Events } from '@/events/events'; import { WebsocketEvent } from '@/websocket-event'; -import { serialize } from '@/shared/serialize'; import { SerializerInterceptor } from '@/shared/interceptors/serializer.interceptor'; import { Serializable } from '@/shared/serializable'; import { GameDto } from '../dto/game.dto'; @@ -22,18 +17,15 @@ import { WebsocketEventEmitter } from '@/shared/websocket-event-emitter'; @WebSocketGateway() export class GamesGateway - implements OnGatewayInit, OnModuleInit, WebsocketEventEmitter + extends WebsocketEventEmitter + implements OnModuleInit { - private socket: Socket; - constructor( @Inject(forwardRef(() => PlayerSubstitutionService)) private playerSubstitutionService: PlayerSubstitutionService, private events: Events, - ) {} - - async emit(event: WebsocketEvent, payload: Serializable) { - this.socket.emit(event, await serialize(payload)); + ) { + super(); } @WsAuthorized() @@ -50,10 +42,6 @@ export class GamesGateway ); } - afterInit(socket: Socket) { - this.socket = socket; - } - onModuleInit() { this.events.gameCreated.subscribe(({ game }) => this.emit(WebsocketEvent.gameCreated, game), diff --git a/src/players/gateways/players.gateway.ts b/src/players/gateways/players.gateway.ts index f22a891f8..c285573ef 100644 --- a/src/players/gateways/players.gateway.ts +++ b/src/players/gateways/players.gateway.ts @@ -2,7 +2,6 @@ import { WebSocketGateway, OnGatewayConnection, OnGatewayDisconnect, - OnGatewayInit, } from '@nestjs/websockets'; import { Socket } from 'socket.io'; import { Subject } from 'rxjs'; @@ -10,23 +9,16 @@ import { OnModuleInit } from '@nestjs/common'; import { Events } from '@/events/events'; import { WebsocketEvent } from '@/websocket-event'; import { PlayersService } from '../services/players.service'; -import { serialize } from '@/shared/serialize'; import { WebsocketEventEmitter } from '@/shared/websocket-event-emitter'; import { PlayerDto } from '../dto/player.dto'; -import { Serializable } from '@/shared/serializable'; @WebSocketGateway() export class PlayersGateway - implements - OnGatewayConnection, - OnGatewayDisconnect, - OnGatewayInit, - OnModuleInit, - WebsocketEventEmitter + extends WebsocketEventEmitter + implements OnGatewayConnection, OnGatewayDisconnect, OnModuleInit { private _playerConnected = new Subject(); private _playerDisconnected = new Subject(); - private socket: Socket; get playerConnected() { return this._playerConnected.asObservable(); @@ -36,10 +28,8 @@ export class PlayersGateway return this._playerDisconnected.asObservable(); } - constructor(private events: Events, private playersService: PlayersService) {} - - async emit(event: WebsocketEvent, payload: Serializable) { - this.socket.emit(event, await serialize(payload)); + constructor(private events: Events, private playersService: PlayersService) { + super(); } handleConnection(socket: Socket) { @@ -50,10 +40,6 @@ export class PlayersGateway this._playerDisconnected.next(socket); } - afterInit(socket: Socket) { - this.socket = socket; - } - onModuleInit() { this.events.playerConnects.subscribe(async ({ playerId }) => this.emit( diff --git a/src/shared/websocket-event-emitter.ts b/src/shared/websocket-event-emitter.ts index 4f7e397d8..2bfde32f0 100644 --- a/src/shared/websocket-event-emitter.ts +++ b/src/shared/websocket-event-emitter.ts @@ -1,6 +1,17 @@ import { WebsocketEvent } from '@/websocket-event'; +import { OnGatewayInit } from '@nestjs/websockets'; +import { Socket } from 'socket.io'; import { Serializable } from './serializable'; +import { serialize } from './serialize'; -export interface WebsocketEventEmitter { - emit(event: WebsocketEvent, payload: Serializable): void; +export class WebsocketEventEmitter implements OnGatewayInit { + protected server: Socket; + + afterInit(socket: Socket) { + this.server = socket; + } + + protected async emit(event: WebsocketEvent, payload: Serializable) { + this.server.emit(event, await serialize(payload)); + } }