tinyroom
Version:
A minimalistic room/lobby system for multiplayer applications. Built on TinyPeer with automatic reconnection support.
53 lines • 1.86 kB
TypeScript
import type { PeerOptions, Connection } from 'tinypeer';
type Peer = {
id: string;
metadata?: unknown;
};
export type HostRoom = {
id: string;
peers: Map<string, Peer>;
on(event: string, handler: (data: unknown, fromId: string, metadata?: unknown) => void): void;
broadcast(event: string, data: unknown, metadata?: unknown): Promise<void>;
sendToPeer(event: string, data: unknown, target: string | string[], metadata?: unknown): Promise<void>;
ping(peerId: string): Promise<number>;
onPeerJoin(handler: (peer: Peer & {
isHost: boolean;
close: (reason?: string) => void;
}) => void): void;
onPeerLeave(handler: (peerId: string) => void): void;
close(): Promise<void>;
};
export type Client = {
id: string;
send(event: string, data: unknown, metadata?: unknown): Promise<void>;
on(event: string, handler: (data: unknown, fromId: string, metadata?: unknown) => void): void;
ping(): Promise<number>;
onClose(handler: (reason: string) => void): void;
onError(handler: (error: Error) => void): void;
leave(): void;
};
export type RoomOptions = {
metadata?: unknown;
persistSession?: boolean;
} & PeerOptions;
export declare function createRoom(roomId: string, options?: RoomOptions): Promise<{
room: HostRoom;
client: Client;
}>;
export declare function joinRoomInternal(roomId: string, options?: RoomOptions & {
connectionTimeout?: number;
}): Promise<{
client: Client;
connection: Connection;
}>;
export declare function joinRoom(roomId: string, options?: RoomOptions & {
connectionTimeout?: number;
}): Promise<Client>;
export declare function joinOrCreateRoom(roomId: string, options?: RoomOptions & {
connectionTimeout?: number;
}): Promise<{
room?: HostRoom;
client: Client;
}>;
export {};
//# sourceMappingURL=room.d.ts.map