@colyseus/core 0.16.0-preview.9 → 0.16.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.
- package/README.md +5 -5
- package/build/Debug.js +6 -2
- package/build/Debug.js.map +2 -2
- package/build/Debug.mjs +11 -10
- package/build/Debug.mjs.map +2 -2
- package/build/IPC.d.ts +1 -1
- package/build/IPC.js +3 -3
- package/build/IPC.js.map +2 -2
- package/build/IPC.mjs +4 -3
- package/build/IPC.mjs.map +2 -2
- package/build/Logger.mjs +4 -3
- package/build/Logger.mjs.map +1 -1
- package/build/MatchMaker.d.ts +35 -30
- package/build/MatchMaker.js +150 -100
- package/build/MatchMaker.js.map +2 -2
- package/build/MatchMaker.mjs +154 -107
- package/build/MatchMaker.mjs.map +2 -2
- package/build/Protocol.d.ts +3 -4
- package/build/Protocol.js +33 -19
- package/build/Protocol.js.map +2 -2
- package/build/Protocol.mjs +36 -21
- package/build/Protocol.mjs.map +2 -2
- package/build/Room.d.ts +64 -40
- package/build/Room.js +408 -151
- package/build/Room.js.map +2 -2
- package/build/Room.mjs +412 -158
- package/build/Room.mjs.map +2 -2
- package/build/Server.d.ts +8 -7
- package/build/Server.js +51 -18
- package/build/Server.js.map +2 -2
- package/build/Server.mjs +51 -21
- package/build/Server.mjs.map +3 -3
- package/build/Stats.d.ts +2 -0
- package/build/Stats.js +38 -3
- package/build/Stats.js.map +2 -2
- package/build/Stats.mjs +30 -6
- package/build/Stats.mjs.map +2 -2
- package/build/Transport.d.ts +8 -7
- package/build/Transport.js +1 -1
- package/build/Transport.js.map +2 -2
- package/build/Transport.mjs +6 -5
- package/build/Transport.mjs.map +2 -2
- package/build/discovery/index.d.ts +1 -1
- package/build/discovery/index.js.map +2 -2
- package/build/discovery/index.mjs +3 -2
- package/build/discovery/index.mjs.map +2 -2
- package/build/errors/RoomExceptions.d.ts +39 -0
- package/build/errors/RoomExceptions.js +100 -0
- package/build/errors/RoomExceptions.js.map +7 -0
- package/build/errors/RoomExceptions.mjs +71 -0
- package/build/errors/RoomExceptions.mjs.map +7 -0
- package/build/errors/SeatReservationError.mjs +3 -2
- package/build/errors/SeatReservationError.mjs.map +1 -1
- package/build/errors/ServerError.js +1 -1
- package/build/errors/ServerError.js.map +1 -1
- package/build/errors/ServerError.mjs +5 -4
- package/build/errors/ServerError.mjs.map +2 -2
- package/build/index.d.ts +21 -19
- package/build/index.js +47 -20
- package/build/index.js.map +2 -2
- package/build/index.mjs +41 -19
- package/build/index.mjs.map +2 -2
- package/build/matchmaker/Lobby.d.ts +3 -3
- package/build/matchmaker/Lobby.js +6 -3
- package/build/matchmaker/Lobby.js.map +2 -2
- package/build/matchmaker/Lobby.mjs +4 -4
- package/build/matchmaker/Lobby.mjs.map +2 -2
- package/build/matchmaker/RegisteredHandler.d.ts +6 -7
- package/build/matchmaker/RegisteredHandler.js +7 -10
- package/build/matchmaker/RegisteredHandler.js.map +2 -2
- package/build/matchmaker/RegisteredHandler.mjs +11 -13
- package/build/matchmaker/RegisteredHandler.mjs.map +2 -2
- package/build/matchmaker/controller.d.ts +4 -5
- package/build/matchmaker/controller.js +22 -15
- package/build/matchmaker/controller.js.map +2 -2
- package/build/matchmaker/controller.mjs +19 -13
- package/build/matchmaker/controller.mjs.map +2 -2
- package/build/matchmaker/driver/api.d.ts +104 -0
- package/build/matchmaker/driver/api.js +29 -0
- package/build/matchmaker/driver/api.js.map +7 -0
- package/build/matchmaker/driver/api.mjs +7 -0
- package/build/matchmaker/driver/api.mjs.map +7 -0
- package/build/matchmaker/driver/index.d.ts +2 -2
- package/build/matchmaker/driver/index.js +2 -2
- package/build/matchmaker/driver/index.js.map +2 -2
- package/build/matchmaker/driver/index.mjs +5 -4
- package/build/matchmaker/driver/index.mjs.map +2 -2
- package/build/matchmaker/driver/local/LocalDriver.d.ts +13 -0
- package/build/matchmaker/driver/local/LocalDriver.js +65 -0
- package/build/matchmaker/driver/local/LocalDriver.js.map +7 -0
- package/build/matchmaker/driver/local/LocalDriver.mjs +43 -0
- package/build/matchmaker/driver/local/LocalDriver.mjs.map +7 -0
- package/build/matchmaker/driver/local/Query.d.ts +9 -0
- package/build/matchmaker/driver/local/Query.js +78 -0
- package/build/matchmaker/driver/local/Query.js.map +7 -0
- package/build/matchmaker/driver/local/Query.mjs +56 -0
- package/build/matchmaker/driver/local/Query.mjs.map +7 -0
- package/build/matchmaker/driver/local/RoomData.d.ts +19 -0
- package/build/matchmaker/driver/local/RoomData.js +79 -0
- package/build/matchmaker/driver/local/RoomData.js.map +7 -0
- package/build/matchmaker/driver/local/RoomData.mjs +57 -0
- package/build/matchmaker/driver/local/RoomData.mjs.map +7 -0
- package/build/presence/LocalPresence.d.ts +10 -6
- package/build/presence/LocalPresence.js +85 -24
- package/build/presence/LocalPresence.js.map +3 -3
- package/build/presence/LocalPresence.mjs +85 -27
- package/build/presence/LocalPresence.mjs.map +3 -3
- package/build/presence/Presence.d.ts +38 -2
- package/build/presence/Presence.js.map +1 -1
- package/build/rooms/LobbyRoom.d.ts +6 -6
- package/build/rooms/LobbyRoom.js +8 -3
- package/build/rooms/LobbyRoom.js.map +2 -2
- package/build/rooms/LobbyRoom.mjs +7 -5
- package/build/rooms/LobbyRoom.mjs.map +2 -2
- package/build/rooms/RelayRoom.d.ts +3 -3
- package/build/rooms/RelayRoom.js +3 -1
- package/build/rooms/RelayRoom.js.map +2 -2
- package/build/rooms/RelayRoom.mjs +10 -7
- package/build/rooms/RelayRoom.mjs.map +2 -2
- package/build/serializer/NoneSerializer.d.ts +2 -2
- package/build/serializer/NoneSerializer.js.map +1 -1
- package/build/serializer/NoneSerializer.mjs +3 -2
- package/build/serializer/NoneSerializer.mjs.map +2 -2
- package/build/serializer/SchemaSerializer.d.ts +16 -15
- package/build/serializer/SchemaSerializer.js +12 -10
- package/build/serializer/SchemaSerializer.js.map +2 -2
- package/build/serializer/SchemaSerializer.mjs +16 -13
- package/build/serializer/SchemaSerializer.mjs.map +2 -2
- package/build/serializer/SchemaSerializerDebug.d.ts +7 -0
- package/build/serializer/SchemaSerializerDebug.js +0 -0
- package/build/serializer/SchemaSerializerDebug.js.map +7 -0
- package/build/serializer/SchemaSerializerDebug.mjs +0 -0
- package/build/serializer/SchemaSerializerDebug.mjs.map +7 -0
- package/build/serializer/Serializer.d.ts +1 -2
- package/build/serializer/Serializer.js.map +1 -1
- package/build/utils/DevMode.d.ts +2 -2
- package/build/utils/DevMode.js +8 -4
- package/build/utils/DevMode.js.map +2 -2
- package/build/utils/DevMode.mjs +7 -6
- package/build/utils/DevMode.mjs.map +2 -2
- package/build/utils/Utils.d.ts +8 -3
- package/build/utils/Utils.js +41 -17
- package/build/utils/Utils.js.map +2 -2
- package/build/utils/Utils.mjs +40 -21
- package/build/utils/Utils.mjs.map +2 -2
- package/package.json +17 -6
package/build/Room.d.ts
CHANGED
|
@@ -1,15 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
/// <reference types="node" />
|
|
3
|
-
/// <reference types="node" />
|
|
4
|
-
import http, { IncomingMessage } from 'http';
|
|
5
|
-
import { Schema } from '@colyseus/schema';
|
|
6
|
-
import Clock from '@gamestdio/timer';
|
|
1
|
+
import Clock from '@colyseus/timer';
|
|
7
2
|
import { EventEmitter } from 'events';
|
|
8
|
-
import { Presence } from './presence/Presence';
|
|
9
|
-
import { Serializer } from './serializer/Serializer';
|
|
10
|
-
import { Deferred } from './utils/Utils';
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
3
|
+
import { Presence } from './presence/Presence.js';
|
|
4
|
+
import { Serializer } from './serializer/Serializer.js';
|
|
5
|
+
import { Deferred } from './utils/Utils.js';
|
|
6
|
+
import { RoomCache } from './matchmaker/driver/api.js';
|
|
7
|
+
import { AuthContext, Client, ClientPrivate, ClientArray, ISendOptions } from './Transport';
|
|
8
|
+
import { RoomException } from './errors/RoomExceptions.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 {
|
|
@@ -20,6 +16,8 @@ export declare enum RoomInternalState {
|
|
|
20
16
|
CREATED = 1,
|
|
21
17
|
DISPOSING = 2
|
|
22
18
|
}
|
|
19
|
+
export type ExtractUserData<T> = T extends ClientArray<infer U> ? U : never;
|
|
20
|
+
export type ExtractAuthData<T> = T extends ClientArray<infer _, infer U> ? U : never;
|
|
23
21
|
/**
|
|
24
22
|
* A Room class is meant to implement a game session, and/or serve as the communication channel
|
|
25
23
|
* between a group of clients.
|
|
@@ -38,7 +36,7 @@ export declare abstract class Room<State extends object = any, Metadata = any, U
|
|
|
38
36
|
*/
|
|
39
37
|
get locked(): boolean;
|
|
40
38
|
get metadata(): Metadata;
|
|
41
|
-
listing:
|
|
39
|
+
listing: RoomCache<Metadata>;
|
|
42
40
|
/**
|
|
43
41
|
* Timing events tied to the room instance.
|
|
44
42
|
* Intervals and timeouts are cleared when the room is disposed.
|
|
@@ -50,6 +48,12 @@ export declare abstract class Room<State extends object = any, Metadata = any, U
|
|
|
50
48
|
* the room will be unlocked as soon as a client disconnects from it.
|
|
51
49
|
*/
|
|
52
50
|
maxClients: number;
|
|
51
|
+
/**
|
|
52
|
+
* Automatically dispose the room when last client disconnects.
|
|
53
|
+
*
|
|
54
|
+
* @default true
|
|
55
|
+
*/
|
|
56
|
+
autoDispose: boolean;
|
|
53
57
|
/**
|
|
54
58
|
* Frequency to send the room state to connected clients, in milliseconds.
|
|
55
59
|
*
|
|
@@ -76,7 +80,7 @@ export declare abstract class Room<State extends object = any, Metadata = any, U
|
|
|
76
80
|
_events: EventEmitter<[never]>;
|
|
77
81
|
protected seatReservationTime: number;
|
|
78
82
|
protected reservedSeats: {
|
|
79
|
-
[sessionId: string]: [any, any];
|
|
83
|
+
[sessionId: string]: [any, any, boolean?, boolean?];
|
|
80
84
|
};
|
|
81
85
|
protected reservedSeatTimeouts: {
|
|
82
86
|
[sessionId: string]: NodeJS.Timeout;
|
|
@@ -89,20 +93,15 @@ export declare abstract class Room<State extends object = any, Metadata = any, U
|
|
|
89
93
|
private _serializer;
|
|
90
94
|
private _afterNextPatchQueue;
|
|
91
95
|
private _simulationInterval;
|
|
92
|
-
private _patchInterval;
|
|
93
96
|
private _internalState;
|
|
94
|
-
private _locked;
|
|
95
97
|
private _lockedExplicitly;
|
|
96
|
-
private _maxClientsReached;
|
|
97
98
|
private _autoDisposeTimeout;
|
|
98
99
|
constructor();
|
|
99
100
|
/**
|
|
100
|
-
*
|
|
101
|
-
*
|
|
102
|
-
* @default true
|
|
101
|
+
* This method is called by the MatchMaker before onCreate()
|
|
102
|
+
* @internal
|
|
103
103
|
*/
|
|
104
|
-
|
|
105
|
-
set autoDispose(value: boolean);
|
|
104
|
+
protected __init(): void;
|
|
106
105
|
/**
|
|
107
106
|
* The name of the room you provided as first argument for `gameServer.define()`.
|
|
108
107
|
*
|
|
@@ -135,11 +134,27 @@ export declare abstract class Room<State extends object = any, Metadata = any, U
|
|
|
135
134
|
onLeave?(client: Client<UserData, AuthData>, consented?: boolean): void | Promise<any>;
|
|
136
135
|
onDispose?(): void | Promise<any>;
|
|
137
136
|
/**
|
|
138
|
-
*
|
|
139
|
-
*
|
|
137
|
+
* Define a custom exception handler.
|
|
138
|
+
* If defined, all lifecycle hooks will be wrapped by try/catch, and the exception will be forwarded to this method.
|
|
139
|
+
*
|
|
140
|
+
* These methods will be wrapped by try/catch:
|
|
141
|
+
* - `onMessage`
|
|
142
|
+
* - `onAuth` / `onJoin` / `onLeave` / `onCreate` / `onDispose`
|
|
143
|
+
* - `clock.setTimeout` / `clock.setInterval`
|
|
144
|
+
* - `setSimulationInterval`
|
|
145
|
+
*
|
|
146
|
+
* (Experimental: this feature is subject to change in the future - we're currently getting feedback to improve it)
|
|
140
147
|
*/
|
|
141
|
-
|
|
142
|
-
|
|
148
|
+
onUncaughtException?(error: RoomException<this>, methodName: 'onCreate' | 'onAuth' | 'onJoin' | 'onLeave' | 'onDispose' | 'onMessage' | 'setSimulationInterval' | 'setInterval' | 'setTimeout'): void;
|
|
149
|
+
onAuth(client: Client<UserData, AuthData>, options: any, context: AuthContext): any | Promise<any>;
|
|
150
|
+
static onAuth(token: string, options: any, context: AuthContext): Promise<unknown>;
|
|
151
|
+
/**
|
|
152
|
+
* This method is called during graceful shutdown of the server process
|
|
153
|
+
* You may override this method to dispose the room in your own way.
|
|
154
|
+
*
|
|
155
|
+
* Once process reaches room count of 0, the room process will be terminated.
|
|
156
|
+
*/
|
|
157
|
+
onBeforeShutdown(): void;
|
|
143
158
|
/**
|
|
144
159
|
* devMode: When `devMode` is enabled, `onCacheRoom` method is called during
|
|
145
160
|
* graceful shutdown.
|
|
@@ -184,7 +199,13 @@ export declare abstract class Room<State extends object = any, Metadata = any, U
|
|
|
184
199
|
* @param delay - Interval delay on executing `onTickCallback` in milliseconds.
|
|
185
200
|
*/
|
|
186
201
|
setSimulationInterval(onTickCallback?: SimulationCallback, delay?: number): void;
|
|
202
|
+
/**
|
|
203
|
+
* @deprecated Use `.patchRate=` instead.
|
|
204
|
+
*/
|
|
187
205
|
setPatchRate(milliseconds: number | null): void;
|
|
206
|
+
/**
|
|
207
|
+
* @deprecated Use `.state =` instead.
|
|
208
|
+
*/
|
|
188
209
|
setState(newState: State): void;
|
|
189
210
|
setSerializer(serializer: Serializer<State>): void;
|
|
190
211
|
setMetadata(meta: Partial<Metadata>): Promise<void>;
|
|
@@ -198,15 +219,17 @@ export declare abstract class Room<State extends object = any, Metadata = any, U
|
|
|
198
219
|
*/
|
|
199
220
|
unlock(): Promise<void>;
|
|
200
221
|
send(client: Client, type: string | number, message: any, options?: ISendOptions): void;
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
222
|
+
broadcast(type: string | number, message?: any, options?: IBroadcastOptions): void;
|
|
223
|
+
/**
|
|
224
|
+
* Broadcast bytes (UInt8Arrays) to a particular room
|
|
225
|
+
*/
|
|
226
|
+
broadcastBytes(type: string | number, message: Uint8Array, options: IBroadcastOptions): void;
|
|
204
227
|
/**
|
|
205
228
|
* Checks whether mutations have occurred in the state, and broadcast them to all connected clients.
|
|
206
229
|
*/
|
|
207
230
|
broadcastPatch(): boolean;
|
|
208
231
|
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;
|
|
232
|
+
onMessage<T = any>(messageType: string | number, callback: (client: Client<UserData, AuthData>, message: T) => void, validate?: (message: unknown) => T): any;
|
|
210
233
|
/**
|
|
211
234
|
* Disconnect all connected clients, and then dispose the room.
|
|
212
235
|
*
|
|
@@ -214,7 +237,7 @@ export declare abstract class Room<State extends object = any, Metadata = any, U
|
|
|
214
237
|
* @returns Promise<void>
|
|
215
238
|
*/
|
|
216
239
|
disconnect(closeCode?: number): Promise<any>;
|
|
217
|
-
['_onJoin'](client: Client & ClientPrivate,
|
|
240
|
+
['_onJoin'](client: Client & ClientPrivate, authContext: AuthContext): Promise<void>;
|
|
218
241
|
/**
|
|
219
242
|
* Allow the specified client to reconnect into the room. Must be used inside `onLeave()` method.
|
|
220
243
|
* If seconds is provided, the reconnection is going to be cancelled after the provided amount of seconds.
|
|
@@ -228,14 +251,15 @@ export declare abstract class Room<State extends object = any, Metadata = any, U
|
|
|
228
251
|
allowReconnection(previousClient: Client, seconds: number | "manual"): Deferred<Client>;
|
|
229
252
|
protected resetAutoDisposeTimeout(timeoutInSeconds?: number): void;
|
|
230
253
|
private broadcastMessageType;
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
254
|
+
protected sendFullState(client: Client): void;
|
|
255
|
+
protected _dequeueAfterPatchMessages(): void;
|
|
256
|
+
protected _reserveSeat(sessionId: string, joinOptions?: any, authData?: any, seconds?: number, allowReconnection?: boolean, devModeReconnection?: boolean): Promise<boolean>;
|
|
257
|
+
protected _disposeIfEmpty(): boolean;
|
|
258
|
+
protected _dispose(): Promise<any>;
|
|
259
|
+
protected _onMessage(client: Client & ClientPrivate, buffer: Buffer): void;
|
|
260
|
+
protected _forciblyCloseClient(client: Client & ClientPrivate, closeCode: number): void;
|
|
261
|
+
protected _onLeave(client: Client, code?: number): Promise<any>;
|
|
262
|
+
protected _onAfterLeave(client: Client): Promise<void>;
|
|
263
|
+
protected _incrementClientCount(): Promise<void>;
|
|
264
|
+
protected _decrementClientCount(): Promise<boolean>;
|
|
241
265
|
}
|