diff --git a/src/app/store.ts b/src/app/store.ts index 2e023bf..9b3ba43 100644 --- a/src/app/store.ts +++ b/src/app/store.ts @@ -12,6 +12,7 @@ import { roomSocketMessageMiddleware } from "modules/room/message"; import roomReducer from "modules/room/slice"; import makeSocketMiddleware from "modules/socket/middleware"; import socketReducer from "modules/socket/slice"; +import { userSocketMessageMiddleware } from "modules/user/message"; import userReducer from "modules/user/slice"; const rootReducer = combineReducers({ @@ -35,6 +36,7 @@ export const store = configureStore({ makeSocketMiddleware([ loginSocketMessageMiddleware, roomSocketMessageMiddleware, + userSocketMessageMiddleware, ]) ), }); diff --git a/src/modules/room/message.ts b/src/modules/room/message.ts index 8e3017e..2812861 100644 --- a/src/modules/room/message.ts +++ b/src/modules/room/message.ts @@ -1,9 +1,6 @@ import { AppDispatch } from "app/store"; import { roomMessage, roomGetAll, roomSetAll } from "modules/room/slice"; -import { - SocketMessage, - SocketMessageMiddleware, -} from "modules/websocket/message"; +import { SocketMessage, SocketMessageMiddleware } from "modules/socket/message"; function roomListRequest(): SocketMessage { return { diff --git a/src/modules/user/message.ts b/src/modules/user/message.ts new file mode 100644 index 0000000..ce2ee03 --- /dev/null +++ b/src/modules/user/message.ts @@ -0,0 +1,41 @@ +import { AppDispatch } from "app/store"; +import { userGetAll, userSetAll } from "modules/user/slice"; +import { SocketMessage, SocketMessageMiddleware } from "modules/socket/message"; + +function userListRequest(): SocketMessage { + return { + variant: "UserListRequest", + fields: [], + }; +} + +function handleUserListResponse(dispatch: AppDispatch, outerFields: any[]) { + if (outerFields.length !== 1) { + console.log("UserListResponse has wrong number of fields:", outerFields); + return; + } + + const { users } = outerFields[0]; + if (users === undefined) { + console.log("UserListResponse field has wrong shape:", outerFields[0]); + return; + } + + dispatch(userSetAll(users)); +} + +export const userSocketMessageMiddleware: SocketMessageMiddleware = { + handleMessage: (dispatch, { variant, fields }) => { + switch (variant) { + case "UserListResponse": + handleUserListResponse(dispatch, fields); + break; + } + }, + + handleAction: (send, action) => { + if (userGetAll.match(action)) { + send(userListRequest()); + } + }, +};