@colyseus/core 0.15.41 → 0.16.0-preview.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 (46) hide show
  1. package/README.md +5 -5
  2. package/build/IPC.js.map +1 -1
  3. package/build/IPC.mjs.map +1 -1
  4. package/build/MatchMaker.d.ts +1 -2
  5. package/build/MatchMaker.js +3 -13
  6. package/build/MatchMaker.js.map +2 -2
  7. package/build/MatchMaker.mjs +3 -12
  8. package/build/MatchMaker.mjs.map +2 -2
  9. package/build/Protocol.d.ts +5 -8
  10. package/build/Protocol.js +36 -79
  11. package/build/Protocol.js.map +2 -2
  12. package/build/Protocol.mjs +37 -79
  13. package/build/Protocol.mjs.map +2 -2
  14. package/build/Room.d.ts +13 -16
  15. package/build/Room.js +7 -23
  16. package/build/Room.js.map +3 -3
  17. package/build/Room.mjs +8 -24
  18. package/build/Room.mjs.map +2 -2
  19. package/build/Transport.d.ts +13 -6
  20. package/build/Transport.js.map +2 -2
  21. package/build/Transport.mjs.map +2 -2
  22. package/build/index.d.ts +1 -1
  23. package/build/index.js +2 -2
  24. package/build/index.js.map +2 -2
  25. package/build/index.mjs +2 -2
  26. package/build/index.mjs.map +2 -2
  27. package/build/presence/LocalPresence.d.ts +1 -1
  28. package/build/presence/LocalPresence.js.map +2 -2
  29. package/build/presence/LocalPresence.mjs.map +2 -2
  30. package/build/rooms/RelayRoom.js +2 -3
  31. package/build/rooms/RelayRoom.js.map +2 -2
  32. package/build/rooms/RelayRoom.mjs +3 -4
  33. package/build/rooms/RelayRoom.mjs.map +2 -2
  34. package/build/serializer/SchemaSerializer.d.ts +9 -6
  35. package/build/serializer/SchemaSerializer.js +59 -43
  36. package/build/serializer/SchemaSerializer.js.map +2 -2
  37. package/build/serializer/SchemaSerializer.mjs +60 -44
  38. package/build/serializer/SchemaSerializer.mjs.map +2 -2
  39. package/build/serializer/Serializer.d.ts +3 -2
  40. package/build/serializer/Serializer.js.map +1 -1
  41. package/build/utils/Utils.d.ts +1 -8
  42. package/build/utils/Utils.js +3 -3
  43. package/build/utils/Utils.js.map +2 -2
  44. package/build/utils/Utils.mjs +2 -2
  45. package/build/utils/Utils.mjs.map +2 -2
  46. package/package.json +4 -5
@@ -1,5 +1,5 @@
1
1
  /// <reference types="node" />
