Newer
Older
PixelPaintWar / apps / server / src / domains / game / application / useCases / disconnectUseCase.ts
import type { DisconnectPlayerPort, GameOutputPort } from "../ports/gameUseCasePorts";
import { logEvent } from "@server/logging/logEvent";

type DisconnectUseCaseParams = {
  gameManager: DisconnectPlayerPort;
  roomId?: string;
  playerId: string;
  output: Pick<GameOutputPort, "publishPlayerRemovedToRoom">;
};

export const disconnectUseCase = ({
  gameManager,
  roomId,
  playerId,
  output,
}: DisconnectUseCaseParams) => {
  gameManager.removePlayer(playerId);

  if (roomId) {
    output.publishPlayerRemovedToRoom(roomId, playerId);
  }

  logEvent("GameUseCase", {
    event: "DISCONNECT",
    result: "player_removed",
    socketId: playerId,
  });
};