diff --git a/apps/client/src/app.tsx b/apps/client/src/app.tsx index d4a324b..5c6272a 100644 --- a/apps/client/src/app.tsx +++ b/apps/client/src/app.tsx @@ -13,12 +13,12 @@ // タイトル画面分岐 if (scenePhase === appConsts.ScenePhase.TITLE) { - return socketManager.room.joinRoom(payload)} />; + return socketManager.title.joinRoom(payload)} />; } // ロビー画面分岐 if (scenePhase === appConsts.ScenePhase.LOBBY) { - return socketManager.room.startGame()} />; + return socketManager.lobby.startGame()} />; } // プレイ画面分岐 diff --git a/apps/client/src/hooks/useAppFlow.ts b/apps/client/src/hooks/useAppFlow.ts index 71baf36..867b4d0 100644 --- a/apps/client/src/hooks/useAppFlow.ts +++ b/apps/client/src/hooks/useAppFlow.ts @@ -15,8 +15,8 @@ const [myId, setMyId] = useState(null); useEffect(() => { - socketManager.connection.onConnect((id) => setMyId(id)); - socketManager.room.onRoomUpdate((updatedRoom) => { + socketManager.common.onConnect((id) => setMyId(id)); + socketManager.lobby.onRoomUpdate((updatedRoom) => { setRoom(updatedRoom); setScenePhase(appConsts.ScenePhase.LOBBY); }); diff --git a/apps/client/src/network/SocketManager.ts b/apps/client/src/network/SocketManager.ts index 4c4048f..f22bea7 100644 --- a/apps/client/src/network/SocketManager.ts +++ b/apps/client/src/network/SocketManager.ts @@ -1,13 +1,15 @@ import { io, Socket } from "socket.io-client"; import { config } from "@repo/shared"; -import { createConnectionHandler, type ConnectionHandler } from "./handlers/ConnectionHandler"; -import { createRoomHandler, type RoomHandler } from "./handlers/RoomHandler"; +import { createCommonHandler, type CommonHandler } from "./handlers/CommonHandler"; +import { createTitleHandler, type TitleHandler } from "./handlers/TitleHandler"; +import { createLobbyHandler, type LobbyHandler } from "./handlers/LobbyHandler"; import { createGameHandler, type GameHandler } from "./handlers/GameHandler"; export class SocketManager { public socket: Socket; - public connection: ConnectionHandler; - public room: RoomHandler; + public common: CommonHandler; + public title: TitleHandler; + public lobby: LobbyHandler; public game: GameHandler; constructor() { @@ -20,8 +22,9 @@ withCredentials: true }); - this.connection = createConnectionHandler(this.socket); - this.room = createRoomHandler(this.socket); + this.common = createCommonHandler(this.socket); + this.title = createTitleHandler(this.socket); + this.lobby = createLobbyHandler(this.socket); this.game = createGameHandler(this.socket); } } diff --git a/apps/client/src/network/handlers/CommonHandler.ts b/apps/client/src/network/handlers/CommonHandler.ts new file mode 100644 index 0000000..d76fe24 --- /dev/null +++ b/apps/client/src/network/handlers/CommonHandler.ts @@ -0,0 +1,22 @@ +import type { Socket } from "socket.io-client"; +import { protocol } from "@repo/shared"; + +type CommonHandler = { + onConnect: (callback: (id: string) => void) => void; +}; + +export const createCommonHandler = (socket: Socket): CommonHandler => { + return { + onConnect: (callback: (id: string) => void) => { + if (socket.connected) { + callback(socket.id || ""); + } + + socket.on(protocol.SocketEvents.CONNECT, () => { + callback(socket.id || ""); + }); + } + }; +}; + +export type { CommonHandler }; diff --git a/apps/client/src/network/handlers/ConnectionHandler.ts b/apps/client/src/network/handlers/ConnectionHandler.ts deleted file mode 100644 index 1fbe917..0000000 --- a/apps/client/src/network/handlers/ConnectionHandler.ts +++ /dev/null @@ -1,22 +0,0 @@ -import type { Socket } from "socket.io-client"; -import { protocol } from "@repo/shared"; - -type ConnectionHandler = { - onConnect: (callback: (id: string) => void) => void; -}; - -export const createConnectionHandler = (socket: Socket): ConnectionHandler => { - return { - onConnect: (callback: (id: string) => void) => { - if (socket.connected) { - callback(socket.id || ""); - } - - socket.on(protocol.SocketEvents.CONNECT, () => { - callback(socket.id || ""); - }); - } - }; -}; - -export type { ConnectionHandler }; diff --git a/apps/client/src/network/handlers/LobbyHandler.ts b/apps/client/src/network/handlers/LobbyHandler.ts new file mode 100644 index 0000000..863ab5b --- /dev/null +++ b/apps/client/src/network/handlers/LobbyHandler.ts @@ -0,0 +1,21 @@ +import type { Socket } from "socket.io-client"; +import { protocol } from "@repo/shared"; +import type { roomTypes } from "@repo/shared"; + +type LobbyHandler = { + onRoomUpdate: (callback: (room: roomTypes.Room) => void) => void; + startGame: () => void; +}; + +export const createLobbyHandler = (socket: Socket): LobbyHandler => { + return { + onRoomUpdate: (callback: (room: roomTypes.Room) => void) => { + socket.on(protocol.SocketEvents.ROOM_UPDATE, callback); + }, + startGame: () => { + socket.emit(protocol.SocketEvents.START_GAME); + } + }; +}; + +export type { LobbyHandler }; diff --git a/apps/client/src/network/handlers/RoomHandler.ts b/apps/client/src/network/handlers/RoomHandler.ts deleted file mode 100644 index 4210616..0000000 --- a/apps/client/src/network/handlers/RoomHandler.ts +++ /dev/null @@ -1,25 +0,0 @@ -import type { Socket } from "socket.io-client"; -import { protocol } from "@repo/shared"; -import type { roomTypes } from "@repo/shared"; - -type RoomHandler = { - joinRoom: (payload: roomTypes.JoinRoomPayload) => void; - onRoomUpdate: (callback: (room: roomTypes.Room) => void) => void; - startGame: () => void; -}; - -export const createRoomHandler = (socket: Socket): RoomHandler => { - return { - joinRoom: (payload: roomTypes.JoinRoomPayload) => { - socket.emit(protocol.SocketEvents.JOIN_ROOM, payload); - }, - onRoomUpdate: (callback: (room: roomTypes.Room) => void) => { - socket.on(protocol.SocketEvents.ROOM_UPDATE, callback); - }, - startGame: () => { - socket.emit(protocol.SocketEvents.START_GAME); - } - }; -}; - -export type { RoomHandler }; diff --git a/apps/client/src/network/handlers/TitleHandler.ts b/apps/client/src/network/handlers/TitleHandler.ts new file mode 100644 index 0000000..32248a8 --- /dev/null +++ b/apps/client/src/network/handlers/TitleHandler.ts @@ -0,0 +1,17 @@ +import type { Socket } from "socket.io-client"; +import { protocol } from "@repo/shared"; +import type { roomTypes } from "@repo/shared"; + +type TitleHandler = { + joinRoom: (payload: roomTypes.JoinRoomPayload) => void; +}; + +export const createTitleHandler = (socket: Socket): TitleHandler => { + return { + joinRoom: (payload: roomTypes.JoinRoomPayload) => { + socket.emit(protocol.SocketEvents.JOIN_ROOM, payload); + } + }; +}; + +export type { TitleHandler };