강동현

자유로운 이름으로 입장할 수 있도록 닉네임 구현

...@@ -38,6 +38,7 @@ export const RoomInfoRecord = Record({ ...@@ -38,6 +38,7 @@ export const RoomInfoRecord = Record({
38 users: Array( 38 users: Array(
39 Record({ 39 Record({
40 username: String, 40 username: String,
41 + nickname: String,
41 admin: Boolean, 42 admin: Boolean,
42 ready: Boolean, 43 ready: Boolean,
43 }) 44 })
......
...@@ -22,7 +22,7 @@ import { ...@@ -22,7 +22,7 @@ import {
22 // 'result' 속성은 서버 요청 결과에만 포함되는 특별한 속성입니다. 22 // 'result' 속성은 서버 요청 결과에만 포함되는 특별한 속성입니다.
23 export class ServerInboundMessageRecordMap { 23 export class ServerInboundMessageRecordMap {
24 // 로그인을 시도합니다. 24 // 로그인을 시도합니다.
25 - login = Record({ username: String }); 25 + login = Record({ nickname: String, result: String });
26 26
27 // 방 목록을 요청합니다. 27 // 방 목록을 요청합니다.
28 roomList = Record({ 28 roomList = Record({
...@@ -94,6 +94,7 @@ interface ServerOutboundMessageMap { ...@@ -94,6 +94,7 @@ interface ServerOutboundMessageMap {
94 state: "added" | "updated" | "removed"; 94 state: "added" | "updated" | "removed";
95 user: { 95 user: {
96 username: string; 96 username: string;
97 + nickname: string;
97 admin: boolean; 98 admin: boolean;
98 ready: boolean; 99 ready: boolean;
99 }; 100 };
......
...@@ -77,7 +77,7 @@ export class Connection { ...@@ -77,7 +77,7 @@ export class Connection {
77 private handleLogin( 77 private handleLogin(
78 message: ServerInboundMessage<"login"> 78 message: ServerInboundMessage<"login">
79 ): ServerResponse<"login"> { 79 ): ServerResponse<"login"> {
80 - this.user = new User(message.username, this); 80 + this.user = new User(message.nickname, this);
81 // console.log(`User ${message.username} has logged in!`); 81 // console.log(`User ${message.username} has logged in!`);
82 82
83 return { ok: true }; 83 return { ok: true };
......
...@@ -106,6 +106,7 @@ export class Room { ...@@ -106,6 +106,7 @@ export class Room {
106 state: "added", 106 state: "added",
107 user: { 107 user: {
108 username: user.username, 108 username: user.username,
109 + nickname: user.nickname,
109 admin: user === this.admin, 110 admin: user === this.admin,
110 ready: this.usersReady.includes(user), 111 ready: this.usersReady.includes(user),
111 }, 112 },
...@@ -128,6 +129,7 @@ export class Room { ...@@ -128,6 +129,7 @@ export class Room {
128 state: "removed", 129 state: "removed",
129 user: { 130 user: {
130 username: user.username, 131 username: user.username,
132 + nickname: user.nickname,
131 admin: user === this.admin, 133 admin: user === this.admin,
132 ready: this.usersReady.includes(user), 134 ready: this.usersReady.includes(user),
133 }, 135 },
...@@ -221,6 +223,7 @@ export class Room { ...@@ -221,6 +223,7 @@ export class Room {
221 state: "updated", 223 state: "updated",
222 user: { 224 user: {
223 username: user.username, 225 username: user.username,
226 + nickname: user.nickname,
224 admin: this.isAdmin(user), 227 admin: this.isAdmin(user),
225 ready: this.isReady(user), 228 ready: this.isReady(user),
226 }, 229 },
...@@ -244,6 +247,7 @@ export class Room { ...@@ -244,6 +247,7 @@ export class Room {
244 users: this.users.map((u) => { 247 users: this.users.map((u) => {
245 return { 248 return {
246 username: u.username, 249 username: u.username,
250 + nickname: u.nickname,
247 admin: this.isAdmin(u), 251 admin: this.isAdmin(u),
248 ready: this.usersReady.includes(u), 252 ready: this.usersReady.includes(u),
249 }; 253 };
......
...@@ -3,9 +3,11 @@ import { Connection } from "../connection/Connection"; ...@@ -3,9 +3,11 @@ import { Connection } from "../connection/Connection";
3 import { MessageHandler } from "../message/MessageHandler"; 3 import { MessageHandler } from "../message/MessageHandler";
4 import { Room } from "../room/Room"; 4 import { Room } from "../room/Room";
5 import { RoomManager } from "../room/RoomManager"; 5 import { RoomManager } from "../room/RoomManager";
6 +import { v4 as uuidv4 } from "uuid";
6 7
7 export class User { 8 export class User {
8 - public readonly username: string; 9 + public readonly username: string; // TODO: 실제 역할은 uuid임
10 + public readonly nickname: string;
9 11
10 public readonly connection: Connection; 12 public readonly connection: Connection;
11 13
...@@ -13,8 +15,9 @@ export class User { ...@@ -13,8 +15,9 @@ export class User {
13 15
14 public handler: MessageHandler; 16 public handler: MessageHandler;
15 17
16 - constructor(username: string, connection: Connection) { 18 + constructor(nickname: string, connection: Connection) {
17 - this.username = username; 19 + this.username = uuidv4();
20 + this.nickname = nickname;
18 this.connection = connection; 21 this.connection = connection;
19 this.handler = new MessageHandler({ 22 this.handler = new MessageHandler({
20 roomList: (user, message) => { 23 roomList: (user, message) => {
......