2
- import { Schema } from '@colyseus/schema';
2
+ import { Iterator } from '@colyseus/schema';
3
3
  export declare enum Protocol {
4
4
  JOIN_ROOM = 10,
5
5
  ERROR = 11,
@@ -7,7 +7,6 @@ export declare enum Protocol {
7
7
  ROOM_DATA = 13,
8
8
  ROOM_STATE = 14,
9
9
  ROOM_STATE_PATCH = 15,
10
- ROOM_DATA_SCHEMA = 16,// used to send schema instances via room.send()
11
10
  ROOM_DATA_BYTES = 17,
12
11
  WS_CLOSE_NORMAL = 1000,
13
12
  WS_CLOSE_GOING_AWAY = 1001,
@@ -33,11 +32,9 @@ export declare enum IpcProtocol {
33
32
  TIMEOUT = 2
34
33
  }
35
34
  export declare const getMessageBytes: {
36
- 10: (reconnectionToken: string, serializerId: string, handshake?: number[]) => Buffer;
37
- 11: (code: number, message?: string) => Protocol[];
35
+ 10: (reconnectionToken: string, serializerId: string, handshake?: Buffer) => Buffer;
36
+ 11: (code: number, message?: string) => Buffer;
38
37
  14: (bytes: number[]) => number[];
39
- 16: (message: Schema) => number[];
40
- raw: (code: Protocol, type: string | number, message?: any, rawMessage?: ArrayLike<number> | Buffer) => Uint8Array;
38
+ raw: (code: Protocol, type: string | number, message?: any, rawMessage?: Uint8Array | Buffer) => Buffer;
41
39
  };
42
- export declare function utf8Write(buff: Buffer, offset: number, str?: string): void;
43
- export declare function utf8Length(str?: string): number;
40
+ export declare function utf8Write(buff: Buffer, it: Iterator, str?: string): void;
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";
@@ -63,109 +60,70 @@ var IpcProtocol = /* @__PURE__ */ ((IpcProtocol2) => {
63
60
  IpcProtocol2[IpcProtocol2["TIMEOUT"] = 2] = "TIMEOUT";
64
61
  return IpcProtocol2;
65
62
  })(IpcProtocol || {});
63
+ const sendBuffer = Buffer.allocUnsafe(8192);
64
+ const packr = new import_msgpackr.Packr();
65
+ packr.useBuffer(sendBuffer);
66
66
  const getMessageBytes = {
67
67
  [10 /* JOIN_ROOM */]: (reconnectionToken, serializerId, handshake) => {
68
- let offset = 0;
69
- const reconnectionTokenLength = utf8Length(reconnectionToken);
70
- const serializerIdLength = utf8Length(serializerId);
71
- const handshakeLength = handshake ? handshake.length : 0;
72
- const buff = Buffer.allocUnsafe(1 + reconnectionTokenLength + serializerIdLength + handshakeLength);
73
- buff.writeUInt8(10 /* JOIN_ROOM */, offset++);
74
- utf8Write(buff, offset, reconnectionToken);
75
- offset += reconnectionTokenLength;
76
- utf8Write(buff, offset, serializerId);
77
- offset += serializerIdLength;
78
- if (handshake) {
79
- for (let i = 0, l = handshake.length; i < l; i++) {
80
- buff.writeUInt8(handshake[i], offset++);
81
- }
82
- }
83
- return buff;
68
+ const it = { offset: 1 };
69
+ sendBuffer[0] = 10 /* JOIN_ROOM */;
70
+ utf8Write(sendBuffer, it, reconnectionToken);
71
+ utf8Write(sendBuffer, it, serializerId);
72
+ return Buffer.concat([sendBuffer.subarray(0, it.offset), handshake]);
84
73
  },
85
74
  [11 /* ERROR */]: (code, message = "") => {
86
- const bytes = [11 /* ERROR */];
87
- import_schema.encode.number(bytes, code);
88
- import_schema.encode.string(bytes, message);
89
- return bytes;
75
+ const it = { offset: 1 };
76
+ sendBuffer[0] = 11 /* ERROR */;
77
+ import_schema.encode.number(sendBuffer, code, it);
78
+ import_schema.encode.string(sendBuffer, message, it);
79
+ return sendBuffer.subarray(0, it.offset);
90
80
  },
91
81
  [14 /* ROOM_STATE */]: (bytes) => {
92
82
  return [14 /* ROOM_STATE */, ...bytes];
93
83
  },
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
84
  raw: (code, type, message, rawMessage) => {
103
- 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);
85
+ const it = { offset: 1 };
86
+ sendBuffer[0] = code;
87
+ if (typeof type === "string") {
88
+ import_schema.encode.string(sendBuffer, type, it);
109
89
  } else {
110
- throw new Error(`Protocol.ROOM_DATA: message type not supported "${type.toString()}"`);
90
+ import_schema.encode.number(sendBuffer, type, it);
111
91
  }
112
- let arr;
113
92
  if (message !== void 0) {
114
- const encoded = (0, import_msgpackr.pack)(message);
115
- arr = new Uint8Array(initialBytes.length + encoded.byteLength);
116
- arr.set(new Uint8Array(initialBytes), 0);
117
- arr.set(new Uint8Array(encoded), initialBytes.length);
93
+ return (0, import_msgpackr.pack)(message, 2048 + it.offset);
118
94
  } else if (rawMessage !== void 0) {
119
- arr = new Uint8Array(initialBytes.length + (rawMessage.byteLength || rawMessage.length));
120
- arr.set(new Uint8Array(initialBytes), 0);
121
- arr.set(new Uint8Array(rawMessage), initialBytes.length);
95
+ return Buffer.concat([sendBuffer.subarray(0, it.offset), rawMessage]);
122
96
  } else {
123
- arr = new Uint8Array(initialBytes);
97
+ return sendBuffer.subarray(0, it.offset);
124
98
  }
125
- return arr;
126
99
  }
127
100
  };
128
- function utf8Write(buff, offset, str = "") {
129
- buff[offset++] = utf8Length(str) - 1;
101
+ function utf8Write(buff, it, str = "") {
102
+ const byteLength = Buffer.byteLength(str, "utf8");
103
+ console.log("utf8Write", { byteLength, str });
104
+ buff[it.offset++] = byteLength;
130
105
  let c = 0;
131
106
  for (let i = 0, l = str.length; i < l; i++) {
132
107
  c = str.charCodeAt(i);
133
108
  if (c < 128) {
134
- buff[offset++] = c;
109
+ buff[it.offset++] = c;
135
110
  } else if (c < 2048) {
136
- buff[offset++] = 192 | c >> 6;
137
- buff[offset++] = 128 | c & 63;
111
+ buff[it.offset++] = 192 | c >> 6;
112
+ buff[it.offset++] = 128 | c & 63;
138
113
  } else if (c < 55296 || c >= 57344) {
139
- buff[offset++] = 224 | c >> 12;
140
- buff[offset++] = 128 | c >> 6 & 63;
141
- buff[offset++] = 128 | c & 63;
114
+ buff[it.offset++] = 224 | c >> 12;
115
+ buff[it.offset++] = 128 | c >> 6 & 63;
116
+ buff[it.offset++] = 128 | c & 63;
142
117
  } else {
143
118
  i++;
144
119
  c = 65536 + ((c & 1023) << 10 | str.charCodeAt(i) & 1023);
145
- buff[offset++] = 240 | c >> 18;
146
- buff[offset++] = 128 | c >> 12 & 63;
147
- buff[offset++] = 128 | c >> 6 & 63;
148
- buff[offset++] = 128 | c & 63;
149
- }
150
- }
151
- }
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;
120
+ buff[it.offset++] = 240 | c >> 18;
121
+ buff[it.offset++] = 128 | c >> 12 & 63;
122
+ buff[it.offset++] = 128 | c >> 6 & 63;
123
+ buff[it.offset++] = 128 | c & 63;
166
124
  }
167
125
  }
