@colyseus/core 0.15.40 → 0.16.0-preview.0

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 (45) hide show
  1. package/build/IPC.js.map +1 -1
  2. package/build/IPC.mjs.map +1 -1
  3. package/build/MatchMaker.d.ts +1 -10
  4. package/build/MatchMaker.js +3 -10
  5. package/build/MatchMaker.js.map +2 -2
  6. package/build/MatchMaker.mjs +3 -9
  7. package/build/MatchMaker.mjs.map +2 -2
  8. package/build/Protocol.d.ts +1 -5
  9. package/build/Protocol.js +10 -41
  10. package/build/Protocol.js.map +2 -2
  11. package/build/Protocol.mjs +10 -40
  12. package/build/Protocol.mjs.map +2 -2
  13. package/build/Room.d.ts +13 -16
  14. package/build/Room.js +4 -22
  15. package/build/Room.js.map +3 -3
  16. package/build/Room.mjs +5 -23
  17. package/build/Room.mjs.map +2 -2
  18. package/build/Transport.d.ts +13 -6
  19. package/build/Transport.js.map +2 -2
  20. package/build/Transport.mjs.map +2 -2
  21. package/build/index.d.ts +1 -1
  22. package/build/index.js +2 -2
  23. package/build/index.js.map +2 -2
  24. package/build/index.mjs +2 -2
  25. package/build/index.mjs.map +2 -2
  26. package/build/presence/LocalPresence.d.ts +1 -1
  27. package/build/presence/LocalPresence.js.map +2 -2
  28. package/build/presence/LocalPresence.mjs.map +2 -2
  29. package/build/rooms/RelayRoom.js +2 -3
  30. package/build/rooms/RelayRoom.js.map +2 -2
  31. package/build/rooms/RelayRoom.mjs +3 -4
  32. package/build/rooms/RelayRoom.mjs.map +2 -2
  33. package/build/serializer/SchemaSerializer.d.ts +9 -6
  34. package/build/serializer/SchemaSerializer.js +58 -43
  35. package/build/serializer/SchemaSerializer.js.map +2 -2
  36. package/build/serializer/SchemaSerializer.mjs +59 -44
  37. package/build/serializer/SchemaSerializer.mjs.map +2 -2
  38. package/build/serializer/Serializer.d.ts +2 -1
  39. package/build/serializer/Serializer.js.map +1 -1
  40. package/build/utils/Utils.d.ts +1 -8
  41. package/build/utils/Utils.js +3 -3
  42. package/build/utils/Utils.js.map +2 -2
  43. package/build/utils/Utils.mjs +2 -2
  44. package/build/utils/Utils.mjs.map +2 -2
  45. package/package.json +4 -5
package/build/Protocol.js CHANGED
@@ -21,13 +21,11 @@ __export(Protocol_exports, {
21
21
  IpcProtocol: () => IpcProtocol,
22
22
  Protocol: () => Protocol,
23
23
  getMessageBytes: () => getMessageBytes,
24
- utf8Length: () => utf8Length,
25
24
  utf8Write: () => utf8Write
26
25
  });
27
26
  module.exports = __toCommonJS(Protocol_exports);
28
27
  var import_msgpackr = require("msgpackr");
29
28
  var import_schema = require("@colyseus/schema");
