@colyseus/core 0.16.24 → 0.17.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (258) hide show
  1. package/build/Debug.js +16 -4
  2. package/build/Debug.js.map +2 -2
  3. package/build/Debug.mjs +11 -1
  4. package/build/Debug.mjs.map +2 -2
  5. package/build/IPC.js +5 -3
  6. package/build/IPC.js.map +2 -2
  7. package/build/IPC.mjs +1 -0
  8. package/build/IPC.mjs.map +2 -2
  9. package/build/Logger.js +1 -0
  10. package/build/Logger.js.map +1 -1
  11. package/build/MatchMaker.js +148 -84
  12. package/build/MatchMaker.js.map +3 -3
  13. package/build/MatchMaker.mjs +130 -70
  14. package/build/MatchMaker.mjs.map +3 -3
  15. package/build/Protocol.js +54 -41
  16. package/build/Protocol.js.map +3 -3
  17. package/build/Protocol.mjs +52 -41
  18. package/build/Protocol.mjs.map +3 -3
  19. package/build/Room.js +430 -195
  20. package/build/Room.js.map +3 -3
  21. package/build/Room.mjs +417 -175
  22. package/build/Room.mjs.map +3 -3
  23. package/build/Server.js +49 -108
  24. package/build/Server.js.map +3 -3
  25. package/build/Server.mjs +40 -102
  26. package/build/Server.mjs.map +3 -3
  27. package/build/Stats.js +2 -1
  28. package/build/Stats.js.map +2 -2
  29. package/build/Stats.mjs.map +1 -1
  30. package/build/Transport.js +29 -11
  31. package/build/Transport.js.map +3 -3
  32. package/build/Transport.mjs +15 -9
  33. package/build/Transport.mjs.map +3 -3
  34. package/build/errors/RoomExceptions.js +9 -5
  35. package/build/errors/RoomExceptions.js.map +2 -2
  36. package/build/errors/RoomExceptions.mjs +8 -5
  37. package/build/errors/RoomExceptions.mjs.map +2 -2
  38. package/build/errors/SeatReservationError.js +1 -0
  39. package/build/errors/SeatReservationError.js.map +1 -1
  40. package/build/errors/ServerError.js +2 -1
  41. package/build/errors/ServerError.js.map +2 -2
  42. package/build/errors/ServerError.mjs.map +1 -1
  43. package/build/index.js +60 -26
  44. package/build/index.js.map +2 -2
  45. package/build/index.mjs +33 -7
  46. package/build/index.mjs.map +2 -2
  47. package/build/matchmaker/Lobby.js +13 -3
  48. package/build/matchmaker/Lobby.js.map +2 -2
  49. package/build/matchmaker/Lobby.mjs +11 -2
  50. package/build/matchmaker/Lobby.mjs.map +2 -2
  51. package/build/matchmaker/LocalDriver/LocalDriver.js +94 -0
  52. package/build/matchmaker/LocalDriver/LocalDriver.js.map +7 -0
  53. package/build/matchmaker/LocalDriver/LocalDriver.mjs +71 -0
  54. package/build/matchmaker/LocalDriver/LocalDriver.mjs.map +7 -0
  55. package/build/matchmaker/LocalDriver/Query.js +111 -0
  56. package/build/matchmaker/LocalDriver/Query.js.map +7 -0
  57. package/build/matchmaker/LocalDriver/Query.mjs +88 -0
  58. package/build/matchmaker/LocalDriver/Query.mjs.map +7 -0
  59. package/build/matchmaker/RegisteredHandler.js +57 -7
  60. package/build/matchmaker/RegisteredHandler.js.map +2 -2
  61. package/build/matchmaker/RegisteredHandler.mjs +54 -5
  62. package/build/matchmaker/RegisteredHandler.mjs.map +2 -2
  63. package/build/matchmaker/controller.js +8 -8
  64. package/build/matchmaker/controller.js.map +2 -2
  65. package/build/matchmaker/controller.mjs +4 -5
  66. package/build/matchmaker/controller.mjs.map +2 -2
  67. package/build/matchmaker/driver/api.js +21 -2
  68. package/build/matchmaker/driver/api.js.map +2 -2
  69. package/build/matchmaker/driver/api.mjs +18 -1
  70. package/build/matchmaker/driver/api.mjs.map +2 -2
  71. package/build/matchmaker/driver/local/LocalDriver.js +36 -7
  72. package/build/matchmaker/driver/local/LocalDriver.js.map +2 -2
  73. package/build/matchmaker/driver/local/LocalDriver.mjs +33 -5
  74. package/build/matchmaker/driver/local/LocalDriver.mjs.map +2 -2
  75. package/build/matchmaker/driver/local/Query.js +51 -18
  76. package/build/matchmaker/driver/local/Query.js.map +2 -2
  77. package/build/matchmaker/driver/local/Query.mjs +50 -18
  78. package/build/matchmaker/driver/local/Query.mjs.map +2 -2
  79. package/build/matchmaker/driver.js +44 -0
  80. package/build/matchmaker/driver.js.map +7 -0
  81. package/build/matchmaker/driver.mjs +20 -0
  82. package/build/matchmaker/driver.mjs.map +7 -0
  83. package/build/matchmaker/routes.js +79 -0
  84. package/build/matchmaker/routes.js.map +7 -0
  85. package/build/matchmaker/routes.mjs +45 -0
  86. package/build/matchmaker/routes.mjs.map +7 -0
  87. package/build/presence/LocalPresence.js +13 -27
  88. package/build/presence/LocalPresence.js.map +3 -3
  89. package/build/presence/LocalPresence.mjs +11 -16
  90. package/build/presence/LocalPresence.mjs.map +2 -2
  91. package/build/presence/Presence.js +37 -0
  92. package/build/presence/Presence.js.map +2 -2
  93. package/build/presence/Presence.mjs +29 -0
  94. package/build/presence/Presence.mjs.map +3 -3
  95. package/build/rooms/LobbyRoom.js +5 -5
  96. package/build/rooms/LobbyRoom.js.map +2 -2
  97. package/build/rooms/LobbyRoom.mjs +1 -2
  98. package/build/rooms/LobbyRoom.mjs.map +2 -2
  99. package/build/rooms/RankedQueueRoom.js +224 -0
  100. package/build/rooms/RankedQueueRoom.js.map +7 -0
  101. package/build/rooms/RankedQueueRoom.mjs +201 -0
  102. package/build/rooms/RankedQueueRoom.mjs.map +7 -0
  103. package/build/rooms/RelayRoom.js +6 -6
  104. package/build/rooms/RelayRoom.js.map +2 -2
  105. package/build/rooms/RelayRoom.mjs +4 -5
  106. package/build/rooms/RelayRoom.mjs.map +2 -2
  107. package/build/rooms/createRoom.js +51 -0
  108. package/build/rooms/createRoom.js.map +7 -0
  109. package/build/rooms/createRoom.mjs +28 -0
  110. package/build/rooms/createRoom.mjs.map +7 -0
  111. package/build/router/default_routes.js +79 -0
  112. package/build/router/default_routes.js.map +7 -0
  113. package/build/router/default_routes.mjs +45 -0
  114. package/build/router/default_routes.mjs.map +7 -0
  115. package/build/router/index.js +55 -0
  116. package/build/router/index.js.map +7 -0
  117. package/build/router/index.mjs +30 -0
  118. package/build/router/index.mjs.map +7 -0
  119. package/build/serializer/NoneSerializer.js +1 -0
  120. package/build/serializer/NoneSerializer.js.map +2 -2
  121. package/build/serializer/NoneSerializer.mjs.map +2 -2
  122. package/build/serializer/SchemaSerializer.js +6 -7
  123. package/build/serializer/SchemaSerializer.js.map +2 -2
  124. package/build/serializer/SchemaSerializer.mjs +3 -5
  125. package/build/serializer/SchemaSerializer.mjs.map +2 -2
  126. package/build/serializer/SchemaSerializerDebug.js +29 -0
  127. package/build/serializer/SchemaSerializerDebug.js.map +3 -3
  128. package/build/serializer/SchemaSerializerDebug.mjs +7 -0
  129. package/build/serializer/SchemaSerializerDebug.mjs.map +3 -3
  130. package/build/serializer/Serializer.js +1 -0
  131. package/build/serializer/Serializer.js.map +2 -2
  132. package/build/{Debug.d.ts → src/Debug.d.ts} +2 -1
  133. package/build/{IPC.d.ts → src/IPC.d.ts} +2 -2
  134. package/build/{MatchMaker.d.ts → src/MatchMaker.d.ts} +58 -33
  135. package/build/src/Protocol.d.ts +53 -0
  136. package/build/src/Room.d.ts +497 -0
  137. package/build/{Server.d.ts → src/Server.d.ts} +23 -25
  138. package/build/{Transport.d.ts → src/Transport.d.ts} +65 -22
  139. package/build/{errors → src/errors}/RoomExceptions.d.ts +8 -7
  140. package/build/src/index.d.ts +27 -0
  141. package/build/src/matchmaker/Lobby.d.ts +4 -0
  142. package/build/src/matchmaker/LocalDriver/LocalDriver.d.ts +17 -0
  143. package/build/src/matchmaker/LocalDriver/Query.d.ts +12 -0
  144. package/build/src/matchmaker/RegisteredHandler.d.ts +81 -0
  145. package/build/{matchmaker → src/matchmaker}/controller.d.ts +5 -6
  146. package/build/src/matchmaker/driver/api.d.ts +145 -0
  147. package/build/src/matchmaker/driver/local/LocalDriver.d.ts +17 -0
  148. package/build/src/matchmaker/driver/local/Query.d.ts +12 -0
  149. package/build/src/matchmaker/driver.d.ts +145 -0
  150. package/build/src/matchmaker/routes.d.ts +92 -0
  151. package/build/{presence → src/presence}/LocalPresence.d.ts +1 -1
  152. package/build/{presence → src/presence}/Presence.d.ts +2 -0
  153. package/build/{rooms → src/rooms}/LobbyRoom.d.ts +4 -4
  154. package/build/src/rooms/RankedQueueRoom.d.ts +125 -0
  155. package/build/{rooms → src/rooms}/RelayRoom.d.ts +5 -4
  156. package/build/src/rooms/createRoom.d.ts +65 -0
  157. package/build/src/router/default_routes.d.ts +103 -0
  158. package/build/src/router/index.d.ts +68 -0
  159. package/build/{serializer → src/serializer}/NoneSerializer.d.ts +2 -2
  160. package/build/{serializer → src/serializer}/SchemaSerializer.d.ts +9 -9
  161. package/build/{serializer → src/serializer}/Serializer.d.ts +3 -3
  162. package/build/{utils → src/utils}/DevMode.d.ts +5 -4
  163. package/build/{utils → src/utils}/StandardSchema.d.ts +1 -1
  164. package/build/{utils → src/utils}/Utils.d.ts +15 -4
  165. package/build/utils/DevMode.js +54 -26
  166. package/build/utils/DevMode.js.map +3 -3
  167. package/build/utils/DevMode.mjs +44 -19
  168. package/build/utils/DevMode.mjs.map +2 -2
  169. package/build/utils/StandardSchema.js.map +1 -1
  170. package/build/utils/StandardSchema.mjs.map +1 -1
  171. package/build/utils/Utils.js +8 -15
  172. package/build/utils/Utils.js.map +3 -3
  173. package/build/utils/Utils.mjs +6 -4
  174. package/build/utils/Utils.mjs.map +2 -2
  175. package/package.json +21 -16
  176. package/src/Debug.ts +37 -0
  177. package/src/IPC.ts +124 -0
  178. package/src/Logger.ts +30 -0
  179. package/src/MatchMaker.ts +1119 -0
  180. package/src/Protocol.ts +160 -0
  181. package/src/Room.ts +1797 -0
  182. package/src/Server.ts +325 -0
  183. package/src/Stats.ts +107 -0
  184. package/src/Transport.ts +207 -0
  185. package/src/errors/RoomExceptions.ts +141 -0
  186. package/src/errors/SeatReservationError.ts +5 -0
  187. package/src/errors/ServerError.ts +17 -0
  188. package/src/index.ts +81 -0
  189. package/src/matchmaker/Lobby.ts +68 -0
  190. package/src/matchmaker/LocalDriver/LocalDriver.ts +92 -0
  191. package/src/matchmaker/LocalDriver/Query.ts +94 -0
  192. package/src/matchmaker/RegisteredHandler.ts +172 -0
  193. package/src/matchmaker/controller.ts +64 -0
  194. package/src/matchmaker/driver.ts +191 -0
  195. package/src/presence/LocalPresence.ts +331 -0
  196. package/src/presence/Presence.ts +263 -0
  197. package/src/rooms/LobbyRoom.ts +135 -0
  198. package/src/rooms/RankedQueueRoom.ts +425 -0
  199. package/src/rooms/RelayRoom.ts +90 -0
  200. package/src/router/default_routes.ts +58 -0
  201. package/src/router/index.ts +43 -0
  202. package/src/serializer/NoneSerializer.ts +16 -0
  203. package/src/serializer/SchemaSerializer.ts +194 -0
  204. package/src/serializer/SchemaSerializerDebug.ts +148 -0
  205. package/src/serializer/Serializer.ts +9 -0
  206. package/src/utils/DevMode.ts +133 -0
  207. package/src/utils/StandardSchema.ts +20 -0
  208. package/src/utils/Utils.ts +169 -0
  209. package/src/utils/nanoevents.ts +20 -0
  210. package/build/Protocol.d.ts +0 -37
  211. package/build/Room.d.ts +0 -265
  212. package/build/discovery/index.d.ts +0 -8
  213. package/build/discovery/index.js +0 -50
  214. package/build/discovery/index.js.map +0 -7
  215. package/build/discovery/index.mjs +0 -26
  216. package/build/discovery/index.mjs.map +0 -7
  217. package/build/index.d.ts +0 -24
  218. package/build/matchmaker/Lobby.d.ts +0 -4
  219. package/build/matchmaker/RegisteredHandler.d.ts +0 -19
  220. package/build/matchmaker/driver/Query.d.ts +0 -8
  221. package/build/matchmaker/driver/Query.js +0 -68
  222. package/build/matchmaker/driver/Query.js.map +0 -7
  223. package/build/matchmaker/driver/Query.mjs +0 -45
  224. package/build/matchmaker/driver/Query.mjs.map +0 -7
  225. package/build/matchmaker/driver/RoomData.d.ts +0 -19
  226. package/build/matchmaker/driver/RoomData.js +0 -79
  227. package/build/matchmaker/driver/RoomData.js.map +0 -7
  228. package/build/matchmaker/driver/RoomData.mjs +0 -56
  229. package/build/matchmaker/driver/RoomData.mjs.map +0 -7
  230. package/build/matchmaker/driver/api.d.ts +0 -104
  231. package/build/matchmaker/driver/index.d.ts +0 -13
  232. package/build/matchmaker/driver/index.js +0 -64
  233. package/build/matchmaker/driver/index.js.map +0 -7
  234. package/build/matchmaker/driver/index.mjs +0 -42
  235. package/build/matchmaker/driver/index.mjs.map +0 -7
  236. package/build/matchmaker/driver/interfaces.d.ts +0 -73
  237. package/build/matchmaker/driver/interfaces.js +0 -15
  238. package/build/matchmaker/driver/interfaces.js.map +0 -7
  239. package/build/matchmaker/driver/interfaces.mjs +0 -0
  240. package/build/matchmaker/driver/interfaces.mjs.map +0 -7
  241. package/build/matchmaker/driver/local/LocalDriver.d.ts +0 -13
  242. package/build/matchmaker/driver/local/Query.d.ts +0 -9
  243. package/build/matchmaker/driver/local/RoomData.d.ts +0 -19
  244. package/build/matchmaker/driver/local/RoomData.js +0 -79
  245. package/build/matchmaker/driver/local/RoomData.js.map +0 -7
  246. package/build/matchmaker/driver/local/RoomData.mjs +0 -57
  247. package/build/matchmaker/driver/local/RoomData.mjs.map +0 -7
  248. package/build/utils/types.d.ts +0 -1
  249. package/build/utils/types.js +0 -15
  250. package/build/utils/types.js.map +0 -7
  251. package/build/utils/types.mjs +0 -0
  252. package/build/utils/types.mjs.map +0 -7
  253. /package/build/{Logger.d.ts → src/Logger.d.ts} +0 -0
  254. /package/build/{Stats.d.ts → src/Stats.d.ts} +0 -0
  255. /package/build/{errors → src/errors}/SeatReservationError.d.ts +0 -0
  256. /package/build/{errors → src/errors}/ServerError.d.ts +0 -0
  257. /package/build/{serializer → src/serializer}/SchemaSerializerDebug.d.ts +0 -0
  258. /package/build/{utils → src/utils}/nanoevents.d.ts +0 -0
