Showing
9 changed files
with
44 additions
and
22 deletions
| 1 | import { RoomDescription, RoomInfo } from "./dataType"; | 1 | import { RoomDescription, RoomInfo } from "./dataType"; |
| 2 | +import { keys } from "ts-transformer-keys"; | ||
| 2 | 3 | ||
| 3 | // 서버로 들어오는 메세지 타입을 정의합니다. | 4 | // 서버로 들어오는 메세지 타입을 정의합니다. |
| 4 | // 'result' 속성은 서버 요청 결과에만 포함되는 특별한 속성입니다. | 5 | // 'result' 속성은 서버 요청 결과에만 포함되는 특별한 속성입니다. |
| 5 | -export interface ServerInboundMessageMap { | 6 | +interface ServerInboundMessageMap { |
| 6 | // 로그인을 시도합니다. | 7 | // 로그인을 시도합니다. |
| 7 | login: { | 8 | login: { |
| 8 | username: string; | 9 | username: string; |
| ... | @@ -47,7 +48,7 @@ export interface ServerInboundMessageMap { | ... | @@ -47,7 +48,7 @@ export interface ServerInboundMessageMap { |
| 47 | } | 48 | } |
| 48 | 49 | ||
| 49 | // 서버에서 나가는 메세지 타입을 정의합니다. | 50 | // 서버에서 나가는 메세지 타입을 정의합니다. |
| 50 | -export interface ServerOutboundMessageMap { | 51 | +interface ServerOutboundMessageMap { |
| 51 | // 방에 접속 중인 유저 목록이 업데이트 되었습니다. | 52 | // 방에 접속 중인 유저 목록이 업데이트 되었습니다. |
| 52 | updateRoomUser: { | 53 | updateRoomUser: { |
| 53 | state: "added" | "updated" | "removed"; | 54 | state: "added" | "updated" | "removed"; |
| ... | @@ -121,10 +122,16 @@ export interface ServerOutboundMessageMap { | ... | @@ -121,10 +122,16 @@ export interface ServerOutboundMessageMap { |
| 121 | }; | 122 | }; |
| 122 | } | 123 | } |
| 123 | 124 | ||
| 124 | -export type ServerInboundMessage<Key extends keyof ServerInboundMessageMap> = | 125 | +export type ServerInboundMessageKey = keyof ServerInboundMessageMap; |
| 125 | - Omit<ServerInboundMessageMap[Key], "result">; | ||
| 126 | 126 | ||
| 127 | -export interface ServerResponse<Key extends keyof ServerInboundMessageMap> { | 127 | +export const ServerInboundMessageKeyArray = keys<ServerInboundMessageMap>(); |
| 128 | + | ||
| 129 | +export type ServerInboundMessage<Key extends ServerInboundMessageKey> = Omit< | ||
| 130 | + ServerInboundMessageMap[Key], | ||
| 131 | + "result" | ||
| 132 | +>; | ||
| 133 | + | ||
| 134 | +export interface ServerResponse<Key extends ServerInboundMessageKey> { | ||
| 128 | ok: boolean; | 135 | ok: boolean; |
| 129 | reason?: string; | 136 | reason?: string; |
| 130 | result?: "result" extends keyof ServerInboundMessageMap[Key] | 137 | result?: "result" extends keyof ServerInboundMessageMap[Key] |
| ... | @@ -134,3 +141,7 @@ export interface ServerResponse<Key extends keyof ServerInboundMessageMap> { | ... | @@ -134,3 +141,7 @@ export interface ServerResponse<Key extends keyof ServerInboundMessageMap> { |
| 134 | 141 | ||
| 135 | export type ServerOutboundMessage<Key extends keyof ServerOutboundMessageMap> = | 142 | export type ServerOutboundMessage<Key extends keyof ServerOutboundMessageMap> = |
| 136 | ServerOutboundMessageMap[Key]; | 143 | ServerOutboundMessageMap[Key]; |
| 144 | + | ||
| 145 | +export type ServerOutboundMessageKey = keyof ServerOutboundMessageMap; | ||
| 146 | + | ||
| 147 | +export const ServerOutboundMessageKeyArray = keys<ServerOutboundMessageMap>(); | ... | ... |
common/package.json
0 → 100644
common/yarn.lock
0 → 100644
| 1 | +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. | ||
| 2 | +# yarn lockfile v1 | ||
| 3 | + | ||
| 4 | + | ||
| 5 | +ts-transformer-keys@^0.4.3: | ||
| 6 | + version "0.4.3" | ||
| 7 | + resolved "https://registry.yarnpkg.com/ts-transformer-keys/-/ts-transformer-keys-0.4.3.tgz#d62389a40f430c00ef98fb9575fb6778a196e3ed" | ||
| 8 | + integrity sha512-pOTLlet1SnAvhKNr9tMAFwuv5283OkUNiq1fXTEK+vrSv+kxU3e2Ijr/UkqyX2vuMmvcNHdpXC31hob7ljH//g== |
| 1 | import { Socket } from "socket.io"; | 1 | import { Socket } from "socket.io"; |
| 2 | -import { ServerOutboundMessage, ServerOutboundMessageMap } from "../../common"; | 2 | +import { ServerOutboundMessage, ServerOutboundMessageKey } from "../../common"; |
| 3 | import { MessageHandlerChain } from "../message/MessageHandlerChain"; | 3 | import { MessageHandlerChain } from "../message/MessageHandlerChain"; |
| 4 | import { Room } from "../room/Room"; | 4 | import { Room } from "../room/Room"; |
| 5 | import { User } from "../user/User"; | 5 | import { User } from "../user/User"; |
| ... | @@ -16,7 +16,7 @@ export class Connection { | ... | @@ -16,7 +16,7 @@ export class Connection { |
| 16 | this.messageHandlerChain = new MessageHandlerChain(this); | 16 | this.messageHandlerChain = new MessageHandlerChain(this); |
| 17 | } | 17 | } |
| 18 | 18 | ||
| 19 | - public send<T extends keyof ServerOutboundMessageMap>( | 19 | + public send<T extends ServerOutboundMessageKey>( |
| 20 | type: T, | 20 | type: T, |
| 21 | message: ServerOutboundMessage<T> | 21 | message: ServerOutboundMessage<T> |
| 22 | ) { | 22 | ) { | ... | ... |
| 1 | import { Connection } from "../connection/Connection"; | 1 | import { Connection } from "../connection/Connection"; |
| 2 | import { | 2 | import { |
| 3 | ServerInboundMessage, | 3 | ServerInboundMessage, |
| 4 | - ServerInboundMessageMap, | 4 | + ServerInboundMessageKey, |
| 5 | ServerResponse, | 5 | ServerResponse, |
| 6 | } from "../../common/index"; | 6 | } from "../../common/index"; |
| 7 | import { User } from "../user/User"; | 7 | import { User } from "../user/User"; |
| 8 | 8 | ||
| 9 | type UserHandlerMap = { | 9 | type UserHandlerMap = { |
| 10 | - [Key in keyof ServerInboundMessageMap]?: ( | 10 | + [Key in ServerInboundMessageKey]?: ( |
| 11 | user: User, | 11 | user: User, |
| 12 | message: ServerInboundMessage<Key> | 12 | message: ServerInboundMessage<Key> |
| 13 | ) => ServerResponse<Key>; | 13 | ) => ServerResponse<Key>; |
| ... | @@ -21,7 +21,7 @@ export class MessageHandler { | ... | @@ -21,7 +21,7 @@ export class MessageHandler { |
| 21 | } | 21 | } |
| 22 | 22 | ||
| 23 | public handle( | 23 | public handle( |
| 24 | - type: keyof ServerInboundMessageMap, | 24 | + type: ServerInboundMessageKey, |
| 25 | user: User, | 25 | user: User, |
| 26 | message: any, | 26 | message: any, |
| 27 | callback: Function | 27 | callback: Function | ... | ... |
| 1 | import { Connection } from "../connection/Connection"; | 1 | import { Connection } from "../connection/Connection"; |
| 2 | import { | 2 | import { |
| 3 | ServerInboundMessage, | 3 | ServerInboundMessage, |
| 4 | - ServerInboundMessageMap, | 4 | + ServerInboundMessageKey, |
| 5 | + ServerOutboundMessageKeyArray, | ||
| 5 | ServerResponse, | 6 | ServerResponse, |
| 6 | } from "../../common/index"; | 7 | } from "../../common/index"; |
| 7 | -import { keys } from "ts-transformer-keys"; | ||
| 8 | import { User } from "../user/User"; | 8 | import { User } from "../user/User"; |
| 9 | 9 | ||
| 10 | export class MessageHandlerChain { | 10 | export class MessageHandlerChain { |
| ... | @@ -24,8 +24,8 @@ export class MessageHandlerChain { | ... | @@ -24,8 +24,8 @@ export class MessageHandlerChain { |
| 24 | } | 24 | } |
| 25 | ); | 25 | ); |
| 26 | 26 | ||
| 27 | - for (const key in keys<ServerInboundMessageMap>()) { | 27 | + for (const key in ServerOutboundMessageKeyArray) { |
| 28 | - const type = key as keyof ServerInboundMessageMap; | 28 | + const type = key as ServerInboundMessageKey; |
| 29 | this.connection.socket.on(key, (message: any, callback: Function) => { | 29 | this.connection.socket.on(key, (message: any, callback: Function) => { |
| 30 | // Game > Room > User 순으로 전달 | 30 | // Game > Room > User 순으로 전달 |
| 31 | if ( | 31 | if ( | ... | ... |
| ... | @@ -16,7 +16,6 @@ | ... | @@ -16,7 +16,6 @@ |
| 16 | "socket.io": "^4.1.2", | 16 | "socket.io": "^4.1.2", |
| 17 | "socket.io-client": "^4.1.2", | 17 | "socket.io-client": "^4.1.2", |
| 18 | "ts-node": "^9.1.1", | 18 | "ts-node": "^9.1.1", |
| 19 | - "ts-transformer-keys": "^0.4.3", | ||
| 20 | "typescript": "^4.2.4", | 19 | "typescript": "^4.2.4", |
| 21 | "uuid": "^8.3.2" | 20 | "uuid": "^8.3.2" |
| 22 | }, | 21 | }, | ... | ... |
| ... | @@ -6,7 +6,7 @@ import { MessageHandler } from "../message/MessageHandler"; | ... | @@ -6,7 +6,7 @@ import { MessageHandler } from "../message/MessageHandler"; |
| 6 | import { | 6 | import { |
| 7 | ServerInboundMessage, | 7 | ServerInboundMessage, |
| 8 | ServerOutboundMessage, | 8 | ServerOutboundMessage, |
| 9 | - ServerOutboundMessageMap, | 9 | + ServerOutboundMessageKey, |
| 10 | } from "../../common"; | 10 | } from "../../common"; |
| 11 | import { RoomDescription, RoomInfo, UserData } from "../../common/dataType"; | 11 | import { RoomDescription, RoomInfo, UserData } from "../../common/dataType"; |
| 12 | 12 | ||
| ... | @@ -86,7 +86,7 @@ export class Room { | ... | @@ -86,7 +86,7 @@ export class Room { |
| 86 | }; | 86 | }; |
| 87 | } | 87 | } |
| 88 | 88 | ||
| 89 | - public broadcast<T extends keyof ServerOutboundMessageMap>( | 89 | + public broadcast<T extends ServerOutboundMessageKey>( |
| 90 | type: T, | 90 | type: T, |
| 91 | message: ServerOutboundMessage<T>, | 91 | message: ServerOutboundMessage<T>, |
| 92 | except?: User | 92 | except?: User | ... | ... |
| ... | @@ -1657,11 +1657,6 @@ ts-node@^9.1.1: | ... | @@ -1657,11 +1657,6 @@ ts-node@^9.1.1: |
| 1657 | source-map-support "^0.5.17" | 1657 | source-map-support "^0.5.17" |
| 1658 | yn "3.1.1" | 1658 | yn "3.1.1" |
| 1659 | 1659 | ||
| 1660 | -ts-transformer-keys@^0.4.3: | ||
| 1661 | - version "0.4.3" | ||
| 1662 | - resolved "https://registry.yarnpkg.com/ts-transformer-keys/-/ts-transformer-keys-0.4.3.tgz#d62389a40f430c00ef98fb9575fb6778a196e3ed" | ||
| 1663 | - integrity sha512-pOTLlet1SnAvhKNr9tMAFwuv5283OkUNiq1fXTEK+vrSv+kxU3e2Ijr/UkqyX2vuMmvcNHdpXC31hob7ljH//g== | ||
| 1664 | - | ||
| 1665 | type-detect@^4.0.0, type-detect@^4.0.5: | 1660 | type-detect@^4.0.0, type-detect@^4.0.5: |
| 1666 | version "4.0.8" | 1661 | version "4.0.8" |
| 1667 | resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" | 1662 | resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" | ... | ... |
-
Please register or login to post a comment