@colyseus/core 0.16.0-preview.3 → 0.16.0-preview.31

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 (141) hide show
  1. package/build/Debug.js +6 -2
  2. package/build/Debug.js.map +2 -2
  3. package/build/Debug.mjs +11 -10
  4. package/build/Debug.mjs.map +2 -2
  5. package/build/IPC.d.ts +1 -1
  6. package/build/IPC.js +3 -3
  7. package/build/IPC.js.map +2 -2
  8. package/build/IPC.mjs +4 -3
  9. package/build/IPC.mjs.map +2 -2
  10. package/build/Logger.mjs +4 -3
  11. package/build/Logger.mjs.map +1 -1
  12. package/build/MatchMaker.d.ts +30 -22
  13. package/build/MatchMaker.js +110 -87
  14. package/build/MatchMaker.js.map +2 -2
  15. package/build/MatchMaker.mjs +114 -94
  16. package/build/MatchMaker.mjs.map +2 -2
  17. package/build/Protocol.d.ts +3 -4
  18. package/build/Protocol.js +28 -19
  19. package/build/Protocol.js.map +2 -2
  20. package/build/Protocol.mjs +31 -21
  21. package/build/Protocol.mjs.map +2 -2
  22. package/build/Room.d.ts +36 -35
  23. package/build/Room.js +270 -109
  24. package/build/Room.js.map +2 -2
  25. package/build/Room.mjs +274 -116
  26. package/build/Room.mjs.map +2 -2
  27. package/build/Server.d.ts +6 -7
  28. package/build/Server.js +40 -12
  29. package/build/Server.js.map +2 -2
  30. package/build/Server.mjs +40 -15
  31. package/build/Server.mjs.map +3 -3
  32. package/build/Stats.js +1 -1
  33. package/build/Stats.js.map +2 -2
  34. package/build/Stats.mjs +6 -5
  35. package/build/Stats.mjs.map +2 -2
  36. package/build/Transport.d.ts +24 -11
  37. package/build/Transport.js +1 -1
  38. package/build/Transport.js.map +2 -2
  39. package/build/Transport.mjs +6 -5
  40. package/build/Transport.mjs.map +2 -2
  41. package/build/discovery/index.d.ts +1 -1
  42. package/build/discovery/index.js.map +2 -2
  43. package/build/discovery/index.mjs +3 -2
  44. package/build/discovery/index.mjs.map +2 -2
  45. package/build/errors/SeatReservationError.mjs +3 -2
  46. package/build/errors/SeatReservationError.mjs.map +1 -1
  47. package/build/errors/ServerError.js +1 -1
  48. package/build/errors/ServerError.js.map +1 -1
  49. package/build/errors/ServerError.mjs +5 -4
  50. package/build/errors/ServerError.mjs.map +2 -2
  51. package/build/index.d.ts +20 -19
  52. package/build/index.js +28 -20
  53. package/build/index.js.map +2 -2
  54. package/build/index.mjs +21 -19
  55. package/build/index.mjs.map +2 -2
  56. package/build/matchmaker/Lobby.d.ts +3 -3
  57. package/build/matchmaker/Lobby.js +6 -3
  58. package/build/matchmaker/Lobby.js.map +2 -2
  59. package/build/matchmaker/Lobby.mjs +4 -4
  60. package/build/matchmaker/Lobby.mjs.map +2 -2
  61. package/build/matchmaker/RegisteredHandler.d.ts +6 -7
  62. package/build/matchmaker/RegisteredHandler.js +7 -10
  63. package/build/matchmaker/RegisteredHandler.js.map +2 -2
  64. package/build/matchmaker/RegisteredHandler.mjs +11 -13
  65. package/build/matchmaker/RegisteredHandler.mjs.map +2 -2
  66. package/build/matchmaker/controller.d.ts +3 -4
  67. package/build/matchmaker/controller.js +22 -5
  68. package/build/matchmaker/controller.js.map +2 -2
  69. package/build/matchmaker/controller.mjs +19 -3
  70. package/build/matchmaker/controller.mjs.map +2 -2
  71. package/build/matchmaker/driver/RoomData.d.ts +3 -3
  72. package/build/matchmaker/driver/RoomData.js +3 -3
  73. package/build/matchmaker/driver/RoomData.js.map +2 -2
  74. package/build/matchmaker/driver/RoomData.mjs +2 -2
  75. package/build/matchmaker/driver/RoomData.mjs.map +2 -2
  76. package/build/matchmaker/driver/api.d.ts +104 -0
  77. package/build/matchmaker/driver/api.js +29 -0
  78. package/build/matchmaker/driver/api.js.map +7 -0
  79. package/build/matchmaker/driver/api.mjs +7 -0
  80. package/build/matchmaker/driver/api.mjs.map +7 -0
  81. package/build/matchmaker/driver/index.d.ts +7 -7
  82. package/build/matchmaker/driver/index.js +1 -1
  83. package/build/matchmaker/driver/index.js.map +2 -2
  84. package/build/matchmaker/driver/index.mjs +2 -2
  85. package/build/matchmaker/driver/index.mjs.map +2 -2
  86. package/build/matchmaker/driver/interfaces.d.ts +7 -11
  87. package/build/matchmaker/driver/interfaces.js.map +1 -1
  88. package/build/matchmaker/driver/local/LocalDriver.d.ts +13 -0
  89. package/build/matchmaker/driver/local/LocalDriver.js +65 -0
  90. package/build/matchmaker/driver/local/LocalDriver.js.map +7 -0
  91. package/build/matchmaker/driver/local/LocalDriver.mjs +43 -0
  92. package/build/matchmaker/driver/local/LocalDriver.mjs.map +7 -0
  93. package/build/matchmaker/driver/local/Query.d.ts +9 -0
  94. package/build/matchmaker/driver/local/Query.js +78 -0
  95. package/build/matchmaker/driver/local/Query.js.map +7 -0
  96. package/build/matchmaker/driver/local/Query.mjs +56 -0
  97. package/build/matchmaker/driver/local/Query.mjs.map +7 -0
  98. package/build/matchmaker/driver/local/RoomData.d.ts +19 -0
  99. package/build/matchmaker/driver/local/RoomData.js +79 -0
  100. package/build/matchmaker/driver/local/RoomData.js.map +7 -0
  101. package/build/matchmaker/driver/local/RoomData.mjs +57 -0
  102. package/build/matchmaker/driver/local/RoomData.mjs.map +7 -0
  103. package/build/presence/LocalPresence.d.ts +10 -3
  104. package/build/presence/LocalPresence.js +83 -5
  105. package/build/presence/LocalPresence.js.map +3 -3
  106. package/build/presence/LocalPresence.mjs +83 -8
  107. package/build/presence/LocalPresence.mjs.map +3 -3
  108. package/build/presence/Presence.d.ts +38 -2
  109. package/build/presence/Presence.js.map +1 -1
  110. package/build/rooms/LobbyRoom.d.ts +6 -6
  111. package/build/rooms/LobbyRoom.js +8 -3
  112. package/build/rooms/LobbyRoom.js.map +2 -2
  113. package/build/rooms/LobbyRoom.mjs +7 -5
  114. package/build/rooms/LobbyRoom.mjs.map +2 -2
  115. package/build/rooms/RelayRoom.d.ts +2 -2
  116. package/build/rooms/RelayRoom.js +3 -1
  117. package/build/rooms/RelayRoom.js.map +2 -2
  118. package/build/rooms/RelayRoom.mjs +10 -7
  119. package/build/rooms/RelayRoom.mjs.map +2 -2
  120. package/build/serializer/NoneSerializer.d.ts +2 -2
  121. package/build/serializer/NoneSerializer.js.map +1 -1
  122. package/build/serializer/NoneSerializer.mjs +3 -2
  123. package/build/serializer/NoneSerializer.mjs.map +2 -2
  124. package/build/serializer/SchemaSerializer.d.ts +13 -11
  125. package/build/serializer/SchemaSerializer.js +13 -10
  126. package/build/serializer/SchemaSerializer.js.map +2 -2
  127. package/build/serializer/SchemaSerializer.mjs +17 -13
  128. package/build/serializer/SchemaSerializer.mjs.map +2 -2
  129. package/build/serializer/Serializer.d.ts +1 -2
  130. package/build/serializer/Serializer.js.map +1 -1
  131. package/build/utils/DevMode.d.ts +2 -2
  132. package/build/utils/DevMode.js +8 -4
  133. package/build/utils/DevMode.js.map +2 -2
  134. package/build/utils/DevMode.mjs +7 -6
  135. package/build/utils/DevMode.mjs.map +2 -2
  136. package/build/utils/Utils.d.ts +4 -2
  137. package/build/utils/Utils.js +16 -15
  138. package/build/utils/Utils.js.map +2 -2
  139. package/build/utils/Utils.mjs +18 -21
  140. package/build/utils/Utils.mjs.map +2 -2
  141. package/package.json +9 -3