30
- var import_Logger = require("./Logger");
31
29
  var Protocol = /* @__PURE__ */ ((Protocol2) => {
32
30
  Protocol2[Protocol2["JOIN_ROOM"] = 10] = "JOIN_ROOM";
33
31
  Protocol2[Protocol2["ERROR"] = 11] = "ERROR";
@@ -35,7 +33,6 @@ var Protocol = /* @__PURE__ */ ((Protocol2) => {
35
33
  Protocol2[Protocol2["ROOM_DATA"] = 13] = "ROOM_DATA";
36
34
  Protocol2[Protocol2["ROOM_STATE"] = 14] = "ROOM_STATE";
37
35
  Protocol2[Protocol2["ROOM_STATE_PATCH"] = 15] = "ROOM_STATE_PATCH";
38
- Protocol2[Protocol2["ROOM_DATA_SCHEMA"] = 16] = "ROOM_DATA_SCHEMA";
39
36
  Protocol2[Protocol2["ROOM_DATA_BYTES"] = 17] = "ROOM_DATA_BYTES";
40
37
  Protocol2[Protocol2["WS_CLOSE_NORMAL"] = 1e3] = "WS_CLOSE_NORMAL";
41
38
  Protocol2[Protocol2["WS_CLOSE_GOING_AWAY"] = 1001] = "WS_CLOSE_GOING_AWAY";
@@ -66,8 +63,8 @@ var IpcProtocol = /* @__PURE__ */ ((IpcProtocol2) => {
66
63
  const getMessageBytes = {
67
64
  [10 /* JOIN_ROOM */]: (reconnectionToken, serializerId, handshake) => {
68
65
  let offset = 0;
69
- const reconnectionTokenLength = utf8Length(reconnectionToken);
70
- const serializerIdLength = utf8Length(serializerId);
66
+ const reconnectionTokenLength = Buffer.byteLength(reconnectionToken, "utf8");
67
+ const serializerIdLength = Buffer.byteLength(serializerId, "utf8");
71
68
  const handshakeLength = handshake ? handshake.length : 0;
72
69
  const buff = Buffer.allocUnsafe(1 + reconnectionTokenLength + serializerIdLength + handshakeLength);
73
70
  buff.writeUInt8(10 /* JOIN_ROOM */, offset++);
@@ -83,31 +80,22 @@ const getMessageBytes = {
83
80
  return buff;
84
81
  },
85
82
  [11 /* ERROR */]: (code, message = "") => {
83
+ const it = { offset: 0 };
86
84
  const bytes = [11 /* ERROR */];
87
- import_schema.encode.number(bytes, code);
88
- import_schema.encode.string(bytes, message);
85
+ import_schema.encode.number(bytes, code, it);
86
+ import_schema.encode.string(bytes, message, it);
89
87
  return bytes;
90
88
  },
91
89
  [14 /* ROOM_STATE */]: (bytes) => {
92
90
  return [14 /* ROOM_STATE */, ...bytes];
93
91
  },
94
- [16 /* ROOM_DATA_SCHEMA */]: (message) => {
95
- const typeid = message.constructor._typeid;
96
- if (typeid === void 0) {
97
- import_Logger.logger.warn("Starting at colyseus >= 0.13 You must provide a type and message when calling `this.broadcast()` or `client.send()`. Please see: https://docs.colyseus.io/migrating/0.13/");
98
- throw new Error(`an instance of Schema was expected, but ${JSON.stringify(message)} has been provided.`);
99
- }
100
- return [16 /* ROOM_DATA_SCHEMA */, typeid, ...message.encodeAll()];
101
- },
102
92
  raw: (code, type, message, rawMessage) => {
93
+ const it = { offset: 1 };
103
94
  const initialBytes = [code];
104
- const messageType = typeof type;
105
- if (messageType === "string") {
106
- import_schema.encode.string(initialBytes, type);
107
- } else if (messageType === "number") {
108
- import_schema.encode.number(initialBytes, type);
95
+ if (typeof type === "string") {
96
+ import_schema.encode.string(initialBytes, type, it);
109
97
  } else {
110
- throw new Error(`Protocol.ROOM_DATA: message type not supported "${type.toString()}"`);
98
+ import_schema.encode.number(initialBytes, type, it);
111
99
  }
112
100
  let arr;
113
101
  if (message !== void 0) {
@@ -126,7 +114,7 @@ const getMessageBytes = {
126
114
  }
127
115
  };
128
116
  function utf8Write(buff, offset, str = "") {
129
- buff[offset++] = utf8Length(str) - 1;
117
+ buff[offset++] = Buffer.byteLength(str, "utf8") - 1;
130
118
  let c = 0;
131
119
  for (let i = 0, l = str.length; i < l; i++) {
132
120
  c = str.charCodeAt(i);
@@ -149,30 +137,11 @@ function utf8Write(buff, offset, str = "") {
149
137
  }
150
138
  }
151
139
  }
152
- function utf8Length(str = "") {
153
- let c = 0;
154
- let length = 0;
155
- for (let i = 0, l = str.length; i < l; i++) {
156
- c = str.charCodeAt(i);
157
- if (c < 128) {
158
- length += 1;
159
- } else if (c < 2048) {
160
- length += 2;
161
- } else if (c < 55296 || c >= 57344) {
162
- length += 3;
163
- } else {
164
- i++;
165
- length += 4;
166
- }
167
- }
168
- return length + 1;
169
- }
170
140
  // Annotate the CommonJS export names for ESM import in node:
171
141
  0 && (module.exports = {
172
142
  ErrorCode,
173
143
  IpcProtocol,
174
144
  Protocol,
175
145
  getMessageBytes,
176
- utf8Length,
177
146
  utf8Write
178
147
  });
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/Protocol.ts"],
4
- "sourcesContent": ["import { pack } from 'msgpackr';\nimport { encode, Schema } from '@colyseus/schema';\nimport { logger } from './Logger';\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, // 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\nexport const getMessageBytes = {\n [Protocol.JOIN_ROOM]: (reconnectionToken: string, serializerId: string, handshake?: number[]) => {\n let offset = 0;\n\n const reconnectionTokenLength = utf8Length(reconnectionToken);\n const serializerIdLength = utf8Length(serializerId);\n const handshakeLength = (handshake) ? handshake.length : 0;\n\n const buff = Buffer.allocUnsafe(1 + reconnectionTokenLength + serializerIdLength + handshakeLength);\n buff.writeUInt8(Protocol.JOIN_ROOM, offset++);\n\n utf8Write(buff, offset, reconnectionToken);\n offset += reconnectionTokenLength;\n\n utf8Write(buff, offset, serializerId);\n offset += serializerIdLength;\n\n if (handshake) {\n for (let i = 0, l = handshake.length; i < l; i++) {\n buff.writeUInt8(handshake[i], offset++);\n }\n }\n\n return buff;\n },\n\n [Protocol.ERROR]: (code: number, message: string = '') => {\n const bytes = [Protocol.ERROR];\n\n encode.number(bytes, code);\n encode.string(bytes, message);\n\n return bytes;\n },\n\n [Protocol.ROOM_STATE]: (bytes: number[]) => {\n return [Protocol.ROOM_STATE, ...bytes];\n },\n\n [Protocol.ROOM_DATA_SCHEMA]: (message: Schema) => {\n const typeid = (message.constructor as typeof Schema)._typeid;\n\n if (typeid === undefined) {\n logger.warn('Starting at colyseus >= 0.13 You must provide a type and message when calling `this.broadcast()` or `client.send()`. Please see: https://docs.colyseus.io/migrating/0.13/');\n throw new Error(`an instance of Schema was expected, but ${JSON.stringify(message)} has been provided.`);\n }\n\n return [Protocol.ROOM_DATA_SCHEMA, typeid, ...message.encodeAll()];\n },\n\n raw: (code: Protocol, type: string | number, message?: any, rawMessage?: ArrayLike<number> | Buffer) => {\n const initialBytes: number[] = [code];\n const messageType = typeof (type);\n\n if (messageType === 'string') {\n encode.string(initialBytes, type);\n\n } else if (messageType === 'number') {\n encode.number(initialBytes, type);\n\n } else {\n throw new Error(`Protocol.ROOM_DATA: message type not supported \"${type.toString()}\"`);\n }\n\n let arr: Uint8Array;\n\n if (message !== undefined) {\n const encoded = pack(message);\n arr = new Uint8Array(initialBytes.length + encoded.byteLength);\n arr.set(new Uint8Array(initialBytes), 0);\n arr.set(new Uint8Array(encoded), initialBytes.length);\n\n } else if (rawMessage !== undefined) {\n arr = new Uint8Array(initialBytes.length + ((rawMessage as Buffer).byteLength || rawMessage.length));\n arr.set(new Uint8Array(initialBytes), 0);\n arr.set(new Uint8Array(rawMessage), initialBytes.length);\n\n } else {\n arr = new Uint8Array(initialBytes);\n }\n\n return arr;\n },\n\n};\n\nexport function utf8Write(buff: Buffer, offset: number, str: string = '') {\n buff[offset++] = utf8Length(str) - 1;\n\n let c = 0;\n for (let i = 0, l = str.length; i < l; i++) {\n c = str.charCodeAt(i);\n if (c < 0x80) {\n buff[offset++] = c;\n } else if (c < 0x800) {\n buff[offset++] = 0xc0 | (c >> 6);\n buff[offset++] = 0x80 | (c & 0x3f);\n } else if (c < 0xd800 || c >= 0xe000) {\n buff[offset++] = 0xe0 | (c >> 12);\n buff[offset++] = 0x80 | (c >> 6) & 0x3f;\n buff[offset++] = 0x80 | (c & 0x3f);\n } else {\n i++;\n c = 0x10000 + (((c & 0x3ff) << 10) | (str.charCodeAt(i) & 0x3ff));\n buff[offset++] = 0xf0 | (c >> 18);\n buff[offset++] = 0x80 | (c >> 12) & 0x3f;\n buff[offset++] = 0x80 | (c >> 6) & 0x3f;\n buff[offset++] = 0x80 | (c & 0x3f);\n }\n }\n}\n\n// Faster for short strings than Buffer.byteLength\nexport function utf8Length(str: string = '') {\n let c = 0;\n let length = 0;\n for (let i = 0, l = str.length; i < l; i++) {\n c = str.charCodeAt(i);\n if (c < 0x80) {\n length += 1;\n } else if (c < 0x800) {\n length += 2;\n } else if (c < 0xd800 || c >= 0xe000) {\n length += 3;\n } else {\n i++;\n length += 4;\n }\n }\n return length + 1;\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAAqB;AACrB,oBAA+B;AAC/B,oBAAuB;AAGhB,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;AACA,EAAAA,oBAAA,sBAAmB,MAAnB;AACA,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;AAML,MAAM,kBAAkB;AAAA,EAC7B,CAAC,qBAAqB,CAAC,mBAA2B,cAAsB,cAAyB;AAC/F,QAAI,SAAS;AAEb,UAAM,0BAA0B,WAAW,iBAAiB;AAC5D,UAAM,qBAAqB,WAAW,YAAY;AAClD,UAAM,kBAAmB,YAAa,UAAU,SAAS;AAEzD,UAAM,OAAO,OAAO,YAAY,IAAI,0BAA0B,qBAAqB,eAAe;AAClG,SAAK,WAAW,oBAAoB,QAAQ;AAE5C,cAAU,MAAM,QAAQ,iBAAiB;AACzC,cAAU;AAEV,cAAU,MAAM,QAAQ,YAAY;AACpC,cAAU;AAEV,QAAI,WAAW;AACb,eAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,IAAI,GAAG,KAAK;AAChD,aAAK,WAAW,UAAU,IAAI,QAAQ;AAAA,MACxC;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,CAAC,iBAAiB,CAAC,MAAc,UAAkB,OAAO;AACxD,UAAM,QAAQ,CAAC,cAAc;AAE7B,yBAAO,OAAO,OAAO,IAAI;AACzB,yBAAO,OAAO,OAAO,OAAO;AAE5B,WAAO;AAAA,EACT;AAAA,EAEA,CAAC,sBAAsB,CAAC,UAAoB;AAC1C,WAAO,CAAC,qBAAqB,GAAG,KAAK;AAAA,EACvC;AAAA,EAEA,CAAC,4BAA4B,CAAC,YAAoB;AAChD,UAAM,SAAU,QAAQ,YAA8B;AAEtD,QAAI,WAAW,QAAW;AACxB,2BAAO,KAAK,2KAA2K;AACvL,YAAM,IAAI,MAAM,2CAA2C,KAAK,UAAU,OAAO,sBAAsB;AAAA,IACzG;AAEA,WAAO,CAAC,2BAA2B,QAAQ,GAAG,QAAQ,UAAU,CAAC;AAAA,EACnE;AAAA,EAEA,KAAK,CAAC,MAAgB,MAAuB,SAAe,eAA4C;AACtG,UAAM,eAAyB,CAAC,IAAI;AACpC,UAAM,cAAc,OAAQ;AAE5B,QAAI,gBAAgB,UAAU;AAC5B,2BAAO,OAAO,cAAc,IAAI;AAAA,IAElC,WAAW,gBAAgB,UAAU;AACnC,2BAAO,OAAO,cAAc,IAAI;AAAA,IAElC,OAAO;AACL,YAAM,IAAI,MAAM,mDAAmD,KAAK,SAAS,IAAI;AAAA,IACvF;AAEA,QAAI;AAEJ,QAAI,YAAY,QAAW;AACzB,YAAM,cAAU,sBAAK,OAAO;AAC5B,YAAM,IAAI,WAAW,aAAa,SAAS,QAAQ,UAAU;AAC7D,UAAI,IAAI,IAAI,WAAW,YAAY,GAAG,CAAC;AACvC,UAAI,IAAI,IAAI,WAAW,OAAO,GAAG,aAAa,MAAM;AAAA,IAEtD,WAAW,eAAe,QAAW;AACnC,YAAM,IAAI,WAAW,aAAa,UAAW,WAAsB,cAAc,WAAW,OAAO;AACnG,UAAI,IAAI,IAAI,WAAW,YAAY,GAAG,CAAC;AACvC,UAAI,IAAI,IAAI,WAAW,UAAU,GAAG,aAAa,MAAM;AAAA,IAEzD,OAAO;AACL,YAAM,IAAI,WAAW,YAAY;AAAA,IACnC;AAEA,WAAO;AAAA,EACT;AAEF;AAEO,SAAS,UAAU,MAAc,QAAgB,MAAc,IAAI;AACxE,OAAK,YAAY,WAAW,GAAG,IAAI;AAEnC,MAAI,IAAI;AACR,WAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,IAAI,GAAG,KAAK;AAC1C,QAAI,IAAI,WAAW,CAAC;AACpB,QAAI,IAAI,KAAM;AACZ,WAAK,YAAY;AAAA,IACnB,WAAW,IAAI,MAAO;AACpB,WAAK,YAAY,MAAQ,KAAK;AAC9B,WAAK,YAAY,MAAQ,IAAI;AAAA,IAC/B,WAAW,IAAI,SAAU,KAAK,OAAQ;AACpC,WAAK,YAAY,MAAQ,KAAK;AAC9B,WAAK,YAAY,MAAQ,KAAK,IAAK;AACnC,WAAK,YAAY,MAAQ,IAAI;AAAA,IAC/B,OAAO;AACL;AACA,UAAI,UAAa,IAAI,SAAU,KAAO,IAAI,WAAW,CAAC,IAAI;AAC1D,WAAK,YAAY,MAAQ,KAAK;AAC9B,WAAK,YAAY,MAAQ,KAAK,KAAM;AACpC,WAAK,YAAY,MAAQ,KAAK,IAAK;AACnC,WAAK,YAAY,MAAQ,IAAI;AAAA,IAC/B;AAAA,EACF;AACF;AAGO,SAAS,WAAW,MAAc,IAAI;AAC3C,MAAI,IAAI;AACR,MAAI,SAAS;AACb,WAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,IAAI,GAAG,KAAK;AAC1C,QAAI,IAAI,WAAW,CAAC;AACpB,QAAI,IAAI,KAAM;AACZ,gBAAU;AAAA,IACZ,WAAW,IAAI,MAAO;AACpB,gBAAU;AAAA,IACZ,WAAW,IAAI,SAAU,KAAK,OAAQ;AACpC,gBAAU;AAAA,IACZ,OAAO;AACL;AACA,gBAAU;AAAA,IACZ;AAAA,EACF;AACA,SAAO,SAAS;AAClB;",
4
+ "sourcesContent": ["import { pack } 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\nexport const getMessageBytes = {\n [Protocol.JOIN_ROOM]: (reconnectionToken: string, serializerId: string, handshake?: number[] | Buffer) => {\n let offset = 0;\n\n const reconnectionTokenLength = Buffer.byteLength(reconnectionToken, \"utf8\");\n const serializerIdLength = Buffer.byteLength(serializerId, \"utf8\");\n const handshakeLength = (handshake) ? handshake.length : 0;\n\n const buff = Buffer.allocUnsafe(1 + reconnectionTokenLength + serializerIdLength + handshakeLength);\n buff.writeUInt8(Protocol.JOIN_ROOM, offset++);\n\n utf8Write(buff, offset, reconnectionToken);\n offset += reconnectionTokenLength;\n\n utf8Write(buff, offset, serializerId);\n offset += serializerIdLength;\n\n if (handshake) {\n for (let i = 0, l = handshake.length; i < l; i++) {\n buff.writeUInt8(handshake[i], offset++);\n }\n }\n\n return buff;\n },\n\n [Protocol.ERROR]: (code: number, message: string = '') => {\n const it: Iterator = { offset: 0 };\n const bytes = [Protocol.ERROR];\n\n encode.number(bytes, code, it);\n encode.string(bytes, message, it);\n\n return bytes;\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?: ArrayLike<number> | Buffer) => {\n const it: Iterator = { offset: 1 };\n const initialBytes: number[] = [code];\n\n if (typeof (type) === 'string') {\n encode.string(initialBytes, type as string, it);\n\n } else {\n encode.number(initialBytes, type, it);\n }\n\n let arr: Uint8Array;\n\n if (message !== undefined) {\n const encoded = pack(message);\n arr = new Uint8Array(initialBytes.length + encoded.byteLength);\n arr.set(new Uint8Array(initialBytes), 0);\n arr.set(new Uint8Array(encoded), initialBytes.length);\n\n } else if (rawMessage !== undefined) {\n arr = new Uint8Array(initialBytes.length + ((rawMessage as Buffer).byteLength || rawMessage.length));\n arr.set(new Uint8Array(initialBytes), 0);\n arr.set(new Uint8Array(rawMessage), initialBytes.length);\n\n } else {\n arr = new Uint8Array(initialBytes);\n }\n\n return arr;\n },\n\n};\n\nexport function utf8Write(buff: Buffer, offset: number, str: string = '') {\n buff[offset++] = Buffer.byteLength(str, \"utf8\") - 1;\n\n let c = 0;\n for (let i = 0, l = str.length; i < l; i++) {\n c = str.charCodeAt(i);\n if (c < 0x80) {\n buff[offset++] = c;\n } else if (c < 0x800) {\n buff[offset++] = 0xc0 | (c >> 6);\n buff[offset++] = 0x80 | (c & 0x3f);\n } else if (c < 0xd800 || c >= 0xe000) {\n buff[offset++] = 0xe0 | (c >> 12);\n buff[offset++] = 0x80 | (c >> 6) & 0x3f;\n buff[offset++] = 0x80 | (c & 0x3f);\n } else {\n i++;\n c = 0x10000 + (((c & 0x3ff) << 10) | (str.charCodeAt(i) & 0x3ff));\n buff[offset++] = 0xf0 | (c >> 18);\n buff[offset++] = 0x80 | (c >> 12) & 0x3f;\n buff[offset++] = 0x80 | (c >> 6) & 0x3f;\n buff[offset++] = 0x80 | (c & 0x3f);\n }\n }\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAAqB;AACrB,oBAAiC;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;AAML,MAAM,kBAAkB;AAAA,EAC7B,CAAC,qBAAqB,CAAC,mBAA2B,cAAsB,cAAkC;AACxG,QAAI,SAAS;AAEb,UAAM,0BAA0B,OAAO,WAAW,mBAAmB,MAAM;AAC3E,UAAM,qBAAqB,OAAO,WAAW,cAAc,MAAM;AACjE,UAAM,kBAAmB,YAAa,UAAU,SAAS;AAEzD,UAAM,OAAO,OAAO,YAAY,IAAI,0BAA0B,qBAAqB,eAAe;AAClG,SAAK,WAAW,oBAAoB,QAAQ;AAE5C,cAAU,MAAM,QAAQ,iBAAiB;AACzC,cAAU;AAEV,cAAU,MAAM,QAAQ,YAAY;AACpC,cAAU;AAEV,QAAI,WAAW;AACb,eAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,IAAI,GAAG,KAAK;AAChD,aAAK,WAAW,UAAU,IAAI,QAAQ;AAAA,MACxC;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,CAAC,iBAAiB,CAAC,MAAc,UAAkB,OAAO;AACxD,UAAM,KAAe,EAAE,QAAQ,EAAE;AACjC,UAAM,QAAQ,CAAC,cAAc;AAE7B,yBAAO,OAAO,OAAO,MAAM,EAAE;AAC7B,yBAAO,OAAO,OAAO,SAAS,EAAE;AAEhC,WAAO;AAAA,EACT;AAAA,EAEA,CAAC,sBAAsB,CAAC,UAAoB;AAC1C,WAAO,CAAC,qBAAqB,GAAG,KAAK;AAAA,EACvC;AAAA,EAEA,KAAK,CAAC,MAAgB,MAAuB,SAAe,eAA4C;AACtG,UAAM,KAAe,EAAE,QAAQ,EAAE;AACjC,UAAM,eAAyB,CAAC,IAAI;AAEpC,QAAI,OAAQ,SAAU,UAAU;AAC9B,2BAAO,OAAO,cAAc,MAAgB,EAAE;AAAA,IAEhD,OAAO;AACL,2BAAO,OAAO,cAAc,MAAM,EAAE;AAAA,IACtC;AAEA,QAAI;AAEJ,QAAI,YAAY,QAAW;AACzB,YAAM,cAAU,sBAAK,OAAO;AAC5B,YAAM,IAAI,WAAW,aAAa,SAAS,QAAQ,UAAU;AAC7D,UAAI,IAAI,IAAI,WAAW,YAAY,GAAG,CAAC;AACvC,UAAI,IAAI,IAAI,WAAW,OAAO,GAAG,aAAa,MAAM;AAAA,IAEtD,WAAW,eAAe,QAAW;AACnC,YAAM,IAAI,WAAW,aAAa,UAAW,WAAsB,cAAc,WAAW,OAAO;AACnG,UAAI,IAAI,IAAI,WAAW,YAAY,GAAG,CAAC;AACvC,UAAI,IAAI,IAAI,WAAW,UAAU,GAAG,aAAa,MAAM;AAAA,IAEzD,OAAO;AACL,YAAM,IAAI,WAAW,YAAY;AAAA,IACnC;AAEA,WAAO;AAAA,EACT;AAEF;AAEO,SAAS,UAAU,MAAc,QAAgB,MAAc,IAAI;AACxE,OAAK,YAAY,OAAO,WAAW,KAAK,MAAM,IAAI;AAElD,MAAI,IAAI;AACR,WAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,IAAI,GAAG,KAAK;AAC1C,QAAI,IAAI,WAAW,CAAC;AACpB,QAAI,IAAI,KAAM;AACZ,WAAK,YAAY;AAAA,IACnB,WAAW,IAAI,MAAO;AACpB,WAAK,YAAY,MAAQ,KAAK;AAC9B,WAAK,YAAY,MAAQ,IAAI;AAAA,IAC/B,WAAW,IAAI,SAAU,KAAK,OAAQ;AACpC,WAAK,YAAY,MAAQ,KAAK;AAC9B,WAAK,YAAY,MAAQ,KAAK,IAAK;AACnC,WAAK,YAAY,MAAQ,IAAI;AAAA,IAC/B,OAAO;AACL;AACA,UAAI,UAAa,IAAI,SAAU,KAAO,IAAI,WAAW,CAAC,IAAI;AAC1D,WAAK,YAAY,MAAQ,KAAK;AAC9B,WAAK,YAAY,MAAQ,KAAK,KAAM;AACpC,WAAK,YAAY,MAAQ,KAAK,IAAK;AACnC,WAAK,YAAY,MAAQ,IAAI;AAAA,IAC/B;AAAA,EACF;AACF;",
6
6
  "names": ["Protocol", "ErrorCode", "IpcProtocol"]
7
7
  }
@@ -1,6 +1,5 @@
1
1
  import { pack } from "msgpackr";
2
2
  import { encode } from "@colyseus/schema";
3
- import { logger } from "./Logger";
4
3
  var Protocol = /* @__PURE__ */ ((Protocol2) => {
5
4
  Protocol2[Protocol2["JOIN_ROOM"] = 10] = "JOIN_ROOM";
6
5
  Protocol2[Protocol2["ERROR"] = 11] = "ERROR";
@@ -8,7 +7,6 @@ var Protocol = /* @__PURE__ */ ((Protocol2) => {
8
7
  Protocol2[Protocol2["ROOM_DATA"] = 13] = "ROOM_DATA";
9
8
  Protocol2[Protocol2["ROOM_STATE"] = 14] = "ROOM_STATE";
10
9
  Protocol2[Protocol2["ROOM_STATE_PATCH"] = 15] = "ROOM_STATE_PATCH";
11
- Protocol2[Protocol2["ROOM_DATA_SCHEMA"] = 16] = "ROOM_DATA_SCHEMA";
12
10
  Protocol2[Protocol2["ROOM_DATA_BYTES"] = 17] = "ROOM_DATA_BYTES";
13
11
  Protocol2[Protocol2["WS_CLOSE_NORMAL"] = 1e3] = "WS_CLOSE_NORMAL";
14
12
  Protocol2[Protocol2["WS_CLOSE_GOING_AWAY"] = 1001] = "WS_CLOSE_GOING_AWAY";
@@ -39,8 +37,8 @@ var IpcProtocol = /* @__PURE__ */ ((IpcProtocol2) => {
39
37
  const getMessageBytes = {
40
38
  [10 /* JOIN_ROOM */]: (reconnectionToken, serializerId, handshake) => {
41
39
  let offset = 0;
42
- const reconnectionTokenLength = utf8Length(reconnectionToken);
43
- const serializerIdLength = utf8Length(serializerId);
40
+ const reconnectionTokenLength = Buffer.byteLength(reconnectionToken, "utf8");
41
+ const serializerIdLength = Buffer.byteLength(serializerId, "utf8");
44
42
  const handshakeLength = handshake ? handshake.length : 0;
45
43
  const buff = Buffer.allocUnsafe(1 + reconnectionTokenLength + serializerIdLength + handshakeLength);
46
44
  buff.writeUInt8(10 /* JOIN_ROOM */, offset++);
@@ -56,31 +54,22 @@ const getMessageBytes = {
56
54
  return buff;
57
55
  },
58
56
  [11 /* ERROR */]: (code, message = "") => {
57
+ const it = { offset: 0 };
59
58
  const bytes = [11 /* ERROR */];
60
- encode.number(bytes, code);
61
- encode.string(bytes, message);
59
+ encode.number(bytes, code, it);
60
+ encode.string(bytes, message, it);
62
61
  return bytes;
63
62
  },
64
63
  [14 /* ROOM_STATE */]: (bytes) => {
65
64
  return [14 /* ROOM_STATE */, ...bytes];
66
65
  },
67
- [16 /* ROOM_DATA_SCHEMA */]: (message) => {
68
- const typeid = message.constructor._typeid;
69
- if (typeid === void 0) {
70
- logger.warn("Starting at colyseus >= 0.13 You must provide a type and message when calling `this.broadcast()` or `client.send()`. Please see: https://docs.colyseus.io/migrating/0.13/");
71
- throw new Error(`an instance of Schema was expected, but ${JSON.stringify(message)} has been provided.`);
72
- }
73
- return [16 /* ROOM_DATA_SCHEMA */, typeid, ...message.encodeAll()];
74
- },
75
66
  raw: (code, type, message, rawMessage) => {
67
+ const it = { offset: 1 };
76
68
  const initialBytes = [code];
77
- const messageType = typeof type;
78
- if (messageType === "string") {
79
- encode.string(initialBytes, type);
80
- } else if (messageType === "number") {
81
- encode.number(initialBytes, type);
69
+ if (typeof type === "string") {
70
+ encode.string(initialBytes, type, it);
82
71
  } else {
83
- throw new Error(`Protocol.ROOM_DATA: message type not supported "${type.toString()}"`);
72
+ encode.number(initialBytes, type, it);
84
73
  }
85
74
  let arr;
86
75
  if (message !== void 0) {
@@ -99,7 +88,7 @@ const getMessageBytes = {
99
88
  }
100
89
  };
101
90
  function utf8Write(buff, offset, str = "") {
102
- buff[offset++] = utf8Length(str) - 1;
91
+ buff[offset++] = Buffer.byteLength(str, "utf8") - 1;
103
92
  let c = 0;
104
93
  for (let i = 0, l = str.length; i < l; i++) {
105
94
  c = str.charCodeAt(i);
@@ -122,29 +111,10 @@ function utf8Write(buff, offset, str = "") {
122
111
  }
123
112
  }
124
113
  }
125
- function utf8Length(str = "") {
126
- let c = 0;
127
- let length = 0;
128
- for (let i = 0, l = str.length; i < l; i++) {
129
- c = str.charCodeAt(i);
130
- if (c < 128) {
131
- length += 1;
132
- } else if (c < 2048) {
133
- length += 2;
134
- } else if (c < 55296 || c >= 57344) {
135
- length += 3;
136
- } else {
137
- i++;
138
- length += 4;
139
- }
140
- }
141
- return length + 1;
142
- }
143
114
  export {
144
115
  ErrorCode,
145
116
  IpcProtocol,
146
117
  Protocol,
147
118
  getMessageBytes,
148
- utf8Length,
149
119
  utf8Write
150
120
  };
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/Protocol.ts"],
4
- "sourcesContent": ["import { pack } from 'msgpackr';\nimport { encode, Schema } from '@colyseus/schema';\nimport { logger } from './Logger';\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, // 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\nexport const getMessageBytes = {\n [Protocol.JOIN_ROOM]: (reconnectionToken: string, serializerId: string, handshake?: number[]) => {\n let offset = 0;\n\n const reconnectionTokenLength = utf8Length(reconnectionToken);\n const serializerIdLength = utf8Length(serializerId);\n const handshakeLength = (handshake) ? handshake.length : 0;\n\n const buff = Buffer.allocUnsafe(1 + reconnectionTokenLength + serializerIdLength + handshakeLength);\n buff.writeUInt8(Protocol.JOIN_ROOM, offset++);\n\n utf8Write(buff, offset, reconnectionToken);\n offset += reconnectionTokenLength;\n\n utf8Write(buff, offset, serializerId);\n offset += serializerIdLength;\n\n if (handshake) {\n for (let i = 0, l = handshake.length; i < l; i++) {\n buff.writeUInt8(handshake[i], offset++);\n }\n }\n\n return buff;\n },\n\n [Protocol.ERROR]: (code: number, message: string = '') => {\n const bytes = [Protocol.ERROR];\n\n encode.number(bytes, code);\n encode.string(bytes, message);\n\n return bytes;\n },\n\n [Protocol.ROOM_STATE]: (bytes: number[]) => {\n return [Protocol.ROOM_STATE, ...bytes];\n },\n\n [Protocol.ROOM_DATA_SCHEMA]: (message: Schema) => {\n const typeid = (message.constructor as typeof Schema)._typeid;\n\n if (typeid === undefined) {\n logger.warn('Starting at colyseus >= 0.13 You must provide a type and message when calling `this.broadcast()` or `client.send()`. Please see: https://docs.colyseus.io/migrating/0.13/');\n throw new Error(`an instance of Schema was expected, but ${JSON.stringify(message)} has been provided.`);\n }\n\n return [Protocol.ROOM_DATA_SCHEMA, typeid, ...message.encodeAll()];\n },\n\n raw: (code: Protocol, type: string | number, message?: any, rawMessage?: ArrayLike<number> | Buffer) => {\n const initialBytes: number[] = [code];\n const messageType = typeof (type);\n\n if (messageType === 'string') {\n encode.string(initialBytes, type);\n\n } else if (messageType === 'number') {\n encode.number(initialBytes, type);\n\n } else {\n throw new Error(`Protocol.ROOM_DATA: message type not supported \"${type.toString()}\"`);\n }\n\n let arr: Uint8Array;\n\n if (message !== undefined) {\n const encoded = pack(message);\n arr = new Uint8Array(initialBytes.length + encoded.byteLength);\n arr.set(new Uint8Array(initialBytes), 0);\n arr.set(new Uint8Array(encoded), initialBytes.length);\n\n } else if (rawMessage !== undefined) {\n arr = new Uint8Array(initialBytes.length + ((rawMessage as Buffer).byteLength || rawMessage.length));\n arr.set(new Uint8Array(initialBytes), 0);\n arr.set(new Uint8Array(rawMessage), initialBytes.length);\n\n } else {\n arr = new Uint8Array(initialBytes);\n }\n\n return arr;\n },\n\n};\n\nexport function utf8Write(buff: Buffer, offset: number, str: string = '') {\n buff[offset++] = utf8Length(str) - 1;\n\n let c = 0;\n for (let i = 0, l = str.length; i < l; i++) {\n c = str.charCodeAt(i);\n if (c < 0x80) {\n buff[offset++] = c;\n } else if (c < 0x800) {\n buff[offset++] = 0xc0 | (c >> 6);\n buff[offset++] = 0x80 | (c & 0x3f);\n } else if (c < 0xd800 || c >= 0xe000) {\n buff[offset++] = 0xe0 | (c >> 12);\n buff[offset++] = 0x80 | (c >> 6) & 0x3f;\n buff[offset++] = 0x80 | (c & 0x3f);\n } else {\n i++;\n c = 0x10000 + (((c & 0x3ff) << 10) | (str.charCodeAt(i) & 0x3ff));\n buff[offset++] = 0xf0 | (c >> 18);\n buff[offset++] = 0x80 | (c >> 12) & 0x3f;\n buff[offset++] = 0x80 | (c >> 6) & 0x3f;\n buff[offset++] = 0x80 | (c & 0x3f);\n }\n }\n}\n\n// Faster for short strings than Buffer.byteLength\nexport function utf8Length(str: string = '') {\n let c = 0;\n let length = 0;\n for (let i = 0, l = str.length; i < l; i++) {\n c = str.charCodeAt(i);\n if (c < 0x80) {\n length += 1;\n } else if (c < 0x800) {\n length += 2;\n } else if (c < 0xd800 || c >= 0xe000) {\n length += 3;\n } else {\n i++;\n length += 4;\n }\n }\n return length + 1;\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { pack } 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\nexport const getMessageBytes = {\n [Protocol.JOIN_ROOM]: (reconnectionToken: string, serializerId: string, handshake?: number[] | Buffer) => {\n let offset = 0;\n\n const reconnectionTokenLength = Buffer.byteLength(reconnectionToken, \"utf8\");\n const serializerIdLength = Buffer.byteLength(serializerId, \"utf8\");\n const handshakeLength = (handshake) ? handshake.length : 0;\n\n const buff = Buffer.allocUnsafe(1 + reconnectionTokenLength + serializerIdLength + handshakeLength);\n buff.writeUInt8(Protocol.JOIN_ROOM, offset++);\n\n utf8Write(buff, offset, reconnectionToken);\n offset += reconnectionTokenLength;\n\n utf8Write(buff, offset, serializerId);\n offset += serializerIdLength;\n\n if (handshake) {\n for (let i = 0, l = handshake.length; i < l; i++) {\n buff.writeUInt8(handshake[i], offset++);\n }\n }\n\n return buff;\n },\n\n [Protocol.ERROR]: (code: number, message: string = '') => {\n const it: Iterator = { offset: 0 };\n const bytes = [Protocol.ERROR];\n\n encode.number(bytes, code, it);\n encode.string(bytes, message, it);\n\n return bytes;\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?: ArrayLike<number> | Buffer) => {\n const it: Iterator = { offset: 1 };\n const initialBytes: number[] = [code];\n\n if (typeof (type) === 'string') {\n encode.string(initialBytes, type as string, it);\n\n } else {\n encode.number(initialBytes, type, it);\n }\n\n let arr: Uint8Array;\n\n if (message !== undefined) {\n const encoded = pack(message);\n arr = new Uint8Array(initialBytes.length + encoded.byteLength);\n arr.set(new Uint8Array(initialBytes), 0);\n arr.set(new Uint8Array(encoded), initialBytes.length);\n\n } else if (rawMessage !== undefined) {\n arr = new Uint8Array(initialBytes.length + ((rawMessage as Buffer).byteLength || rawMessage.length));\n arr.set(new Uint8Array(initialBytes), 0);\n arr.set(new Uint8Array(rawMessage), initialBytes.length);\n\n } else {\n arr = new Uint8Array(initialBytes);\n }\n\n return arr;\n },\n\n};\n\nexport function utf8Write(buff: Buffer, offset: number, str: string = '') {\n buff[offset++] = Buffer.byteLength(str, \"utf8\") - 1;\n\n let c = 0;\n for (let i = 0, l = str.length; i < l; i++) {\n c = str.charCodeAt(i);\n if (c < 0x80) {\n buff[offset++] = c;\n } else if (c < 0x800) {\n buff[offset++] = 0xc0 | (c >> 6);\n buff[offset++] = 0x80 | (c & 0x3f);\n } else if (c < 0xd800 || c >= 0xe000) {\n buff[offset++] = 0xe0 | (c >> 12);\n buff[offset++] = 0x80 | (c >> 6) & 0x3f;\n buff[offset++] = 0x80 | (c & 0x3f);\n } else {\n i++;\n c = 0x10000 + (((c & 0x3ff) << 10) | (str.charCodeAt(i) & 0x3ff));\n buff[offset++] = 0xf0 | (c >> 18);\n buff[offset++] = 0x80 | (c >> 12) & 0x3f;\n buff[offset++] = 0x80 | (c >> 6) & 0x3f;\n buff[offset++] = 0x80 | (c & 0x3f);\n }\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["Protocol", "ErrorCode", "IpcProtocol"]
7
7
  }
package/build/Room.d.ts CHANGED
@@ -20,8 +20,6 @@ export declare enum RoomInternalState {
20
20
  CREATED = 1,
21
21
  DISPOSING = 2
22
22
  }
23
- type ExtractUserData<T> = T extends ClientArray<infer U> ? U : never;
24
- type ExtractAuthData<T> = T extends ClientArray<infer _, infer U> ? U : never;
25
23
  /**
26
24
  * A Room class is meant to implement a game session, and/or serve as the communication channel
27
25
  * between a group of clients.
@@ -29,7 +27,7 @@ type ExtractAuthData<T> = T extends ClientArray<infer _, infer U> ? U : never;
29
27
  * - Rooms are created on demand during matchmaking by default
30
28
  * - Room classes must be exposed using `.define()`
31
29
  */
32
- export declare abstract class Room<State extends object = any, Metadata = any> {
30
+ export declare abstract class Room<State extends object = any, Metadata = any, UserData = any, AuthData = any> {
33
31
  #private;
34
32
  /**
35
33
  * This property will change on these situations:
@@ -42,7 +40,8 @@ export declare abstract class Room<State extends object = any, Metadata = any> {
42
40
  get metadata(): Metadata;
43
41
  listing: RoomListingData<Metadata>;
44
42
  /**
45
- * A ClockTimer instance, used for timing events.
43
+ * Timing events tied to the room instance.
44
+ * Intervals and timeouts are cleared when the room is disposed.
46
45
  */
47
46
  clock: Clock;
48
47
  /**
@@ -72,15 +71,15 @@ export declare abstract class Room<State extends object = any, Metadata = any> {
72
71
  *
73
72
  * @see {@link https://docs.colyseus.io/colyseus/server/room/#client|Client instance}
74
73
  */
75
- clients: ClientArray;
74
+ clients: ClientArray<UserData, AuthData>;
76
75
  /** @internal */
77
- _events: EventEmitter;
76
+ _events: EventEmitter<[never]>;
78
77
  protected seatReservationTime: number;
79
78
  protected reservedSeats: {
80
79
  [sessionId: string]: [any, any];
81
80
  };
82
81
  protected reservedSeatTimeouts: {
83
- [sessionId: string]: NodeJS.Timer;
82
+ [sessionId: string]: NodeJS.Timeout;
84
83
  };
85
84
  protected _reconnections: {
86
85
  [reconnectionToken: string]: [string, Deferred];
@@ -96,7 +95,7 @@ export declare abstract class Room<State extends object = any, Metadata = any> {
96
95
  private _lockedExplicitly;
97
96
  private _maxClientsReached;
98
97
  private _autoDisposeTimeout;
99
- constructor(presence?: Presence);
98
+ constructor();
100
99
  /**
101
100
  * Automatically dispose the room when last client disconnects.
102
101
  *
@@ -132,14 +131,14 @@ export declare abstract class Room<State extends object = any, Metadata = any> {
132
131
  set roomId(roomId: string);
133
132
  onBeforePatch?(state: State): void | Promise<any>;
134
133
  onCreate?(options: any): void | Promise<any>;
135
- onJoin?(client: Client<ExtractUserData<typeof this['clients']>, ExtractAuthData<typeof this['clients']>>, options?: any, auth?: ExtractAuthData<typeof this['clients']>): void | Promise<any>;
136
- onLeave?(client: Client<ExtractUserData<typeof this['clients']>, ExtractAuthData<typeof this['clients']>>, consented?: boolean): void | Promise<any>;
134
+ onJoin?(client: Client<UserData, AuthData>, options?: any, auth?: AuthData): void | Promise<any>;
135
+ onLeave?(client: Client<UserData, AuthData>, consented?: boolean): void | Promise<any>;
137
136
  onDispose?(): void | Promise<any>;
138
137
  /**
139
138
  * onAuth at the instance level will be deprecated in the future.
140
139
  * Please use "static onAuth(token, req) instead
141
140
  */
142
- onAuth(client: Client<ExtractUserData<typeof this['clients']>, ExtractAuthData<typeof this['clients']>>, options: any, request?: http.IncomingMessage): any | Promise<any>;
141
+ onAuth(client: Client<UserData, AuthData>, options: any, request?: http.IncomingMessage): any | Promise<any>;
143
142
  static onAuth(token: string, req: IncomingMessage): Promise<unknown>;
144
143
  /**
145
144
  * devMode: When `devMode` is enabled, `onCacheRoom` method is called during
@@ -206,8 +205,8 @@ export declare abstract class Room<State extends object = any, Metadata = any> {
206
205
  * Checks whether mutations have occurred in the state, and broadcast them to all connected clients.
207
206
  */
208
207
  broadcastPatch(): boolean;
209
- onMessage<T = any>(messageType: '*', callback: (client: Client<ExtractUserData<typeof this['clients']>, ExtractAuthData<typeof this['clients']>>, type: string | number, message: T) => void): any;
210
- onMessage<T = any>(messageType: string | number, callback: (client: Client<ExtractUserData<typeof this['clients']>, ExtractAuthData<typeof this['clients']>>, message: T) => void): any;
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;
211
210
  /**
212
211
  * Disconnect all connected clients, and then dispose the room.
213
212
  *
@@ -228,9 +227,8 @@ export declare abstract class Room<State extends object = any, Metadata = any> {
228
227
  */
229
228
  allowReconnection(previousClient: Client, seconds: number | "manual"): Deferred<Client>;
230
229
  protected resetAutoDisposeTimeout(timeoutInSeconds?: number): void;
231
- private broadcastMessageSchema;
232
230
  private broadcastMessageType;
233
- protected sendFullState(client: Client): void;
231
+ private sendFullState;
234
232
  private _dequeueAfterPatchMessages;
235
233
  private _reserveSeat;
236
234
  private _disposeIfEmpty;
@@ -241,4 +239,3 @@ export declare abstract class Room<State extends object = any, Metadata = any> {
241
239
  private _incrementClientCount;
242
240
  private _decrementClientCount;
243
241
  }
244
- export {};
package/build/Room.js CHANGED
@@ -28,7 +28,6 @@ __export(Room_exports, {
28
28
  RoomInternalState: () => RoomInternalState
29
29
  });
30
30
  module.exports = __toCommonJS(Room_exports);
31
- var import_ws = __toESM(require("ws"));
32
31
  var import_msgpackr = require("msgpackr");
33
32
  var import_schema = require("@colyseus/schema");
34
33
  var import_timer = __toESM(require("@gamestdio/timer"));
@@ -53,7 +52,7 @@ var RoomInternalState = /* @__PURE__ */ ((RoomInternalState2) => {
53
52
  return RoomInternalState2;
54
53
  })(RoomInternalState || {});
55
54
  class Room {
56
- constructor(presence) {
55
+ constructor() {
57
56
  this.clock = new import_timer.default();
58
57
  this.#_autoDispose = true;
59
58
  this.maxClients = Infinity;
@@ -72,7 +71,6 @@ class Room {
72
71
  this._locked = false;
73
72
  this._lockedExplicitly = false;
74
73
  this._maxClientsReached = false;
75
- this.presence = presence;
76
74
  this._events.once("dispose", async () => {
77
75
  try {
78
76
  await this._dispose();
@@ -174,7 +172,7 @@ class Room {
174
172
  }
175
173
  setState(newState) {
176
174
  this.clock.start();
177
- if ("_definition" in newState) {
175
+ if (newState[import_schema.$changes] !== void 0) {
178
176
  this.setSerializer(new import_SchemaSerializer.SchemaSerializer());
179
177
  }
180
178
  this._serializer.reset(newState);
@@ -246,11 +244,7 @@ class Room {
246
244
  this._afterNextPatchQueue.push(["broadcast", arguments]);
247
245
  return;
248
246
  }
249
- if (isSchema) {
250
- this.broadcastMessageSchema(typeOrSchema, opts);
251
- } else {
252
- this.broadcastMessageType(typeOrSchema, messageOrOptions, opts);
253
- }
247
+ this.broadcastMessageType(typeOrSchema, messageOrOptions, opts);
254
248
  }
255
249
  broadcastPatch() {
256
250
  if (this.onBeforePatch) {
@@ -326,7 +320,7 @@ class Room {
326
320
  throw new import_ServerError.ServerError(import_Protocol.ErrorCode.AUTH_FAILED, "onAuth failed");
327
321
  }
328
322
  }
329
- if (client.readyState !== import_ws.default.OPEN) {
323
+ if (client.state === import_Transport.ClientState.LEAVING) {
330
324
  throw new import_ServerError.ServerError(import_Protocol.Protocol.WS_CLOSE_GOING_AWAY, "already disconnected");
331
325
  }
332
326
  this.clients.push(client);
@@ -416,18 +410,6 @@ class Room {
416
410
  this._disposeIfEmpty();
417
411
  }, timeoutInSeconds * 1e3);
418
412
  }
419
- broadcastMessageSchema(message, options = {}) {
420
- (0, import_Debug.debugMessage)("broadcast: %O", message);
421
- const encodedMessage = import_Protocol.getMessageBytes[import_Protocol.Protocol.ROOM_DATA_SCHEMA](message);
422
- const except = typeof options.except !== "undefined" ? Array.isArray(options.except) ? options.except : [options.except] : void 0;
423
- let numClients = this.clients.length;
424
- while (numClients--) {
425
- const client = this.clients[numClients];
426
- if (!except || !except.includes(client)) {
427
- client.enqueueRaw(encodedMessage);
428
- }
429
- }
430
- }
431
413
  broadcastMessageType(type, message, options = {}) {
432
414
  (0, import_Debug.debugMessage)("broadcast: %O", message);
433
415
  const encodedMessage = import_Protocol.getMessageBytes.raw(import_Protocol.Protocol.ROOM_DATA, type, message);