@@ -0,0 +1,160 @@
1
+ import { Packr } from '@colyseus/msgpackr';
2
+ import { encode, type Iterator } from '@colyseus/schema';
3
+
4
+ /**
5
+ * Colyseus protocol codes range between 0~100
6
+ */
7
+ export const Protocol = {
8
+ // Room-related (10~19)
9
+ JOIN_ROOM: 10,
10
+ ERROR: 11,
11
+ LEAVE_ROOM: 12,
12
+ ROOM_DATA: 13,
13
+ ROOM_STATE: 14,
14
+ ROOM_STATE_PATCH: 15,
15
+ // ROOM_DATA_SCHEMA: 16, // DEPRECATED: used to send schema instances via room.send()
16
+ ROOM_DATA_BYTES: 17,
17
+ PING: 18,
18
+ } as const;
19
+ export type Protocol = typeof Protocol[keyof typeof Protocol];
20
+
21
+ /**
22
+ * WebSocket close codes
23
+ * (See https://github.com/Luka967/websocket-close-codes)
24
+ */
25
+ export const CloseCode = {
26
+ NORMAL_CLOSURE: 1000,
27
+ GOING_AWAY: 1001,
28
+ NO_STATUS_RECEIVED: 1005,
29
+ ABNORMAL_CLOSURE: 1006,
30
+
31
+ CONSENTED: 4000,
32
+ SERVER_SHUTDOWN: 4001,
33
+ WITH_ERROR: 4002,
34
+ DEVMODE_RESTART: 4010
35
+ } as const;
36
+ export type CloseCode = typeof CloseCode[keyof typeof CloseCode];
37
+
38
+ export const ErrorCode = {
39
+ // HTTP MatchMaking Error Codes
40
+ MATCHMAKE_NO_HANDLER: 520,
41
+ MATCHMAKE_INVALID_CRITERIA: 521,
42
+ MATCHMAKE_INVALID_ROOM_ID: 522,
43
+ MATCHMAKE_UNHANDLED: 523, // generic exception during onCreate/onJoin
44
+ MATCHMAKE_EXPIRED: 524, // generic exception during onCreate/onJoin
45
+ AUTH_FAILED: 525,
46
+ APPLICATION_ERROR: 526,
47
+
48
+ INVALID_PAYLOAD: 4217,
49
+ } as const;
50
+ export type ErrorCode = typeof ErrorCode[keyof typeof ErrorCode];
51
+
52
+ // Inter-process communication protocol
53
+ export const IpcProtocol = {
54
+ SUCCESS: 0,
55
+ ERROR: 1,
56
+ TIMEOUT: 2,
57
+ } as const;
58
+ export type IpcProtocol = typeof IpcProtocol[keyof typeof IpcProtocol];
59
+
60
+ const packr = new Packr({
61
+ useRecords: false, // increased compatibility with decoders other than "msgpackr"
62
+ });
63
+
64
+ // msgpackr workaround: initialize buffer
65
+ packr.encode(undefined);
66
+
67
+ export const getMessageBytes = {
68
+ [Protocol.JOIN_ROOM]: (reconnectionToken: string, serializerId: string, handshake?: Uint8Array) => {
69
+ const it: Iterator = { offset: 1 };
70
+ packr.buffer[0] = Protocol.JOIN_ROOM;
71
+
72
+ packr.buffer[it.offset++] = Buffer.byteLength(reconnectionToken, "utf8");
73
+ encode.utf8Write(packr.buffer as Buffer, reconnectionToken, it);
74
+
75
+ packr.buffer[it.offset++] = Buffer.byteLength(serializerId, "utf8");
76
+ encode.utf8Write(packr.buffer as Buffer, serializerId, it);
77
+
78
+ let handshakeLength = handshake?.byteLength || 0;
79
+
80
+ // check if buffer needs to be resized
81
+ if (handshakeLength > packr.buffer.byteLength - it.offset) {
82
+ packr.useBuffer(Buffer.alloc(it.offset + handshakeLength, packr.buffer));
83
+ }
84
+
85
+ if (handshakeLength > 0) {
86
+ packr.buffer.set(handshake, it.offset);
87
+ }
88
+
89
+ return Buffer.from(packr.buffer.subarray(0, it.offset + handshakeLength));
90
+ },
91
+
92
+ [Protocol.ERROR]: (code: number, message: string = '') => {
93
+ const it: Iterator = { offset: 1 };
94
+ packr.buffer[0] = Protocol.ERROR;
95
+
96
+ encode.number(packr.buffer as Buffer, code, it);
97
+ encode.string(packr.buffer as Buffer, message, it);
98
+
99
+ return Buffer.from(packr.buffer.subarray(0, it.offset));
100
+ },
101
+
102
+ [Protocol.ROOM_STATE]: (bytes: number[]) => {
103
+ return [Protocol.ROOM_STATE, ...bytes];
104
+ },
105
+
106
+ [Protocol.PING]: () => {
107
+ packr.buffer[0] = Protocol.PING;
108
+ return Buffer.from(packr.buffer.subarray(0, 1));
109
+ },
110
+
111
+ raw: (code: Protocol, type: string | number, message?: any, rawMessage?: Uint8Array | Buffer) => {
112
+ const it: Iterator = { offset: 1 };
113
+ packr.buffer[0] = code;
114
+
115
+ if (typeof (type) === 'string') {
116
+ encode.string(packr.buffer as Buffer, type, it);
117
+
118
+ } else {
119
+ encode.number(packr.buffer as Buffer, type, it);
120
+ }
121
+
122
+ if (message !== undefined) {
123
+ // force to encode from offset
124
+ packr.position = 0;
125
+
126
+ //
127
+ // TODO: remove this after issue is fixed https://github.com/kriszyp/msgpackr/issues/139
128
+ //
129
+ // - This check is only required when running integration tests.
130
+ // (colyseus.js' usage of msgpackr/buffer is conflicting)
131
+ //
132
+ if (process.env.NODE_ENV !== "production") {
133
+ packr.useBuffer(packr.buffer);
134
+ }
135
+
136
+ // pack message into the same packr.buffer
137
+ const endOfBufferOffset = packr.pack(message, 2048 + it.offset).byteLength;
138
+ // 2048 = RESERVE_START_SPACE
139
+ return Buffer.from(packr.buffer.subarray(0, endOfBufferOffset));
140
+
141
+ } else if (rawMessage !== undefined) {
142
+
143
+ // check if buffer needs to be resized
144
+ // TODO: can we avoid this?
145
+ if (rawMessage.length + it.offset > packr.buffer.byteLength) {
146
+ packr.useBuffer(Buffer.alloc(it.offset + rawMessage.length, packr.buffer));
147
+ }
148
+
149
+ // copy raw message into packr.buffer
150
+ packr.buffer.set(rawMessage, it.offset);
151
+
152
+ return Buffer.from(packr.buffer.subarray(0, it.offset + rawMessage.byteLength));
153
+
154
+ } else {
155
+ return Buffer.from(packr.buffer.subarray(0, it.offset));
156
+ }
157
+ },
158
+
159
+ };
160
+