UNPKG

@colyseus/core

Version:

Multiplayer Framework for Node.js.

175 lines (162 loc) 4.34 kB
import type { ExtractMessageType } from '@colyseus/shared-types'; import type { Room } from '../Room.ts'; export type RoomMethodName = 'onCreate' | 'onAuth' | 'onJoin' | 'onLeave' | 'onDrop' | 'onReconnect' | 'onDispose' | 'onMessage' | 'setSimulationInterval' | 'setInterval' | 'setTimeout'; export type RoomException<R extends Room = Room> = OnCreateException<R> | OnAuthException<R> | OnJoinException<R> | OnLeaveException<R> | OnDropException<R> | OnReconnectException<R> | OnDisposeException | OnMessageException<R> | SimulationIntervalException | TimedEventException; export class OnCreateException<R extends Room = Room> extends Error { options: Parameters<R['onCreate']>[0]; constructor( cause: Error, message: string, options: Parameters<R['onCreate']>[0], ) { super(message, { cause }); this.name = 'OnCreateException'; this.options = options; } } export class OnAuthException<R extends Room = Room> extends Error { client: Parameters<R['onAuth']>[0]; options: Parameters<R['onAuth']>[1]; constructor( cause: Error, message: string, client: Parameters<R['onAuth']>[0], options: Parameters<R['onAuth']>[1], ) { super(message, { cause }); this.name = 'OnAuthException'; this.client = client; this.options = options; } } export class OnJoinException<R extends Room = Room> extends Error { client: Parameters<R['onJoin']>[0]; options: Parameters<R['onJoin']>[1]; auth: Parameters<R['onJoin']>[2]; constructor( cause: Error, message: string, client: Parameters<R['onJoin']>[0], options: Parameters<R['onJoin']>[1], auth: Parameters<R['onJoin']>[2], ) { super(message, { cause }); this.name = 'OnJoinException'; this.client = client; this.options = options; this.auth = auth; } } export class OnLeaveException<R extends Room = Room> extends Error { client: Parameters<R['onLeave']>[0]; consented: Parameters<R['onLeave']>[1]; constructor( cause: Error, message: string, client: Parameters<R['onLeave']>[0], consented: Parameters<R['onLeave']>[1], ) { super(message, { cause }); this.name = 'OnLeaveException'; this.client = client; this.consented = consented; } } export class OnDropException<R extends Room = Room> extends Error { client: Parameters<R['onDrop']>[0]; code: Parameters<R['onDrop']>[1]; constructor( cause: Error, message: string, client: Parameters<R['onDrop']>[0], code: Parameters<R['onDrop']>[1], ) { super(message, { cause }); this.name = 'OnDropException'; this.client = client; this.code = code; } } export class OnReconnectException<R extends Room = Room> extends Error { client: Parameters<R['onReconnect']>[0]; constructor( cause: Error, message: string, client: Parameters<R['onReconnect']>[0], ) { super(message, { cause }); this.name = 'OnReconnectException'; this.client = client; } } export class OnDisposeException extends Error { constructor( cause: Error, message: string, ) { super(message, { cause }); this.name = 'OnDisposeException'; } } export class OnMessageException<R extends Room, MessageType extends keyof R['messages'] = keyof R['messages']> extends Error { client: R['~client']; payload: ExtractMessageType<R['messages'][MessageType]>; type: MessageType; constructor( cause: Error, message: string, client: R['~client'], payload: ExtractMessageType<R['messages'][MessageType]>, type: MessageType, ) { super(message, { cause }); this.name = 'OnMessageException'; this.client = client; this.payload = payload; this.type = type; } public isType<T extends keyof R['messages']>(type: T): this is OnMessageException<R, T> { return (this.type as string) === type; } } export class SimulationIntervalException extends Error { constructor( cause: Error, message: string, ) { super(message, { cause }); this.name = 'SimulationIntervalException'; } } export class TimedEventException extends Error { public args: any[]; constructor( cause: Error, message: string, ...args: any[] ) { super(message, { cause }); this.name = 'TimedEventException'; this.args = args; } }