Skip to content

Commit

Permalink
refactor(*): make WebsocketEventEmitter a super class
Browse files Browse the repository at this point in the history
  • Loading branch information
garrappachc committed Jun 4, 2022
1 parent d1da667 commit f314bb4
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 37 deletions.
22 changes: 5 additions & 17 deletions src/games/gateways/games.gateway.ts
Original file line number Diff line number Diff line change
@@ -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';
Expand All @@ -14,26 +10,22 @@ 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';
import { WebsocketEventEmitter } from '@/shared/websocket-event-emitter';

@WebSocketGateway()
export class GamesGateway
implements OnGatewayInit, OnModuleInit, WebsocketEventEmitter<GameDto>
extends WebsocketEventEmitter<GameDto>
implements OnModuleInit
{
private socket: Socket;

constructor(
@Inject(forwardRef(() => PlayerSubstitutionService))
private playerSubstitutionService: PlayerSubstitutionService,
private events: Events,
) {}

async emit(event: WebsocketEvent, payload: Serializable<GameDto>) {
this.socket.emit(event, await serialize(payload));
) {
super();
}

@WsAuthorized()
Expand All @@ -50,10 +42,6 @@ export class GamesGateway
);
}

afterInit(socket: Socket) {
this.socket = socket;
}

onModuleInit() {
this.events.gameCreated.subscribe(({ game }) =>
this.emit(WebsocketEvent.gameCreated, game),
Expand Down
22 changes: 4 additions & 18 deletions src/players/gateways/players.gateway.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,31 +2,23 @@ import {
WebSocketGateway,
OnGatewayConnection,
OnGatewayDisconnect,
OnGatewayInit,
} from '@nestjs/websockets';
import { Socket } from 'socket.io';
import { Subject } from 'rxjs';
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<PlayerDto>
extends WebsocketEventEmitter<PlayerDto>
implements OnGatewayConnection, OnGatewayDisconnect, OnModuleInit
{
private _playerConnected = new Subject<Socket>();
private _playerDisconnected = new Subject<Socket>();
private socket: Socket;

get playerConnected() {
return this._playerConnected.asObservable();
Expand All @@ -36,10 +28,8 @@ export class PlayersGateway
return this._playerDisconnected.asObservable();
}

constructor(private events: Events, private playersService: PlayersService) {}

async emit(event: WebsocketEvent, payload: Serializable<PlayerDto>) {
this.socket.emit(event, await serialize(payload));
constructor(private events: Events, private playersService: PlayersService) {
super();
}

handleConnection(socket: Socket) {
Expand All @@ -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(
Expand Down
15 changes: 13 additions & 2 deletions src/shared/websocket-event-emitter.ts
Original file line number Diff line number Diff line change
@@ -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<T> {
emit(event: WebsocketEvent, payload: Serializable<T>): void;
export class WebsocketEventEmitter<T> implements OnGatewayInit<Socket> {
protected server: Socket;

afterInit(socket: Socket) {
this.server = socket;
}

protected async emit(event: WebsocketEvent, payload: Serializable<T>) {
this.server.emit(event, await serialize(payload));
}
}

0 comments on commit f314bb4

Please sign in to comment.