Newer
Older
PixelPaintWar / apps / server / src / network / handlers / room / createRoomEventPublisher.ts
import { Server } from "socket.io";
import { protocol } from "@repo/shared";
import { createEmitToRoom } from "@server/network/adapters/socketEmitters";
import type { roomTypes } from "@repo/shared";
import type { CommonHandlerContext } from "../CommonHandler";

type RoomId = roomTypes.Room["roomId"];
type RoomUpdatePayload = roomTypes.Room;

export type RoomEventPublisher = {
  publishRoomUpdate: (roomId: RoomId, room: RoomUpdatePayload) => void;
};

export const createRoomEventPublisher = (
  common: CommonHandlerContext
): RoomEventPublisher => {
  return {
    publishRoomUpdate: (roomId: RoomId, room: RoomUpdatePayload) => {
      common.emitToRoom(roomId, protocol.SocketEvents.ROOM_UPDATE, room);
    },
  };
};

export const createRoomDisconnectPublisher = (io: Server): RoomEventPublisher => {
  const emitToRoom = createEmitToRoom(io);

  return {
    publishRoomUpdate: (roomId: RoomId, room: RoomUpdatePayload) => {
      emitToRoom(roomId, protocol.SocketEvents.ROOM_UPDATE, room);
    },
  };
};