///
import { EventEmitter } from "events";
import { IAuth, IEncodedJsonPatch } from "../internal";
export declare type MessageListener = (type: string, data: any) => void;
export declare type EventListener = (...args: any) => void;
export interface IClientData {
roomId: string;
state?: any;
}
export declare const ErrorCode: {
NormalClose: number;
JoinError: number;
Unathorized: number;
ReservationExpired: number;
RoomNotFound: number;
ConnectionTimeout: number;
ReconnectError: number;
};
export declare const ClientEvent: {
error: number;
connected: number;
reconnected: number;
joined: number;
message: number;
request: number;
response: number;
snapshot: number;
patch: number;
schema: number;
encodedSnapshot: number;
encodedPatch: number;
};
export declare type ClientStatus = "connecting" | "connected" | "disconnected" | "reconnected";
export declare type EventArgs = [number, ...any[]];
export declare abstract class Client {
auth: IAuth;
roomId: string;
_status: ClientStatus;
state: T;
messages: any[];
get id(): string;
get data(): any;
get status(): ClientStatus;
set status(status: ClientStatus);
constructor(data: IClientData);
private safeEmit;
send(type: string, data: any): void;
onMessage(listener: MessageListener): void;
patch(patch: IEncodedJsonPatch): void;
snapshot(snapshot: any): void;
error(code?: number, message?: string): void;
connected(): void;
request(type: string, data: any): Promise;
abstract on(event: number, listner: MessageListener): void;
abstract emit(event: number, ...args: any): void;
abstract terminate(code?: number, reason?: string): void;
}
export declare abstract class Transport extends EventEmitter {
onConnect(client: T, token: string): void;
onDisconnect(client: T, code: number): void;
abstract get port(): number | undefined;
abstract get proxyPort(): number | undefined;
abstract terminate(): void;
}