168
- return length + 1;
126
+ it.offset += byteLength;
169
127
  }
170
128
  // Annotate the CommonJS export names for ESM import in node:
171
129
  0 && (module.exports = {
@@ -173,6 +131,5 @@ function utf8Length(str = "") {
173
131
  IpcProtocol,
174
132
  Protocol,
175
133
  getMessageBytes,
176
- utf8Length,
177
134
  utf8Write
178
135
  });
@@ -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, 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 utf8Write(sendBuffer, it, reconnectionToken);\n utf8Write(sendBuffer, it, serializerId);\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\nexport function utf8Write(buff: Buffer, it: Iterator, str: string = '') {\n const byteLength = Buffer.byteLength(str, \"utf8\");\n console.log(\"utf8Write\", { byteLength, str });\n\n buff[it.offset++] = byteLength;\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[it.offset++] = c;\n } else if (c < 0x800) {\n buff[it.offset++] = 0xc0 | (c >> 6);\n buff[it.offset++] = 0x80 | (c & 0x3f);\n } else if (c < 0xd800 || c >= 0xe000) {\n buff[it.offset++] = 0xe0 | (c >> 12);\n buff[it.offset++] = 0x80 | (c >> 6) & 0x3f;\n buff[it.offset++] = 0x80 | (c & 0x3f);\n } else {\n i++;\n c = 0x10000 + (((c & 0x3ff) << 10) | (str.charCodeAt(i) & 0x3ff));\n buff[it.offset++] = 0xf0 | (c >> 18);\n buff[it.offset++] = 0x80 | (c >> 12) & 0x3f;\n buff[it.offset++] = 0x80 | (c >> 6) & 0x3f;\n buff[it.offset++] = 0x80 | (c & 0x3f);\n }\n }\n\n it.offset += byteLength;\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["Protocol", "ErrorCode", "IpcProtocol"]
7
7
  }
@@ -1,6 +1,5 @@
1
- import { pack } from "msgpackr";
1
+ import { pack, Packr } 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";
@@ -36,115 +34,75 @@ var IpcProtocol = /* @__PURE__ */ ((IpcProtocol2) => {
36
34
  IpcProtocol2[IpcProtocol2["TIMEOUT"] = 2] = "TIMEOUT";
37
35
  return IpcProtocol2;
38
36
  })(IpcProtocol || {});
37
+ const sendBuffer = Buffer.allocUnsafe(8192);
38
+ const packr = new Packr();
39
+ packr.useBuffer(sendBuffer);
39
40
  const getMessageBytes = {
40
41
  [10 /* JOIN_ROOM */]: (reconnectionToken, serializerId, handshake) => {
41
- let offset = 0;
42
- const reconnectionTokenLength = utf8Length(reconnectionToken);
43
- const serializerIdLength = utf8Length(serializerId);
44
- const handshakeLength = handshake ? handshake.length : 0;
45
- const buff = Buffer.allocUnsafe(1 + reconnectionTokenLength + serializerIdLength + handshakeLength);
46
- buff.writeUInt8(10 /* JOIN_ROOM */, offset++);
47
- utf8Write(buff, offset, reconnectionToken);
48
- offset += reconnectionTokenLength;
49
- utf8Write(buff, offset, serializerId);
50
- offset += serializerIdLength;
51
- if (handshake) {
52
- for (let i = 0, l = handshake.length; i < l; i++) {
53
- buff.writeUInt8(handshake[i], offset++);
54
- }
55
- }
56
- return buff;
42
+ const it = { offset: 1 };
43
+ sendBuffer[0] = 10 /* JOIN_ROOM */;
44
+ utf8Write(sendBuffer, it, reconnectionToken);
45
+ utf8Write(sendBuffer, it, serializerId);
46
+ return Buffer.concat([sendBuffer.subarray(0, it.offset), handshake]);
57
47
  },
58
48
  [11 /* ERROR */]: (code, message = "") => {
59
- const bytes = [11 /* ERROR */];
60
- encode.number(bytes, code);
61
- encode.string(bytes, message);
62
- return bytes;
49
+ const it = { offset: 1 };
50
+ sendBuffer[0] = 11 /* ERROR */;
51
+ encode.number(sendBuffer, code, it);
52
+ encode.string(sendBuffer, message, it);
53
+ return sendBuffer.subarray(0, it.offset);
63
54
  },
64
55
  [14 /* ROOM_STATE */]: (bytes) => {
65
56
  return [14 /* ROOM_STATE */, ...bytes];
66
57
  },
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
58
  raw: (code, type, message, rawMessage) => {
76
- 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);
59
+ const it = { offset: 1 };
60
+ sendBuffer[0] = code;
61
+ if (typeof type === "string") {
62
+ encode.string(sendBuffer, type, it);
82
63
  } else {
83
- throw new Error(`Protocol.ROOM_DATA: message type not supported "${type.toString()}"`);
64
+ encode.number(sendBuffer, type, it);
84
65
  }
85
- let arr;
86
66
  if (message !== void 0) {
87
- const encoded = pack(message);
88
- arr = new Uint8Array(initialBytes.length + encoded.byteLength);
89
- arr.set(new Uint8Array(initialBytes), 0);
90
- arr.set(new Uint8Array(encoded), initialBytes.length);
67
+ return pack(message, 2048 + it.offset);
91
68
  } else if (rawMessage !== void 0) {
92
- arr = new Uint8Array(initialBytes.length + (rawMessage.byteLength || rawMessage.length));
93
- arr.set(new Uint8Array(initialBytes), 0);
94
- arr.set(new Uint8Array(rawMessage), initialBytes.length);
69
+ return Buffer.concat([sendBuffer.subarray(0, it.offset), rawMessage]);
95
70
  } else {
96
- arr = new Uint8Array(initialBytes);
71
+ return sendBuffer.subarray(0, it.offset);
97
72
  }
98
- return arr;
99
73
  }
100
74
  };
101
- function utf8Write(buff, offset, str = "") {
102
- buff[offset++] = utf8Length(str) - 1;
75
+ function utf8Write(buff, it, str = "") {
76
+ const byteLength = Buffer.byteLength(str, "utf8");
77
+ console.log("utf8Write", { byteLength, str });
78
+ buff[it.offset++] = byteLength;
103
79
  let c = 0;
104
80
  for (let i = 0, l = str.length; i < l; i++) {
105
81
  c = str.charCodeAt(i);
106
82
  if (c < 128) {
107
- buff[offset++] = c;
83
+ buff[it.offset++] = c;
108
84
  } else if (c < 2048) {
109
- buff[offset++] = 192 | c >> 6;
110
- buff[offset++] = 128 | c & 63;
85
+ buff[it.offset++] = 192 | c >> 6;
86
+ buff[it.offset++] = 128 | c & 63;
111
87
  } else if (c < 55296 || c >= 57344) {
112
- buff[offset++] = 224 | c >> 12;
113
- buff[offset++] = 128 | c >> 6 & 63;
114
- buff[offset++] = 128 | c & 63;
88
+ buff[it.offset++] = 224 | c >> 12;
89
+ buff[it.offset++] = 128 | c >> 6 & 63;
90
+ buff[it.offset++] = 128 | c & 63;
115
91
  } else {
116
92
  i++;
117
93
  c = 65536 + ((c & 1023) << 10 | str.charCodeAt(i) & 1023);
118
- buff[offset++] = 240 | c >> 18;
119
- buff[offset++] = 128 | c >> 12 & 63;
120
- buff[offset++] = 128 | c >> 6 & 63;
121
- buff[offset++] = 128 | c & 63;
122
- }
123
- }
124
- }
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;
94
+ buff[it.offset++] = 240 | c >> 18;
95
+ buff[it.offset++] = 128 | c >> 12 & 63;
96
+ buff[it.offset++] = 128 | c >> 6 & 63;
97
+ buff[it.offset++] = 128 | c & 63;
139
98
  }
140
99
  }
