///
import { IStateTracker, IDisposer, Client } from "../internal";
export interface IRoomData {
name: string;
port?: number;
hostId?: string;
pid?: string | number;
data?: {
[key: string]: any;
};
[key: string]: any;
}
export interface IRoomObject extends IRoomData {
id: string;
pid: string | number;
clients: string[];
}
interface IClientState {
trackingParams: {
[key: string]: any;
};
}
export interface ITrackerDisposer {
trackerDisposer: IDisposer;
patchInterval: NodeJS.Timeout;
}
export interface ITrackerParams {
patchRate?: number;
serializer?: string;
[param: string]: any;
}
export declare type RoomClient = Client;
export declare type RoomClass = new (params: IRoomData) => Room;
export declare abstract class Room {
state: T;
id: string;
pid: string | number;
port: number | undefined;
name: string;
data: any;
hostId: string;
terminated: boolean;
locked: boolean;
clients: Map;
updateCache: any;
tracker: IStateTracker | null;
disposers: Map;
constructor(roomData: IRoomData);
waitReconnection(client: Client, seconds?: number): Promise;
startTracking(client: RoomClient, params?: ITrackerParams): void;
stopTracking(client: RoomClient): void;
sendState(client: RoomClient): void;
updateTrackingParams(client: RoomClient, params: ITrackerParams): void;
lock(): void;
unlock(): void;
broadcast(type: string, data: any, exclude?: string): void;
toObject(): IRoomObject;
createState?(): T;
createPatchTracker?(state: T): IStateTracker;
onAuth?(sessionId: string, params: any): void | Promise;
onJoin?(client: RoomClient, params: any, auth?: any): void | Promise;
onMessage?(client: RoomClient, type: string, data: any): void;
onLeave?(client: RoomClient, consented?: boolean): void | Promise;
onCreate?(params: any): void | Promise;
onClose?(): void | Promise;
}
export {};