강동현

메세지 타입 재작성

1 +// 서버로 들어오는 메세지 타입을 정의합니다.
2 +// 'result' 속성은 서버 요청 결과에만 포함되는 특별한 속성입니다.
1 export interface ServerInboundMessageMap { 3 export interface ServerInboundMessageMap {
4 + // 로그인을 시도합니다.
2 login: { 5 login: {
3 username: string; 6 username: string;
4 }; 7 };
8 +
9 + // 방 목록을 요청합니다.
5 roomList: { 10 roomList: {
6 result: { 11 result: {
7 uuid: string; 12 uuid: string;
...@@ -10,10 +15,124 @@ export interface ServerInboundMessageMap { ...@@ -10,10 +15,124 @@ export interface ServerInboundMessageMap {
10 maxUsers: number; 15 maxUsers: number;
11 }[]; 16 }[];
12 }; 17 };
18 +
19 + // 방에 접속합니다.
20 + joinRoom: {
21 + uuid: string;
22 + result: {
23 + uuid: string;
24 + name: string;
25 + maxUsers: number;
26 + users: {
27 + username: string;
28 + }[];
29 + };
30 + };
31 +
32 + // 방에서 나갑니다.
33 + leaveRoom: {};
34 +
35 + // 채팅을 보냅니다.
36 + chat: {
37 + message: string;
38 + };
39 +
40 + // drawer가 단어를 선택합니다.
41 + chooseWord: {
42 + word: string;
43 + };
44 +
45 + // 브러시 정보를 변경합니다.
46 + setBrush: {
47 + size: number;
48 + color: string;
49 + drawing: boolean;
50 + };
51 +
52 + // 브러시를 이동합니다.
53 + moveBrush: {
54 + x: number;
55 + y: number;
56 + };
13 } 57 }
14 58
59 +// 서버에서 나가는 메세지 타입을 정의합니다.
15 export interface ServerOutboundMessageMap { 60 export interface ServerOutboundMessageMap {
61 + // 방에 접속 중인 유저 목록이 업데이트 되었습니다.
62 + updateRoomUser: {
63 + state: "added" | "updated" | "removed";
64 + user: {
65 + username: string;
66 + };
67 + };
68 +
69 + // 다른 유저가 채팅을 보냈습니다.
16 chat: { 70 chat: {
71 + sender: string;
17 message: string; 72 message: string;
18 }; 73 };
74 +
75 + // 라운드가 시작되었습니다.
76 + startRound: {
77 + round: number;
78 + duration: number;
79 + roles: {
80 + username: string;
81 + role: "drawer" | "guesser" | "winner" | "spectator";
82 + };
83 + };
84 +
85 + // drawer에게 선택할 수 있는 단어가 주어졌습니다.
86 + wordSet: {
87 + words: string[];
88 + };
89 +
90 + // 이번 라운드의 단어가 선택되었습니다.
91 + wordChosen: {
92 + length: number;
93 + };
94 +
95 + // 라운드 타이머 정보를 동기화합니다.
96 + timer: {
97 + state: "started" | "stopped";
98 + time: number;
99 + };
100 +
101 + // 라운드가 종료되었습니다.
102 + finishRound: {
103 + answer: string;
104 + };
105 +
106 + // 역할이 변경되었습니다.
107 + role: {
108 + username: string;
109 + role: "drawer" | "guesser" | "winner" | "spectator";
110 + };
111 +
112 + // 보낸 단어가 정답 처리 되었습니다.
113 + answerAccepted: {
114 + answer: string;
115 + };
116 +
117 + // 게임이 종료되었습니다.
118 + finishGame: {};
119 +
120 + // 브러시 정보가 변경되었습니다.
121 + setBrush: {
122 + size: number;
123 + color: string;
124 + drawing: boolean;
125 + };
126 +
127 + // 브러시가 이동되었습니다.
128 + moveBrush: {
129 + x: number;
130 + y: number;
131 + };
132 +}
133 +
134 +export interface ServerResponse<T> {
135 + ok: boolean;
136 + reason?: string;
137 + result?: T;
19 } 138 }
......