141
- return length + 1;
100
+ it.offset += byteLength;
142
101
  }
143
102
  export {
144
103
  ErrorCode,
145
104
  IpcProtocol,
146
105
  Protocol,
147
106
  getMessageBytes,
148
- utf8Length,
149
107
  utf8Write
150
108
  };
@@ -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, 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 utf8Write(sendBuffer, it, reconnectionToken);\n utf8Write(sendBuffer, it, serializerId);\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\nexport function utf8Write(buff: Buffer, it: Iterator, str: string = '') {\n const byteLength = Buffer.byteLength(str, \"utf8\");\n console.log(\"utf8Write\", { byteLength, str });\n\n buff[it.offset++] = byteLength;\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[it.offset++] = c;\n } else if (c < 0x800) {\n buff[it.offset++] = 0xc0 | (c >> 6);\n buff[it.offset++] = 0x80 | (c & 0x3f);\n } else if (c < 0xd800 || c >= 0xe000) {\n buff[it.offset++] = 0xe0 | (c >> 12);\n buff[it.offset++] = 0x80 | (c >> 6) & 0x3f;\n buff[it.offset++] = 0x80 | (c & 0x3f);\n } else {\n i++;\n c = 0x10000 + (((c & 0x3ff) << 10) | (str.charCodeAt(i) & 0x3ff));\n buff[it.offset++] = 0xf0 | (c >> 18);\n buff[it.offset++] = 0x80 | (c >> 12) & 0x3f;\n buff[it.offset++] = 0x80 | (c >> 6) & 0x3f;\n buff[it.offset++] = 0x80 | (c & 0x3f);\n }\n }\n\n it.offset += byteLength;\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 {};