| @ -0,0 +1,41 @@ | |||
| import { AppDispatch } from "../../app/store"; | |||
| import { roomGetAll, roomSetAll } from "./slice"; | |||
| import { SocketMessage, SocketMessageMiddleware } from "../websocket/message"; | |||
| function roomListRequest(): SocketMessage { | |||
| return { | |||
| variant: "RoomListRequest", | |||
| fields: [], | |||
| }; | |||
| } | |||
| function handleRoomListResponse(dispatch: AppDispatch, outerFields: any[]) { | |||
| if (outerFields.length !== 1) { | |||
| console.log("RoomListResponse has wrong number of fields:", outerFields); | |||
| return; | |||
| } | |||
| const { rooms } = outerFields[0]; | |||
| if (rooms === undefined) { | |||
| console.log("RoomListResponse field has wrong shape:", outerFields[0]); | |||
| return; | |||
| } | |||
| dispatch(roomSetAll(rooms)); | |||
| } | |||
| export const roomSocketMessageMiddleware: SocketMessageMiddleware = { | |||
| handleMessage: (dispatch, { variant, fields }) => { | |||
| switch (variant) { | |||
| case "RoomListResponse": | |||
| handleRoomListResponse(dispatch, fields); | |||
| break; | |||
| } | |||
| }, | |||
| handleAction: (send, action) => { | |||
| if (roomGetAll.match(action)) { | |||
| send(roomListRequest()); | |||
| } | |||
| }, | |||
| }; | |||