package/build/Protocol.js CHANGED
@@ -23,7 +23,7 @@ __export(Protocol_exports, {
23
23
  getMessageBytes: () => getMessageBytes
24
24
  });
25
25
  module.exports = __toCommonJS(Protocol_exports);
26
- var import_msgpackr = require("msgpackr");
26
+ var import_msgpackr = require("@colyseus/msgpackr");
27
27
  var import_schema = require("@colyseus/schema");
28
28
  var Protocol = /* @__PURE__ */ ((Protocol2) => {
29
29
  Protocol2[Protocol2["JOIN_ROOM"] = 10] = "JOIN_ROOM";
@@ -59,43 +59,52 @@ var IpcProtocol = /* @__PURE__ */ ((IpcProtocol2) => {
59
59
  IpcProtocol2[IpcProtocol2["TIMEOUT"] = 2] = "TIMEOUT";
60
60
  return IpcProtocol2;
61
61
  })(IpcProtocol || {});
62
- const sendBuffer = Buffer.allocUnsafe(8192);
63
62
  const packr = new import_msgpackr.Packr();
64
- packr.useBuffer(sendBuffer);
63
+ packr.encode(void 0);
65
64
  const getMessageBytes = {
66
65
  [10 /* JOIN_ROOM */]: (reconnectionToken, serializerId, handshake) => {
67
66
  const it = { offset: 1 };
68
- sendBuffer[0] = 10 /* JOIN_ROOM */;
69
- sendBuffer[it.offset++] = Buffer.byteLength(reconnectionToken, "utf8");
70
- import_schema.encode.utf8Write(sendBuffer, reconnectionToken, it);
71
- sendBuffer[it.offset++] = Buffer.byteLength(serializerId, "utf8");
72
- import_schema.encode.utf8Write(sendBuffer, serializerId, it);
73
- return Buffer.concat([sendBuffer.subarray(0, it.offset), handshake]);
67
+ packr.buffer[0] = 10 /* JOIN_ROOM */;
68
+ packr.buffer[it.offset++] = Buffer.byteLength(reconnectionToken, "utf8");
69
+ import_schema.encode.utf8Write(packr.buffer, reconnectionToken, it);
70
+ packr.buffer[it.offset++] = Buffer.byteLength(serializerId, "utf8");
71
+ import_schema.encode.utf8Write(packr.buffer, serializerId, it);
72
+ let handshakeLength = handshake?.byteLength || 0;
73
+ if (handshakeLength > 0) {
74
+ handshake.copy(packr.buffer, it.offset, 0, handshakeLength);
75
+ }
76
+ return packr.buffer.subarray(0, it.offset + handshakeLength);
74
77
  },
75
78
  [11 /* ERROR */]: (code, message = "") => {
76
79
  const it = { offset: 1 };
77
- sendBuffer[0] = 11 /* ERROR */;
78
- import_schema.encode.number(sendBuffer, code, it);
79
- import_schema.encode.string(sendBuffer, message, it);
80
- return sendBuffer.subarray(0, it.offset);
80
+ packr.buffer[0] = 11 /* ERROR */;
81
+ import_schema.encode.number(packr.buffer, code, it);
82
+ import_schema.encode.string(packr.buffer, message, it);
83
+ return packr.buffer.subarray(0, it.offset);
81
84
  },
82
85
  [14 /* ROOM_STATE */]: (bytes) => {
83
86
  return [14 /* ROOM_STATE */, ...bytes];
84
87
  },
85
88
  raw: (code, type, message, rawMessage) => {
86
89
  const it = { offset: 1 };
87
- sendBuffer[0] = code;
90
+ packr.buffer[0] = code;
88
91
  if (typeof type === "string") {
89
- import_schema.encode.string(sendBuffer, type, it);
92
+ import_schema.encode.string(packr.buffer, type, it);
90
93
  } else {
91
- import_schema.encode.number(sendBuffer, type, it);
94
+ import_schema.encode.number(packr.buffer, type, it);
92
95
  }
93
96
  if (message !== void 0) {
94
- return (0, import_msgpackr.pack)(message, 2048 + it.offset);
97
+ packr.position = 0;
98
+ if (process.env.NODE_ENV !== "production") {
99
+ packr.useBuffer(packr.buffer);
100
+ }
101
+ const endOfBufferOffset = packr.pack(message, 2048 + it.offset).byteLength;
102
+ return packr.buffer.subarray(0, endOfBufferOffset);
95
103
  } else if (rawMessage !== void 0) {
96
- return Buffer.concat([sendBuffer.subarray(0, it.offset), rawMessage]);
104
+ packr.buffer.set(rawMessage, it.offset);
105
+ return packr.buffer.subarray(0, it.offset + rawMessage.byteLength);
97
106
  } else {
98
- return sendBuffer.subarray(0, it.offset);
107
+ return packr.buffer.subarray(0, it.offset);
99
108
  }
100
109
  }
101
110
  };
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/Protocol.ts"],
4
- "sourcesContent": ["import { pack, Packr } from 'msgpackr';\nimport { encode, Iterator } from '@colyseus/schema';\n\n// Colyseus protocol codes range between 0~100\nexport enum Protocol {\n // Room-related (10~19)\n JOIN_ROOM = 10,\n ERROR = 11,\n LEAVE_ROOM = 12,\n ROOM_DATA = 13,\n ROOM_STATE = 14,\n ROOM_STATE_PATCH = 15,\n // ROOM_DATA_SCHEMA = 16, // DEPRECATED: used to send schema instances via room.send()\n ROOM_DATA_BYTES = 17,\n\n // WebSocket close codes (https://github.com/Luka967/websocket-close-codes)\n WS_CLOSE_NORMAL = 1000,\n WS_CLOSE_GOING_AWAY = 1001,\n\n // WebSocket error codes\n WS_CLOSE_CONSENTED = 4000,\n WS_CLOSE_WITH_ERROR = 4002,\n WS_CLOSE_DEVMODE_RESTART = 4010,\n\n WS_SERVER_DISCONNECT = 4201,\n WS_TOO_MANY_CLIENTS = 4202,\n}\n\nexport enum ErrorCode {\n // MatchMaking Error Codes\n MATCHMAKE_NO_HANDLER = 4210,\n MATCHMAKE_INVALID_CRITERIA = 4211,\n MATCHMAKE_INVALID_ROOM_ID = 4212,\n MATCHMAKE_UNHANDLED = 4213, // generic exception during onCreate/onJoin\n MATCHMAKE_EXPIRED = 4214, // generic exception during onCreate/onJoin\n\n AUTH_FAILED = 4215,\n APPLICATION_ERROR = 4216,\n\n INVALID_PAYLOAD = 4217,\n}\n\n// Inter-process communication protocol\nexport enum IpcProtocol {\n SUCCESS = 0,\n ERROR = 1,\n TIMEOUT = 2,\n}\n\nconst sendBuffer = Buffer.allocUnsafe(8192);\nconst packr = new Packr();\n// @ts-ignore\npackr.useBuffer(sendBuffer);\n\nexport const getMessageBytes = {\n [Protocol.JOIN_ROOM]: (reconnectionToken: string, serializerId: string, handshake?: Buffer) => {\n const it: Iterator = { offset: 1 };\n sendBuffer[0] = Protocol.JOIN_ROOM;\n\n sendBuffer[it.offset++] = Buffer.byteLength(reconnectionToken, \"utf8\");\n encode.utf8Write(sendBuffer, reconnectionToken, it);\n\n sendBuffer[it.offset++] = Buffer.byteLength(serializerId, \"utf8\");\n encode.utf8Write(sendBuffer, serializerId, it);\n\n return Buffer.concat([sendBuffer.subarray(0, it.offset), handshake]);\n },\n\n [Protocol.ERROR]: (code: number, message: string = '') => {\n const it: Iterator = { offset: 1 };\n sendBuffer[0] = Protocol.ERROR;\n\n encode.number(sendBuffer, code, it);\n encode.string(sendBuffer, message, it);\n\n return sendBuffer.subarray(0, it.offset);\n },\n\n [Protocol.ROOM_STATE]: (bytes: number[]) => {\n return [Protocol.ROOM_STATE, ...bytes];\n },\n\n raw: (code: Protocol, type: string | number, message?: any, rawMessage?: Uint8Array | Buffer) => {\n const it: Iterator = { offset: 1 };\n sendBuffer[0] = code;\n\n if (typeof (type) === 'string') {\n encode.string(sendBuffer, type as string, it);\n\n } else {\n encode.number(sendBuffer, type, it);\n }\n\n if (message !== undefined) {\n // @ts-ignore\n return pack(message, 2048 + it.offset); // PR to fix TypeScript types https://github.com/kriszyp/msgpackr/pull/137\n // 2048 = RESERVE_START_SPACE\n\n } else if (rawMessage !== undefined) {\n return Buffer.concat([sendBuffer.subarray(0, it.offset), rawMessage]);\n\n } else {\n return sendBuffer.subarray(0, it.offset);\n }\n },\n\n};\n\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { pack, Packr } from '@colyseus/msgpackr';\nimport { encode, Iterator } from '@colyseus/schema';\n\n// Colyseus protocol codes range between 0~100\nexport enum Protocol {\n // Room-related (10~19)\n JOIN_ROOM = 10,\n ERROR = 11,\n LEAVE_ROOM = 12,\n ROOM_DATA = 13,\n ROOM_STATE = 14,\n ROOM_STATE_PATCH = 15,\n // ROOM_DATA_SCHEMA = 16, // DEPRECATED: used to send schema instances via room.send()\n ROOM_DATA_BYTES = 17,\n\n // WebSocket close codes (https://github.com/Luka967/websocket-close-codes)\n WS_CLOSE_NORMAL = 1000,\n WS_CLOSE_GOING_AWAY = 1001,\n\n // WebSocket error codes\n WS_CLOSE_CONSENTED = 4000,\n WS_CLOSE_WITH_ERROR = 4002,\n WS_CLOSE_DEVMODE_RESTART = 4010,\n\n WS_SERVER_DISCONNECT = 4201,\n WS_TOO_MANY_CLIENTS = 4202,\n}\n\nexport enum ErrorCode {\n // MatchMaking Error Codes\n MATCHMAKE_NO_HANDLER = 4210,\n MATCHMAKE_INVALID_CRITERIA = 4211,\n MATCHMAKE_INVALID_ROOM_ID = 4212,\n MATCHMAKE_UNHANDLED = 4213, // generic exception during onCreate/onJoin\n MATCHMAKE_EXPIRED = 4214, // generic exception during onCreate/onJoin\n\n AUTH_FAILED = 4215,\n APPLICATION_ERROR = 4216,\n\n INVALID_PAYLOAD = 4217,\n}\n\n// Inter-process communication protocol\nexport enum IpcProtocol {\n SUCCESS = 0,\n ERROR = 1,\n TIMEOUT = 2,\n}\n\n\nconst packr = new Packr();\n\n// msgpackr workaround: initialize buffer\npackr.encode(undefined);\n\nexport const getMessageBytes = {\n [Protocol.JOIN_ROOM]: (reconnectionToken: string, serializerId: string, handshake?: Buffer) => {\n const it: Iterator = { offset: 1 };\n packr.buffer[0] = Protocol.JOIN_ROOM;\n\n packr.buffer[it.offset++] = Buffer.byteLength(reconnectionToken, \"utf8\");\n encode.utf8Write(packr.buffer, reconnectionToken, it);\n\n packr.buffer[it.offset++] = Buffer.byteLength(serializerId, \"utf8\");\n encode.utf8Write(packr.buffer, serializerId, it);\n\n let handshakeLength = handshake?.byteLength || 0;\n if (handshakeLength > 0) {\n handshake.copy(packr.buffer, it.offset, 0, handshakeLength);\n }\n\n return packr.buffer.subarray(0, it.offset + handshakeLength);\n },\n\n [Protocol.ERROR]: (code: number, message: string = '') => {\n const it: Iterator = { offset: 1 };\n packr.buffer[0] = Protocol.ERROR;\n\n encode.number(packr.buffer, code, it);\n encode.string(packr.buffer, message, it);\n\n return packr.buffer.subarray(0, it.offset);\n },\n\n [Protocol.ROOM_STATE]: (bytes: number[]) => {\n return [Protocol.ROOM_STATE, ...bytes];\n },\n\n raw: (code: Protocol, type: string | number, message?: any, rawMessage?: Uint8Array | Buffer) => {\n const it: Iterator = { offset: 1 };\n packr.buffer[0] = code;\n\n if (typeof (type) === 'string') {\n encode.string(packr.buffer, type as string, it);\n\n } else {\n encode.number(packr.buffer, type, it);\n }\n\n if (message !== undefined) {\n // force to encode from offset\n packr.position = 0;\n\n //\n // TODO: remove this after issue is fixed https://github.com/kriszyp/msgpackr/issues/139\n //\n // - This check is only required when running integration tests.\n // (colyseus.js' usage of msgpackr/buffer is conflicting)\n //\n if (process.env.NODE_ENV !== \"production\") {\n packr.useBuffer(packr.buffer);\n }\n\n // pack message into the same packr.buffer\n const endOfBufferOffset = packr.pack(message, 2048 + it.offset).byteLength;\n // 2048 = RESERVE_START_SPACE\n return packr.buffer.subarray(0, endOfBufferOffset);\n\n } else if (rawMessage !== undefined) {\n\n // copy raw message into packr.buffer\n packr.buffer.set(rawMessage, it.offset);\n return packr.buffer.subarray(0, it.offset + rawMessage.byteLength);\n\n } else {\n return packr.buffer.subarray(0, it.offset);\n }\n },\n\n};\n\n"],
5
+ "mappings": "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",
6
6
  "names": ["Protocol", "ErrorCode", "IpcProtocol"]
7
7
  }
@@ -1,4 +1,5 @@
1
- import { pack, Packr } from "msgpackr";
1
+ // packages/core/src/Protocol.ts
2
+ import { Packr } from "@colyseus/msgpackr";
2
3
  import { encode } from "@colyseus/schema";
3
4
  var Protocol = /* @__PURE__ */ ((Protocol2) => {
4
5
  Protocol2[Protocol2["JOIN_ROOM"] = 10] = "JOIN_ROOM";
@@ -34,43 +35,52 @@ var IpcProtocol = /* @__PURE__ */ ((IpcProtocol2) => {
34
35
  IpcProtocol2[IpcProtocol2["TIMEOUT"] = 2] = "TIMEOUT";
35
36
  return IpcProtocol2;
36
37
  })(IpcProtocol || {});
37
- const sendBuffer = Buffer.allocUnsafe(8192);
38
- const packr = new Packr();
39
- packr.useBuffer(sendBuffer);
40
- const getMessageBytes = {
38
+ var packr = new Packr();
39
+ packr.encode(void 0);
40
+ var getMessageBytes = {
41
41
  [10 /* JOIN_ROOM */]: (reconnectionToken, serializerId, handshake) => {
42
42
  const it = { offset: 1 };
43
- sendBuffer[0] = 10 /* JOIN_ROOM */;
44
- sendBuffer[it.offset++] = Buffer.byteLength(reconnectionToken, "utf8");
45
- encode.utf8Write(sendBuffer, reconnectionToken, it);
46
- sendBuffer[it.offset++] = Buffer.byteLength(serializerId, "utf8");
47
- encode.utf8Write(sendBuffer, serializerId, it);
48
- return Buffer.concat([sendBuffer.subarray(0, it.offset), handshake]);
43
+ packr.buffer[0] = 10 /* JOIN_ROOM */;
44
+ packr.buffer[it.offset++] = Buffer.byteLength(reconnectionToken, "utf8");
45
+ encode.utf8Write(packr.buffer, reconnectionToken, it);
46
+ packr.buffer[it.offset++] = Buffer.byteLength(serializerId, "utf8");
47
+ encode.utf8Write(packr.buffer, serializerId, it);
48
+ let handshakeLength = handshake?.byteLength || 0;
49
+ if (handshakeLength > 0) {
50
+ handshake.copy(packr.buffer, it.offset, 0, handshakeLength);
51
+ }
52
+ return packr.buffer.subarray(0, it.offset + handshakeLength);
49
53
  },
50
54
  [11 /* ERROR */]: (code, message = "") => {
51
55
  const it = { offset: 1 };
52
- sendBuffer[0] = 11 /* ERROR */;
53
- encode.number(sendBuffer, code, it);
54
- encode.string(sendBuffer, message, it);
55
- return sendBuffer.subarray(0, it.offset);
56
+ packr.buffer[0] = 11 /* ERROR */;
57
+ encode.number(packr.buffer, code, it);
58
+ encode.string(packr.buffer, message, it);
59
+ return packr.buffer.subarray(0, it.offset);
56
60
  },
57
61
  [14 /* ROOM_STATE */]: (bytes) => {
58
62
  return [14 /* ROOM_STATE */, ...bytes];
59
63
  },
60
64
  raw: (code, type, message, rawMessage) => {
61
65
  const it = { offset: 1 };
62
- sendBuffer[0] = code;
66
+ packr.buffer[0] = code;
63
67
  if (typeof type === "string") {
64
- encode.string(sendBuffer, type, it);
68
+ encode.string(packr.buffer, type, it);
65
69
  } else {
66
- encode.number(sendBuffer, type, it);
70
+ encode.number(packr.buffer, type, it);
67
71
  }
68
72
  if (message !== void 0) {
69
- return pack(message, 2048 + it.offset);
73
+ packr.position = 0;
74
+ if (process.env.NODE_ENV !== "production") {
75
+ packr.useBuffer(packr.buffer);
76
+ }
77
+ const endOfBufferOffset = packr.pack(message, 2048 + it.offset).byteLength;
78
+ return packr.buffer.subarray(0, endOfBufferOffset);
70
79
  } else if (rawMessage !== void 0) {
71
- return Buffer.concat([sendBuffer.subarray(0, it.offset), rawMessage]);
80
+ packr.buffer.set(rawMessage, it.offset);
81
+ return packr.buffer.subarray(0, it.offset + rawMessage.byteLength);
72
82
  } else {
73
- return sendBuffer.subarray(0, it.offset);
83
+ return packr.buffer.subarray(0, it.offset);
74
84
  }
75
85
  }
76
86
  };
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/Protocol.ts"],
4
- "sourcesContent": ["import { pack, Packr } from 'msgpackr';\nimport { encode, Iterator } from '@colyseus/schema';\n\n// Colyseus protocol codes range between 0~100\nexport enum Protocol {\n // Room-related (10~19)\n JOIN_ROOM = 10,\n ERROR = 11,\n LEAVE_ROOM = 12,\n ROOM_DATA = 13,\n ROOM_STATE = 14,\n ROOM_STATE_PATCH = 15,\n // ROOM_DATA_SCHEMA = 16, // DEPRECATED: used to send schema instances via room.send()\n ROOM_DATA_BYTES = 17,\n\n // WebSocket close codes (https://github.com/Luka967/websocket-close-codes)\n WS_CLOSE_NORMAL = 1000,\n WS_CLOSE_GOING_AWAY = 1001,\n\n // WebSocket error codes\n WS_CLOSE_CONSENTED = 4000,\n WS_CLOSE_WITH_ERROR = 4002,\n WS_CLOSE_DEVMODE_RESTART = 4010,\n\n WS_SERVER_DISCONNECT = 4201,\n WS_TOO_MANY_CLIENTS = 4202,\n}\n\nexport enum ErrorCode {\n // MatchMaking Error Codes\n MATCHMAKE_NO_HANDLER = 4210,\n MATCHMAKE_INVALID_CRITERIA = 4211,\n MATCHMAKE_INVALID_ROOM_ID = 4212,\n MATCHMAKE_UNHANDLED = 4213, // generic exception during onCreate/onJoin\n MATCHMAKE_EXPIRED = 4214, // generic exception during onCreate/onJoin\n\n AUTH_FAILED = 4215,\n APPLICATION_ERROR = 4216,\n\n INVALID_PAYLOAD = 4217,\n}\n\n// Inter-process communication protocol\nexport enum IpcProtocol {\n SUCCESS = 0,\n ERROR = 1,\n TIMEOUT = 2,\n}\n\nconst sendBuffer = Buffer.allocUnsafe(8192);\nconst packr = new Packr();\n// @ts-ignore\npackr.useBuffer(sendBuffer);\n\nexport const getMessageBytes = {\n [Protocol.JOIN_ROOM]: (reconnectionToken: string, serializerId: string, handshake?: Buffer) => {\n const it: Iterator = { offset: 1 };\n sendBuffer[0] = Protocol.JOIN_ROOM;\n\n sendBuffer[it.offset++] = Buffer.byteLength(reconnectionToken, \"utf8\");\n encode.utf8Write(sendBuffer, reconnectionToken, it);\n\n sendBuffer[it.offset++] = Buffer.byteLength(serializerId, \"utf8\");\n encode.utf8Write(sendBuffer, serializerId, it);\n\n return Buffer.concat([sendBuffer.subarray(0, it.offset), handshake]);\n },\n\n [Protocol.ERROR]: (code: number, message: string = '') => {\n const it: Iterator = { offset: 1 };\n sendBuffer[0] = Protocol.ERROR;\n\n encode.number(sendBuffer, code, it);\n encode.string(sendBuffer, message, it);\n\n return sendBuffer.subarray(0, it.offset);\n },\n\n [Protocol.ROOM_STATE]: (bytes: number[]) => {\n return [Protocol.ROOM_STATE, ...bytes];\n },\n\n raw: (code: Protocol, type: string | number, message?: any, rawMessage?: Uint8Array | Buffer) => {\n const it: Iterator = { offset: 1 };\n sendBuffer[0] = code;\n\n if (typeof (type) === 'string') {\n encode.string(sendBuffer, type as string, it);\n\n } else {\n encode.number(sendBuffer, type, it);\n }\n\n if (message !== undefined) {\n // @ts-ignore\n return pack(message, 2048 + it.offset); // PR to fix TypeScript types https://github.com/kriszyp/msgpackr/pull/137\n // 2048 = RESERVE_START_SPACE\n\n } else if (rawMessage !== undefined) {\n return Buffer.concat([sendBuffer.subarray(0, it.offset), rawMessage]);\n\n } else {\n return sendBuffer.subarray(0, it.offset);\n }\n },\n\n};\n\n"],
5
- "mappings": "AAAA,SAAS,MAAM,aAAa;AAC5B,SAAS,cAAwB;AAG1B,IAAK,WAAL,kBAAKA,cAAL;AAEL,EAAAA,oBAAA,eAAY,MAAZ;AACA,EAAAA,oBAAA,WAAQ,MAAR;AACA,EAAAA,oBAAA,gBAAa,MAAb;AACA,EAAAA,oBAAA,eAAY,MAAZ;AACA,EAAAA,oBAAA,gBAAa,MAAb;AACA,EAAAA,oBAAA,sBAAmB,MAAnB;AAEA,EAAAA,oBAAA,qBAAkB,MAAlB;AAGA,EAAAA,oBAAA,qBAAkB,OAAlB;AACA,EAAAA,oBAAA,yBAAsB,QAAtB;AAGA,EAAAA,oBAAA,wBAAqB,OAArB;AACA,EAAAA,oBAAA,yBAAsB,QAAtB;AACA,EAAAA,oBAAA,8BAA2B,QAA3B;AAEA,EAAAA,oBAAA,0BAAuB,QAAvB;AACA,EAAAA,oBAAA,yBAAsB,QAAtB;AArBU,SAAAA;AAAA,GAAA;AAwBL,IAAK,YAAL,kBAAKC,eAAL;AAEL,EAAAA,sBAAA,0BAAuB,QAAvB;AACA,EAAAA,sBAAA,gCAA6B,QAA7B;AACA,EAAAA,sBAAA,+BAA4B,QAA5B;AACA,EAAAA,sBAAA,yBAAsB,QAAtB;AACA,EAAAA,sBAAA,uBAAoB,QAApB;AAEA,EAAAA,sBAAA,iBAAc,QAAd;AACA,EAAAA,sBAAA,uBAAoB,QAApB;AAEA,EAAAA,sBAAA,qBAAkB,QAAlB;AAXU,SAAAA;AAAA,GAAA;AAeL,IAAK,cAAL,kBAAKC,iBAAL;AACL,EAAAA,0BAAA,aAAU,KAAV;AACA,EAAAA,0BAAA,WAAQ,KAAR;AACA,EAAAA,0BAAA,aAAU,KAAV;AAHU,SAAAA;AAAA,GAAA;AAMZ,MAAM,aAAa,OAAO,YAAY,IAAI;AAC1C,MAAM,QAAQ,IAAI,MAAM;AAExB,MAAM,UAAU,UAAU;AAEnB,MAAM,kBAAkB;AAAA,EAC7B,CAAC,qBAAqB,CAAC,mBAA2B,cAAsB,cAAuB;AAC7F,UAAM,KAAe,EAAE,QAAQ,EAAE;AACjC,eAAW,KAAK;AAEhB,eAAW,GAAG,YAAY,OAAO,WAAW,mBAAmB,MAAM;AACrE,WAAO,UAAU,YAAY,mBAAmB,EAAE;AAElD,eAAW,GAAG,YAAY,OAAO,WAAW,cAAc,MAAM;AAChE,WAAO,UAAU,YAAY,cAAc,EAAE;AAE7C,WAAO,OAAO,OAAO,CAAC,WAAW,SAAS,GAAG,GAAG,MAAM,GAAG,SAAS,CAAC;AAAA,EACrE;AAAA,EAEA,CAAC,iBAAiB,CAAC,MAAc,UAAkB,OAAO;AACxD,UAAM,KAAe,EAAE,QAAQ,EAAE;AACjC,eAAW,KAAK;AAEhB,WAAO,OAAO,YAAY,MAAM,EAAE;AAClC,WAAO,OAAO,YAAY,SAAS,EAAE;AAErC,WAAO,WAAW,SAAS,GAAG,GAAG,MAAM;AAAA,EACzC;AAAA,EAEA,CAAC,sBAAsB,CAAC,UAAoB;AAC1C,WAAO,CAAC,qBAAqB,GAAG,KAAK;AAAA,EACvC;AAAA,EAEA,KAAK,CAAC,MAAgB,MAAuB,SAAe,eAAqC;AAC/F,UAAM,KAAe,EAAE,QAAQ,EAAE;AACjC,eAAW,KAAK;AAEhB,QAAI,OAAQ,SAAU,UAAU;AAC9B,aAAO,OAAO,YAAY,MAAgB,EAAE;AAAA,IAE9C,OAAO;AACL,aAAO,OAAO,YAAY,MAAM,EAAE;AAAA,IACpC;AAEA,QAAI,YAAY,QAAW;AAEzB,aAAO,KAAK,SAAS,OAAO,GAAG,MAAM;AAAA,IAGvC,WAAW,eAAe,QAAW;AACnC,aAAO,OAAO,OAAO,CAAC,WAAW,SAAS,GAAG,GAAG,MAAM,GAAG,UAAU,CAAC;AAAA,IAEtE,OAAO;AACL,aAAO,WAAW,SAAS,GAAG,GAAG,MAAM;AAAA,IACzC;AAAA,EACF;AAEF;",
4
+ "sourcesContent": ["import { pack, Packr } from '@colyseus/msgpackr';\nimport { encode, Iterator } from '@colyseus/schema';\n\n// Colyseus protocol codes range between 0~100\nexport enum Protocol {\n // Room-related (10~19)\n JOIN_ROOM = 10,\n ERROR = 11,\n LEAVE_ROOM = 12,\n ROOM_DATA = 13,\n ROOM_STATE = 14,\n ROOM_STATE_PATCH = 15,\n // ROOM_DATA_SCHEMA = 16, // DEPRECATED: used to send schema instances via room.send()\n ROOM_DATA_BYTES = 17,\n\n // WebSocket close codes (https://github.com/Luka967/websocket-close-codes)\n WS_CLOSE_NORMAL = 1000,\n WS_CLOSE_GOING_AWAY = 1001,\n\n // WebSocket error codes\n WS_CLOSE_CONSENTED = 4000,\n WS_CLOSE_WITH_ERROR = 4002,\n WS_CLOSE_DEVMODE_RESTART = 4010,\n\n WS_SERVER_DISCONNECT = 4201,\n WS_TOO_MANY_CLIENTS = 4202,\n}\n\nexport enum ErrorCode {\n // MatchMaking Error Codes\n MATCHMAKE_NO_HANDLER = 4210,\n MATCHMAKE_INVALID_CRITERIA = 4211,\n MATCHMAKE_INVALID_ROOM_ID = 4212,\n MATCHMAKE_UNHANDLED = 4213, // generic exception during onCreate/onJoin\n MATCHMAKE_EXPIRED = 4214, // generic exception during onCreate/onJoin\n\n AUTH_FAILED = 4215,\n APPLICATION_ERROR = 4216,\n\n INVALID_PAYLOAD = 4217,\n}\n\n// Inter-process communication protocol\nexport enum IpcProtocol {\n SUCCESS = 0,\n ERROR = 1,\n TIMEOUT = 2,\n}\n\n\nconst packr = new Packr();\n\n// msgpackr workaround: initialize buffer\npackr.encode(undefined);\n\nexport const getMessageBytes = {\n [Protocol.JOIN_ROOM]: (reconnectionToken: string, serializerId: string, handshake?: Buffer) => {\n const it: Iterator = { offset: 1 };\n packr.buffer[0] = Protocol.JOIN_ROOM;\n\n packr.buffer[it.offset++] = Buffer.byteLength(reconnectionToken, \"utf8\");\n encode.utf8Write(packr.buffer, reconnectionToken, it);\n\n packr.buffer[it.offset++] = Buffer.byteLength(serializerId, \"utf8\");\n encode.utf8Write(packr.buffer, serializerId, it);\n\n let handshakeLength = handshake?.byteLength || 0;\n if (handshakeLength > 0) {\n handshake.copy(packr.buffer, it.offset, 0, handshakeLength);\n }\n\n return packr.buffer.subarray(0, it.offset + handshakeLength);\n },\n\n [Protocol.ERROR]: (code: number, message: string = '') => {\n const it: Iterator = { offset: 1 };\n packr.buffer[0] = Protocol.ERROR;\n\n encode.number(packr.buffer, code, it);\n encode.string(packr.buffer, message, it);\n\n return packr.buffer.subarray(0, it.offset);\n },\n\n [Protocol.ROOM_STATE]: (bytes: number[]) => {\n return [Protocol.ROOM_STATE, ...bytes];\n },\n\n raw: (code: Protocol, type: string | number, message?: any, rawMessage?: Uint8Array | Buffer) => {\n const it: Iterator = { offset: 1 };\n packr.buffer[0] = code;\n\n if (typeof (type) === 'string') {\n encode.string(packr.buffer, type as string, it);\n\n } else {\n encode.number(packr.buffer, type, it);\n }\n\n if (message !== undefined) {\n // force to encode from offset\n packr.position = 0;\n\n //\n // TODO: remove this after issue is fixed https://github.com/kriszyp/msgpackr/issues/139\n //\n // - This check is only required when running integration tests.\n // (colyseus.js' usage of msgpackr/buffer is conflicting)\n //\n if (process.env.NODE_ENV !== \"production\") {\n packr.useBuffer(packr.buffer);\n }\n\n // pack message into the same packr.buffer\n const endOfBufferOffset = packr.pack(message, 2048 + it.offset).byteLength;\n // 2048 = RESERVE_START_SPACE\n return packr.buffer.subarray(0, endOfBufferOffset);\n\n } else if (rawMessage !== undefined) {\n\n // copy raw message into packr.buffer\n packr.buffer.set(rawMessage, it.offset);\n return packr.buffer.subarray(0, it.offset + rawMessage.byteLength);\n\n } else {\n return packr.buffer.subarray(0, it.offset);\n }\n },\n\n};\n\n"],
5
+ "mappings": "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",
6
6
  "names": ["Protocol", "ErrorCode", "IpcProtocol"]
7
7
  }
package/build/Room.d.ts CHANGED
@@ -1,15 +1,11 @@
1
- /// <reference types="node" />
2
- /// <reference types="node" />
3
- /// <reference types="node" />
4
1
  import http, { IncomingMessage } from 'http';
5
- import { Schema } from '@colyseus/schema';
6
- import Clock from '@gamestdio/timer';
2
+ import Clock from '@colyseus/timer';
7
3
  import { EventEmitter } from 'events';
8
- import { Presence } from './presence/Presence';
9
- import { Serializer } from './serializer/Serializer';
10
- import { Deferred } from './utils/Utils';
11
- import { RoomListingData } from './matchmaker/driver';
12
- import { Client, ClientArray, ISendOptions } from './Transport';
4
+ import { Presence } from './presence/Presence.js';
5
+ import { Serializer } from './serializer/Serializer.js';
6
+ import { Deferred } from './utils/Utils.js';
7
+ import { RoomCache } from './matchmaker/driver/local/LocalDriver.js';
8
+ import { Client, ClientArray, ClientPrivate, ISendOptions } from './Transport.js';
13
9
  export declare const DEFAULT_SEAT_RESERVATION_TIME: number;
14
10
  export type SimulationCallback = (deltaTime: number) => void;
15
11
  export interface IBroadcastOptions extends ISendOptions {
@@ -38,7 +34,7 @@ export declare abstract class Room<State extends object = any, Metadata = any, U
38
34
  */
39
35
  get locked(): boolean;
40
36
  get metadata(): Metadata;
41
- listing: RoomListingData<Metadata>;
37
+ listing: RoomCache<Metadata>;
42
38
  /**
43
39
  * Timing events tied to the room instance.
44
40
  * Intervals and timeouts are cleared when the room is disposed.
@@ -50,6 +46,12 @@ export declare abstract class Room<State extends object = any, Metadata = any, U
50
46
  * the room will be unlocked as soon as a client disconnects from it.
51
47
  */
52
48
  maxClients: number;
49
+ /**
50
+ * Automatically dispose the room when last client disconnects.
51
+ *
52
+ * @default true
53
+ */
54
+ autoDispose: boolean;
53
55
  /**
54
56
  * Frequency to send the room state to connected clients, in milliseconds.
55
57
  *
@@ -76,7 +78,7 @@ export declare abstract class Room<State extends object = any, Metadata = any, U
76
78
  _events: EventEmitter<[never]>;
77
79
  protected seatReservationTime: number;
78
80
  protected reservedSeats: {
79
- [sessionId: string]: [any, any];
81
+ [sessionId: string]: [any, any, boolean?, boolean?];
80
82
  };
81
83
  protected reservedSeatTimeouts: {
82
84
  [sessionId: string]: NodeJS.Timeout;
@@ -89,20 +91,13 @@ export declare abstract class Room<State extends object = any, Metadata = any, U
89
91
  private _serializer;
90
92
  private _afterNextPatchQueue;
91
93
  private _simulationInterval;
92
- private _patchInterval;
93
94
  private _internalState;
94
95
  private _locked;
95
96
  private _lockedExplicitly;
96
97
  private _maxClientsReached;
97
98
  private _autoDisposeTimeout;
98
99
  constructor();
99
- /**
100
- * Automatically dispose the room when last client disconnects.
101
- *
102
- * @default true
103
- */
104
- get autoDispose(): boolean;
105
- set autoDispose(value: boolean);
100
+ protected __init(): void;
106
101
  /**
107
102
  * The name of the room you provided as first argument for `gameServer.define()`.
108
103
  *
@@ -184,6 +179,9 @@ export declare abstract class Room<State extends object = any, Metadata = any, U
184
179
  * @param delay - Interval delay on executing `onTickCallback` in milliseconds.
185
180
  */
186
181
  setSimulationInterval(onTickCallback?: SimulationCallback, delay?: number): void;
182
+ /**
183
+ * @deprecated Use `.patchRate=` instead.
184
+ */
187
185
  setPatchRate(milliseconds: number | null): void;
188
186
  setState(newState: State): void;
189
187
  setSerializer(serializer: Serializer<State>): void;
@@ -198,15 +196,17 @@ export declare abstract class Room<State extends object = any, Metadata = any, U
198
196
  */
199
197
  unlock(): Promise<void>;
200
198
  send(client: Client, type: string | number, message: any, options?: ISendOptions): void;
201
- send(client: Client, message: Schema, options?: ISendOptions): void;
202
- broadcast(type: string | number, message?: any, options?: IBroadcastOptions): any;
203
- broadcast<T extends Schema>(message: T, options?: IBroadcastOptions): any;
199
+ broadcast(type: string | number, message?: any, options?: IBroadcastOptions): void;
200
+ /**
201
+ * Broadcast bytes (UInt8Arrays) to a particular room
202
+ */
203
+ broadcastBytes(type: string | number, message: Uint8Array, options: IBroadcastOptions): void;
204
204
  /**
205
205
  * Checks whether mutations have occurred in the state, and broadcast them to all connected clients.
206
206
  */
207
207
  broadcastPatch(): boolean;
208
208
  onMessage<T = any>(messageType: '*', callback: (client: Client<UserData, AuthData>, type: string | number, message: T) => void): any;
209
- onMessage<T = any>(messageType: string | number, callback: (client: Client<UserData, AuthData>, message: T) => void): any;
209
+ onMessage<T = any>(messageType: string | number, callback: (client: Client<UserData, AuthData>, message: T) => void, validate?: (message: unknown) => T): any;
210
210
  /**
211
211
  * Disconnect all connected clients, and then dispose the room.
212
212
  *
@@ -214,7 +214,7 @@ export declare abstract class Room<State extends object = any, Metadata = any, U
214
214
  * @returns Promise<void>
215
215
  */
216
216
  disconnect(closeCode?: number): Promise<any>;
217
- ['_onJoin'](client: Client, req?: http.IncomingMessage): Promise<void>;
217
+ ['_onJoin'](client: Client & ClientPrivate, req?: http.IncomingMessage): Promise<void>;
218
218
  /**
219
219
  * Allow the specified client to reconnect into the room. Must be used inside `onLeave()` method.
220
220
  * If seconds is provided, the reconnection is going to be cancelled after the provided amount of seconds.
@@ -228,14 +228,15 @@ export declare abstract class Room<State extends object = any, Metadata = any, U
228
228
  allowReconnection(previousClient: Client, seconds: number | "manual"): Deferred<Client>;
229
229
  protected resetAutoDisposeTimeout(timeoutInSeconds?: number): void;
230
230
  private broadcastMessageType;
231
- private sendFullState;
232
- private _dequeueAfterPatchMessages;
233
- private _reserveSeat;
234
- private _disposeIfEmpty;
235
- private _dispose;
236
- private _onMessage;
237
- private _forciblyCloseClient;
238
- private _onLeave;
239
- private _incrementClientCount;
240
- private _decrementClientCount;
231
+ protected sendFullState(client: Client): void;
232
+ protected _dequeueAfterPatchMessages(): void;
233
+ protected _reserveSeat(sessionId: string, joinOptions?: any, authData?: any, seconds?: number, allowReconnection?: boolean, devModeReconnection?: boolean): Promise<boolean>;
234
+ protected _disposeIfEmpty(): boolean;
235
+ protected _dispose(): Promise<any>;
236
+ protected _onMessage(client: Client & ClientPrivate, buffer: Buffer): void;
237
+ protected _forciblyCloseClient(client: Client & ClientPrivate, closeCode: number): void;
238
+ protected _onLeave(client: Client, code?: number): Promise<any>;
239
+ protected _onAfterLeave(client: Client): Promise<void>;
240
+ protected _incrementClientCount(): Promise<void>;
241
+ protected _decrementClientCount(): Promise<boolean>;
241
242
  }