@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
package/src/Debug.ts ADDED
@@ -0,0 +1,37 @@
1
+ import debug from 'debug';
2
+ import { logger } from './Logger.ts';
3
+ import { ServerError } from './errors/ServerError.ts';
4
+
5
+ export const debugConnection = debug('colyseus:connection');
6
+ debugConnection.log = console.debug.bind(console); // STDOUT
7
+
8
+ export const debugDriver = debug('colyseus:driver');
9
+ debugDriver.log = console.debug.bind(console); // STDOUT
10
+
11
+ export const debugMatchMaking = debug('colyseus:matchmaking');
12
+ debugMatchMaking.log = console.debug.bind(console); // STDOUT
13
+
14
+ export const debugMessage = debug('colyseus:message');
15
+ debugMessage.log = console.debug.bind(console); // STDOUT
16
+
17
+ export const debugPatch = debug('colyseus:patch');
18
+ debugPatch.log = console.debug.bind(console); // STDOUT
19
+
20
+ export const debugPresence = debug('colyseus:presence');
21
+ debugPresence.log = console.debug.bind(console); // STDOUT
22
+
23
+ export const debugError = debug('colyseus:errors');
24
+ debugError.log = console.error.bind(console); // STDERR
25
+
26
+ export const debugDevMode = debug('colyseus:devmode');
27
+ debugDevMode.log = console.debug.bind(console); // STDOUT
28
+
29
+ export const debugAndPrintError = (e: Error | string) => {
30
+ const message = (e instanceof Error) ? e.stack : e;
31
+
32
+ if (!(e instanceof ServerError)) {
33
+ logger.error(message);
34
+ }
35
+
36
+ debugError.call(debugError, message);
37
+ };
package/src/IPC.ts ADDED
@@ -0,0 +1,124 @@
1
+ import { debugAndPrintError } from './Debug.ts';
2
+ import { type Presence } from './presence/Presence.ts';
3
+ import { IpcProtocol } from './Protocol.ts';
4
+ import { generateId, REMOTE_ROOM_SHORT_TIMEOUT } from './utils/Utils.ts';
5
+
6
+ export async function requestFromIPC<T>(
7
+ presence: Presence,
8
+ publishToChannel: string,
9
+ method: string | undefined,
10
+ args: any[],
11
+ rejectionTimeout: number = REMOTE_ROOM_SHORT_TIMEOUT,
12
+ ): Promise<T> {
13
+ return new Promise<T>(async (resolve, reject) => {
14
+ let unsubscribeTimeout: NodeJS.Timeout;
15
+
16
+ const requestId = generateId();
17
+ const channel = `ipc:${requestId}`;
18
+
19
+ const unsubscribe = () => {
20
+ presence.unsubscribe(channel);
21
+ clearTimeout(unsubscribeTimeout);
22
+ };
23
+
24
+ await presence.subscribe(channel, (message: [IpcProtocol, any]) => {
25
+ const [code, data] = message;
26
+ if (code === IpcProtocol.SUCCESS) {
27
+ resolve(data);
28
+
29
+ } else if (code === IpcProtocol.ERROR) {
30
+ let error: any = data;
31
+
32
+ // parse error message + code
33
+ try { error = JSON.parse(data) } catch (e) {}
34
+
35
+ // turn string message into Error instance
36
+ if (typeof(error) === "string") {
37
+ error = new Error(error);
38
+ }
39
+
40
+ reject(error);
41
+ }
42
+ unsubscribe();
43
+ });
44
+
45
+ presence.publish(publishToChannel, [method, requestId, args]);
46
+
47
+ unsubscribeTimeout = setTimeout(() => {
48
+ unsubscribe();
49
+ reject(new Error("ipc_timeout"));
50
+ }, rejectionTimeout);
51
+ });
52
+ }
53
+
54
+ export async function subscribeIPC(
55
+ presence: Presence,
56
+ channel: string,
57
+ replyCallback: (method: string, args: any[]) => any,
58
+ ) {
59
+ await presence.subscribe(channel, (message) => {
60
+ const [method, requestId, args] = message;
61
+
62
+ const reply = (code, data) => {
63
+ presence.publish(`ipc:${requestId}`, [code, data]);
64
+ };
65
+
66
+ // reply with method result
67
+ let response: any;
68
+ try {
69
+ response = replyCallback(method, args);
70
+
71
+ } catch (e: any) {
72
+ debugAndPrintError(e);
73
+ const error = (typeof(e.code) !== "undefined")
74
+ ? { code: e.code, message: e.message }
75
+ : e.message;
76
+ return reply(IpcProtocol.ERROR, JSON.stringify(error));
77
+ }
78
+
79
+ if (!(response instanceof Promise)) {
80
+ return reply(IpcProtocol.SUCCESS, response);
81
+ }
82
+
83
+ response.
84
+ then((result) => reply(IpcProtocol.SUCCESS, result)).
85
+ catch((e) => {
86
+ // user might have called `reject()` without arguments.
87
+ const err = e && e.message || e;
88
+ reply(IpcProtocol.ERROR, err);
89
+ });
90
+ });
91
+ }
92
+
93
+ /**
94
+ * Wait for a room creation notification via presence publish/subscribe
95
+ */
96
+ export function subscribeWithTimeout(
97
+ presence: Presence,
98
+ channel: string,
99
+ timeout: number,
100
+ ): Promise<string> {
101
+ return new Promise((resolve, reject) => {
102
+ let timeoutHandle: NodeJS.Timeout;
103
+ let resolved = false;
104
+
105
+ const unsubscribe = () => {
106
+ presence.unsubscribe(channel);
107
+ clearTimeout(timeoutHandle);
108
+ };
109
+
110
+ presence.subscribe(channel, (roomId: string) => {
111
+ if (resolved) return;
112
+ resolved = true;
113
+ unsubscribe();
114
+ resolve(roomId);
115
+ });
116
+
117
+ timeoutHandle = setTimeout(() => {
118
+ if (resolved) return;
119
+ resolved = true;
120
+ unsubscribe();
121
+ reject(new Error("timeout"));
122
+ }, timeout);
123
+ });
124
+ }
package/src/Logger.ts ADDED
@@ -0,0 +1,30 @@
1
+ //
2
+ // Abstract logging adaptor
3
+ //
4
+ export class Logger {
5
+ debug(...args) {
6
+ logger.debug(...args);
7
+ }
8
+
9
+ error(...args) {
10
+ logger.error(...args);
11
+ }
12
+
13
+ info(...args) {
14
+ logger.info(...args);
15
+ }
16
+
17
+ trace(...args) {
18
+ logger.trace(...args);
19
+ }
20
+
21
+ warn(...args) {
22
+ logger.warn(...args);
23
+ }
24
+ }
25
+
26
+ export let logger: Logger = console;
27
+
28
+ export function setLogger(instance: Logger) {
29
+ logger = instance;
30
+ }