강동현

RoomListRequestMessage 추가

...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
12 12
13 ## 로비 13 ## 로비
14 14
15 -로비에서는 모든 방 목록을 확인하고 접속할 수 있습니다. 로그인에 성공하면 서버에서 `RoomListMessage`가 전송됩니다. 이 메세지는 모든 방에 관한 정보를 가지고 있습니다. 각 방은 고유한 `uuid`값으로 구분됩니다. 15 +로비에서는 모든 방 목록을 확인하고 접속할 수 있습니다. 서버에 `RoomListRequestMessage`를 전송하면 `RoomDescription[]`가 반환됩니다. 이 메세지는 모든 방에 관한 정보를 가지고 있습니다. 각 방은 고유한 `uuid`값으로 구분됩니다.
16 16
17 특정한 방에 접속하기 위해서는 서버에 `RoomJoinMessage`를 보내면 됩니다. 요청이 성공하면 `RoomInfo`가 반환됩니다. `RoomInfo`에는 본인을 제외한 다른 플레이어들의 정보만이 담겨 있습니다. 17 특정한 방에 접속하기 위해서는 서버에 `RoomJoinMessage`를 보내면 됩니다. 요청이 성공하면 `RoomInfo`가 반환됩니다. `RoomInfo`에는 본인을 제외한 다른 플레이어들의 정보만이 담겨 있습니다.
18 18
......
...@@ -4,6 +4,7 @@ import { loginHandler } from "./handler/loginHandler"; ...@@ -4,6 +4,7 @@ import { loginHandler } from "./handler/loginHandler";
4 import { roomChatHandler } from "./handler/roomChatHandler"; 4 import { roomChatHandler } from "./handler/roomChatHandler";
5 import { roomJoinHandler } from "./handler/roomJoinHandler"; 5 import { roomJoinHandler } from "./handler/roomJoinHandler";
6 import { roomLeaveHandler } from "./handler/roomLeaveHandler"; 6 import { roomLeaveHandler } from "./handler/roomLeaveHandler";
7 +import { roomListRequestHandler } from "./handler/roomListRequestHandler";
7 import { Message, MessageResponse, MessageType } from "./types"; 8 import { Message, MessageResponse, MessageType } from "./types";
8 9
9 export class MessageHandlerRegistry { 10 export class MessageHandlerRegistry {
...@@ -11,6 +12,11 @@ export class MessageHandlerRegistry { ...@@ -11,6 +12,11 @@ export class MessageHandlerRegistry {
11 this.registerHandler(connection, MessageType.LOGIN, loginHandler); 12 this.registerHandler(connection, MessageType.LOGIN, loginHandler);
12 this.registerHandlerAuthed( 13 this.registerHandlerAuthed(
13 connection, 14 connection,
15 + MessageType.ROOM_LIST_REQUEST,
16 + roomListRequestHandler
17 + );
18 + this.registerHandlerAuthed(
19 + connection,
14 MessageType.ROOM_JOIN, 20 MessageType.ROOM_JOIN,
15 roomJoinHandler 21 roomJoinHandler
16 ); 22 );
......
...@@ -10,7 +10,5 @@ export function loginHandler( ...@@ -10,7 +10,5 @@ export function loginHandler(
10 connection.user = new User(message.username, connection); 10 connection.user = new User(message.username, connection);
11 console.log(`User ${message.username} has logged in!`); 11 console.log(`User ${message.username} has logged in!`);
12 12
13 - RoomManager.instance().sendList(connection);
14 -
15 return { ok: true }; 13 return { ok: true };
16 } 14 }
......
1 +import { Connection } from "../../connection/Connection";
2 +import { RoomManager } from "../../room/RoomManager";
3 +import { RoomDescription, RoomInfo } from "../../room/types";
4 +import { User } from "../../user/User";
5 +import { MessageResponse, RoomListRequestMessage } from "../types";
6 +
7 +export function roomListRequestHandler(
8 + user: User,
9 + message: RoomListRequestMessage
10 +): MessageResponse<RoomDescription[]> {
11 + return { ok: true, result: RoomManager.instance().list() };
12 +}
...@@ -34,12 +34,12 @@ export class LoginMessage implements Message { ...@@ -34,12 +34,12 @@ export class LoginMessage implements Message {
34 } 34 }
35 35
36 /** 36 /**
37 - * 클라 <- 서버 37 + * 클라 -> 서버 -> RoomDescription[]
38 - * 방 리스트를 서버에서 받아옵니다. 38 + * 방 목록을 요청합니다.
39 */ 39 */
40 -export class RoomListMessage implements Message { 40 +export class RoomListRequestMessage implements Message {
41 - readonly type = MessageType.ROOM_LIST; 41 + readonly type = MessageType.ROOM_LIST_REQUEST;
42 - constructor(public rooms: RoomDescription[]) {} 42 + constructor() {}
43 } 43 }
44 44
45 /** 45 /**
...@@ -87,7 +87,7 @@ export class RoomChatMessage implements Message { ...@@ -87,7 +87,7 @@ export class RoomChatMessage implements Message {
87 87
88 export class MessageType { 88 export class MessageType {
89 static readonly LOGIN = "login"; 89 static readonly LOGIN = "login";
90 - static readonly ROOM_LIST = "room_list"; 90 + static readonly ROOM_LIST_REQUEST = "room_list_request";
91 static readonly ROOM_JOIN = "room_join"; 91 static readonly ROOM_JOIN = "room_join";
92 static readonly ROOM_LEAVE = "room_leave"; 92 static readonly ROOM_LEAVE = "room_leave";
93 static readonly ROOM_USER_UPDATE = "room_user_update"; 93 static readonly ROOM_USER_UPDATE = "room_user_update";
......
1 -import { Connection } from "../connection/Connection";
2 -import { RoomListMessage } from "../message/types";
3 import { Room } from "./Room"; 1 import { Room } from "./Room";
4 import { RoomDescription } from "./types"; 2 import { RoomDescription } from "./types";
5 3
...@@ -35,12 +33,11 @@ export class RoomManager { ...@@ -35,12 +33,11 @@ export class RoomManager {
35 } 33 }
36 } 34 }
37 35
38 - public sendList(connection: Connection): void { 36 + public list(): RoomDescription[] {
39 var roomData: RoomDescription[] = []; 37 var roomData: RoomDescription[] = [];
40 this.rooms.forEach((room) => { 38 this.rooms.forEach((room) => {
41 roomData.push(room.getDescription()); 39 roomData.push(room.getDescription());
42 }); 40 });
43 - 41 + return roomData;
44 - connection.send(new RoomListMessage(roomData));
45 } 42 }
46 } 43 }
......