import { NetChan, UserCommand, Vec3 } from '@quake2ts/shared'; import { NetworkMessageHandler, EntityState, FrameData, FogData, DamageIndicator } from '../demo/parser.js'; export declare enum ConnectionState { Disconnected = 0, Connecting = 1, Challenge = 2, Connected = 3, Loading = 4, Active = 5 } export type ConnectionEvents = { 'state': (state: ConnectionState) => void; 'frame': (frame: FrameData) => void; 'disconnect': (reason?: string) => void; 'print': (msg: string, level: number) => void; 'centerprint': (msg: string) => void; 'send': (data: Uint8Array) => void; 'serverdata': (data: { protocol: number; serverCount: number; gameDir: string; levelName: string; }) => void; 'stufftext': (text: string) => void; 'error': (err: Error) => void; 'download': (size: number, percent: number, data?: Uint8Array) => void; 'temp_entity': (data: { type: number; pos: Vec3; pos2?: Vec3; dir?: Vec3; cnt?: number; color?: number; ent?: number; }) => void; 'muzzleflash': (ent: number, weapon: number) => void; 'sound': (data: { flags: number; soundNum: number; volume?: number; attenuation?: number; offset?: number; ent?: number; pos?: Vec3; }) => void; 'inventory': (inventory: number[]) => void; }; export interface ClientConnectionOptions { username: string; model: string; skin: string; hand?: number; fov?: number; netchan?: NetChan; } /** * Manages the client-side network protocol state machine. * Decoupled from the transport layer (WebSocket/UDP). */ export declare class ClientConnection implements NetworkMessageHandler { private state; private netchan; private parser; private options; private listeners; serverProtocol: number; serverCount: number; gameDir: string; playerNum: number; levelName: string; configStrings: Map; baselines: Map; entities: Map; latestServerFrame: number; private frameCRCs; private currentPacketCRC; private commandHistory; constructor(options: ClientConnectionOptions); on(event: K, callback: ConnectionEvents[K]): void; off(event: K, callback: ConnectionEvents[K]): void; private emit; /** * Resets the connection state and netchan. * Call this before starting a new connection flow. */ connect(): void; /** * Initiate the connection protocol by sending a challenge request. * Should be called after transport is established. */ startProtocol(): void; disconnect(): void; private cleanup; getState(): ConnectionState; private setState; /** * Process an incoming raw packet from the server. */ handleMessage(data: ArrayBuffer): void; /** * Send a user command (movement) to the server. */ sendUserCommand(cmd: UserCommand): void; private transmit; private sendChallenge; private sendConnect; private sendNew; private sendBegin; onServerData(protocol: number, serverCount: number, attractLoop: number, gameDir: string, playerNum: number, levelName: string): void; onConfigString(index: number, str: string): void; onSpawnBaseline(entity: EntityState): void; onStuffText(msg: string): void; onFrame(frame: FrameData): void; onDisconnect(): void; onPrint(level: number, msg: string): void; onCenterPrint(msg: string): void; onSound(flags: number, soundNum: number, volume?: number, attenuation?: number, offset?: number, ent?: number, pos?: Vec3): void; onTempEntity(type: number, pos: Vec3, pos2?: Vec3, dir?: Vec3, cnt?: number, color?: number, ent?: number, srcEnt?: number, destEnt?: number): void; onInventory(inventory: number[]): void; onMuzzleFlash(ent: number, weapon: number): void; onMuzzleFlash2(ent: number, weapon: number): void; onMuzzleFlash3(ent: number, weapon: number): void; onDownload(size: number, percent: number, data?: Uint8Array): void; onReconnect(): void; onLayout(layout: string): void; onSplitClient(clientNum: number): void; onConfigBlast(index: number, data: Uint8Array): void; onSpawnBaselineBlast(entity: EntityState): void; onLevelRestart(): void; onDamage(indicators: DamageIndicator[]): void; onLocPrint(flags: number, base: string, args: string[]): void; onFog(data: FogData): void; onWaitingForPlayers(count: number): void; onBotChat(msg: string): void; onPoi(flags: number, pos: Vec3): void; onHelpPath(pos: Vec3): void; onAchievement(id: string): void; } //# sourceMappingURL=clientConnection.d.ts.map