UNPKG

@esengine/network-shared

Version:

ECS Framework网络层 - 共享组件和协议

2,443 lines (2,426 loc) 116 kB
/** * @esengine/network-shared v1.0.7 * TypeScript definitions */ import { Component, Emitter } from '@esengine/ecs-framework'; /** * 网络层核心类型定义 */ /** * 网络消息类型枚举 */ declare enum MessageType { CONNECT = "connect", DISCONNECT = "disconnect", HEARTBEAT = "heartbeat", SYNC_VAR = "sync_var", SYNC_BATCH = "sync_batch", SYNC_SNAPSHOT = "sync_snapshot", RPC_CALL = "rpc_call", RPC_RESPONSE = "rpc_response", ENTITY_CREATE = "entity_create", ENTITY_DESTROY = "entity_destroy", ENTITY_UPDATE = "entity_update", JOIN_ROOM = "join_room", LEAVE_ROOM = "leave_room", ROOM_STATE = "room_state", GAME_EVENT = "game_event", ERROR = "error", WARNING = "warning", INFO = "info" } /** * 网络消息基础接口 */ interface INetworkMessage { /** 消息类型 */ type: MessageType; /** 消息唯一ID */ messageId: string; /** 时间戳 */ timestamp: number; /** 发送者ID */ senderId: string; /** 消息数据 */ data: any; /** 是否可靠传输 */ reliable?: boolean; /** 消息优先级 */ priority?: number; } /** * 同步权限类型 */ declare enum AuthorityType { /** 服务端权限 */ Server = "server", /** 客户端权限 */ Client = "client", /** 共享权限 */ Shared = "shared" } /** * 网络作用域 */ declare enum NetworkScope { /** 全局可见 */ Global = "global", /** 房间内可见 */ Room = "room", /** 仅拥有者可见 */ Owner = "owner", /** 附近玩家可见 */ Nearby = "nearby", /** 自定义作用域 */ Custom = "custom" } /** * 同步模式 */ declare enum SyncMode { /** 同步给所有客户端 */ All = "all", /** 只同步给拥有者 */ Owner = "owner", /** 同步给除拥有者外的客户端 */ Others = "others", /** 同步给附近的客户端 */ Nearby = "nearby", /** 自定义同步逻辑 */ Custom = "custom" } /** * RPC目标 */ declare enum RpcTarget { /** 服务端 */ Server = "server", /** 客户端 */ Client = "client", /** 所有客户端 */ All = "all", /** 除发送者外的客户端 */ Others = "others", /** 拥有者客户端 */ Owner = "owner", /** 附近的客户端 */ Nearby = "nearby" } /** * 客户端信息 */ interface IClientInfo { /** 客户端ID */ id: string; /** 客户端名称 */ name: string; /** 加入时间 */ joinTime: number; /** 是否已认证 */ authenticated: boolean; /** 延迟(毫秒) */ latency?: number; /** 自定义数据 */ userData?: Record<string, any>; } /** * 房间信息 */ interface IRoomInfo { /** 房间ID */ id: string; /** 房间名称 */ name: string; /** 当前玩家数量 */ playerCount: number; /** 最大玩家数量 */ maxPlayers: number; /** 房间状态 */ state: RoomState; /** 自定义数据 */ metadata?: Record<string, any>; } /** * 房间状态 */ declare enum RoomState { /** 等待中 */ Waiting = "waiting", /** 游戏中 */ Playing = "playing", /** 已暂停 */ Paused = "paused", /** 已结束 */ Finished = "finished" } /** * 网络统计信息 */ interface INetworkStats { /** 总发送字节数 */ bytesSent: number; /** 总接收字节数 */ bytesReceived: number; /** 发送消息数 */ messagesSent: number; /** 接收消息数 */ messagesReceived: number; /** 平均延迟 */ averageLatency: number; /** 丢包率 */ packetLoss: number; /** 连接时长 */ connectionTime: number; } /** * 向量2D */ interface IVector2 { x: number; y: number; } /** * 向量3D */ interface IVector3 extends IVector2 { z: number; } /** * 四元数 */ interface IQuaternion { x: number; y: number; z: number; w: number; } /** * 变换信息 */ interface ITransform { position: IVector3; rotation: IQuaternion; scale: IVector3; } /** * 网络错误类型 */ declare enum NetworkErrorType { CONNECTION_FAILED = "connection_failed", CONNECTION_LOST = "connection_lost", AUTHENTICATION_FAILED = "authentication_failed", PERMISSION_DENIED = "permission_denied", RATE_LIMITED = "rate_limited", INVALID_MESSAGE = "invalid_message", TIMEOUT = "timeout", UNKNOWN = "unknown" } /** * 网络错误信息 */ interface INetworkError { type: NetworkErrorType; message: string; code?: number; details?: any; timestamp: number; } /** * 传输层接口定义 */ /** * 传输层抽象接口 */ interface ITransport { /** * 启动传输层 * @param port - 端口号 * @param host - 主机地址 */ start(port: number, host?: string): Promise<void>; /** * 停止传输层 */ stop(): Promise<void>; /** * 发送数据到指定客户端 * @param clientId - 客户端ID * @param data - 数据 */ send(clientId: string, data: ArrayBuffer | string): void; /** * 广播数据到所有客户端 * @param data - 数据 * @param exclude - 排除的客户端ID列表 */ broadcast(data: ArrayBuffer | string, exclude?: string[]): void; /** * 监听客户端连接事件 * @param handler - 处理函数 */ onConnect(handler: (clientInfo: ITransportClientInfo) => void): void; /** * 监听客户端断开事件 * @param handler - 处理函数 */ onDisconnect(handler: (clientId: string, reason?: string) => void): void; /** * 监听消息接收事件 * @param handler - 处理函数 */ onMessage(handler: (clientId: string, data: ArrayBuffer | string) => void): void; /** * 监听错误事件 * @param handler - 处理函数 */ onError(handler: (error: Error) => void): void; /** * 获取连接的客户端数量 */ getClientCount(): number; /** * 检查客户端是否连接 * @param clientId - 客户端ID */ isClientConnected(clientId: string): boolean; /** * 断开指定客户端 * @param clientId - 客户端ID * @param reason - 断开原因 */ disconnectClient(clientId: string, reason?: string): void; } /** * 客户端传输层接口 */ interface IClientTransport { /** * 连接到服务器 * @param url - 服务器URL * @param options - 连接选项 */ connect(url: string, options?: IConnectionOptions): Promise<void>; /** * 断开连接 * @param reason - 断开原因 */ disconnect(reason?: string): Promise<void>; /** * 发送数据到服务器 * @param data - 数据 */ send(data: ArrayBuffer | string): void; /** * 监听服务器消息 * @param handler - 处理函数 */ onMessage(handler: (data: ArrayBuffer | string) => void): void; /** * 监听连接状态变化 * @param handler - 处理函数 */ onConnectionStateChange(handler: (state: ConnectionState) => void): void; /** * 监听错误事件 * @param handler - 处理函数 */ onError(handler: (error: Error) => void): void; /** * 获取连接状态 */ getConnectionState(): ConnectionState; /** * 获取连接统计信息 */ getStats(): IConnectionStats; } /** * 传输层客户端信息 */ interface ITransportClientInfo { /** 客户端ID */ id: string; /** 远程地址 */ remoteAddress: string; /** 连接时间 */ connectTime: number; /** 用户代理 */ userAgent?: string; /** 自定义头信息 */ headers?: Record<string, string>; } /** * 连接选项 */ interface IConnectionOptions { /** 连接超时时间(毫秒) */ timeout?: number; /** 重连间隔(毫秒) */ reconnectInterval?: number; /** 最大重连次数 */ maxReconnectAttempts?: number; /** 是否自动重连 */ autoReconnect?: boolean; /** 自定义头信息 */ headers?: Record<string, string>; /** 协议版本 */ protocolVersion?: string; } /** * 连接状态 */ declare enum ConnectionState { /** 断开连接 */ Disconnected = "disconnected", /** 连接中 */ Connecting = "connecting", /** 已连接 */ Connected = "connected", /** 重连中 */ Reconnecting = "reconnecting", /** 连接失败 */ Failed = "failed" } /** * 连接统计信息 */ interface IConnectionStats { /** 连接状态 */ state: ConnectionState; /** 连接时间 */ connectTime?: number; /** 断开时间 */ disconnectTime?: number; /** 重连次数 */ reconnectCount: number; /** 发送字节数 */ bytesSent: number; /** 接收字节数 */ bytesReceived: number; /** 发送消息数 */ messagesSent: number; /** 接收消息数 */ messagesReceived: number; /** 延迟(毫秒) */ latency?: number; } /** * SSL配置 */ interface SSLConfig { enabled: boolean; cert?: string; key?: string; } /** * 传输层配置 */ interface ITransportConfig { /** 端口号 */ port: number; /** 主机地址 */ host?: string; /** 最大连接数 */ maxConnections?: number; /** 心跳间隔(毫秒) */ heartbeatInterval?: number; /** 连接超时时间(毫秒) */ connectionTimeout?: number; /** 消息最大大小(字节) */ maxMessageSize?: number; /** 是否启用压缩 */ compression?: boolean; /** SSL配置 */ ssl?: SSLConfig; } /** * RPC调用配置 */ interface RpcOptions { /** 是否可靠传输 */ reliable?: boolean; /** 调用优先级 0-10,10为最高 */ priority?: number; /** 调用目标 */ target?: RpcTarget; /** 超时时间(毫秒) */ timeout?: number; /** 是否需要身份验证 */ requireAuth?: boolean; /** 调用频率限制(每秒) */ rateLimit?: number; } /** * RPC方法元数据 */ interface RpcMethodMetadata { /** 方法名 */ methodName: string; /** 所属类名 */ className: string; /** 是否为服务端RPC */ isServerRpc: boolean; /** RPC配置 */ options: RpcOptions; /** 参数类型 */ paramTypes: string[]; /** 返回值类型 */ returnType: string; } /** * RPC调用请求 */ interface RpcCallRequest<T extends readonly unknown[] = readonly unknown[]> { /** 调用ID */ callId: string; /** 方法名 */ methodName: string; /** 调用参数 */ args: T; /** 发送者ID */ senderId: string; /** 目标ID(可选,用于特定客户端调用) */ targetId?: string; /** 调用时间戳 */ timestamp: number; /** 调用配置 */ options: RpcOptions; } /** * RPC调用响应 */ interface RpcCallResponse<T = unknown> { /** 调用ID */ callId: string; /** 是否成功 */ success: boolean; /** 返回值 */ result?: T; /** 错误信息 */ error?: RpcError; /** 响应时间戳 */ timestamp: number; /** 处理时长(毫秒) */ duration: number; } /** * RPC错误类型 */ declare enum RpcErrorType { /** 方法不存在 */ METHOD_NOT_FOUND = "method_not_found", /** 参数无效 */ INVALID_ARGUMENTS = "invalid_arguments", /** 权限不足 */ PERMISSION_DENIED = "permission_denied", /** 调用超时 */ TIMEOUT = "timeout", /** 速率限制 */ RATE_LIMITED = "rate_limited", /** 网络错误 */ NETWORK_ERROR = "network_error", /** 服务端错误 */ SERVER_ERROR = "server_error", /** 客户端错误 */ CLIENT_ERROR = "client_error", /** 未知错误 */ UNKNOWN = "unknown" } /** * RPC错误信息 */ interface RpcError { /** 错误类型 */ type: RpcErrorType; /** 错误消息 */ message: string; /** 错误代码 */ code?: number; /** 详细信息 */ details?: Record<string, unknown>; /** 堆栈信息 */ stack?: string; } /** * RPC调用状态 */ declare enum RpcCallStatus { /** 待发送 */ PENDING = "pending", /** 已发送 */ SENT = "sent", /** 处理中 */ PROCESSING = "processing", /** 已完成 */ COMPLETED = "completed", /** 已失败 */ FAILED = "failed", /** 已超时 */ TIMEOUT = "timeout", /** 已取消 */ CANCELLED = "cancelled" } /** * RPC调用信息 */ interface RpcCallInfo<T extends readonly unknown[] = readonly unknown[]> { /** 调用请求 */ request: RpcCallRequest<T>; /** 调用状态 */ status: RpcCallStatus; /** Promise解析器 */ resolve?: (value: unknown) => void; /** Promise拒绝器 */ reject?: (reason: RpcError) => void; /** 重试次数 */ retryCount: number; /** 下次重试时间 */ nextRetryTime?: number; /** 创建时间 */ createdAt: number; /** 发送时间 */ sentAt?: number; /** 完成时间 */ completedAt?: number; } /** * RPC统计信息 */ interface RpcStats { /** 总调用次数 */ totalCalls: number; /** 成功调用次数 */ successfulCalls: number; /** 失败调用次数 */ failedCalls: number; /** 平均响应时间(毫秒) */ averageResponseTime: number; /** 当前等待中的调用数 */ pendingCalls: number; /** 超时调用次数 */ timeoutCalls: number; /** 重试次数 */ retryCount: number; /** 最后更新时间 */ lastUpdated: number; } /** * RPC方法签名类型 */ type RpcMethod<TArgs extends readonly unknown[] = readonly unknown[], TReturn = unknown> = (...args: TArgs) => Promise<TReturn>; /** * RPC方法注册表类型 */ type RpcMethodRegistry = Map<string, { metadata: RpcMethodMetadata; handler: RpcMethod; }>; /** * 客户端RPC调用接口类型 */ type ClientRpcInvoker = <TArgs extends readonly unknown[], TReturn>(methodName: string, args: TArgs, options?: Partial<RpcOptions>) => Promise<TReturn>; /** * 服务端RPC调用接口类型 */ type ServerRpcInvoker = <TArgs extends readonly unknown[], TReturn>(clientId: string, methodName: string, args: TArgs, options?: Partial<RpcOptions>) => Promise<TReturn>; /** * 网络消息协议定义 */ /** * 3D位置信息 */ interface Position3D { x: number; y: number; z?: number; } /** * 组件数据 */ interface ComponentData { type: string; data: any; } /** * 客户端信息 */ interface ClientInfo { name: string; version: string; platform: string; } /** * 服务器信息 */ interface ServerInfo { name: string; version: string; maxPlayers: number; currentPlayers: number; } /** * 玩家信息 */ interface PlayerInfo { playerId: string; playerName: string; } /** * 连接数据 */ interface ConnectData { clientVersion: string; protocolVersion: string; authToken?: string; clientInfo: ClientInfo; } /** * 连接响应数据 */ interface ConnectResponseData { success: boolean; clientId?: string; error?: string; serverInfo?: ServerInfo; } /** * 断开连接数据 */ interface DisconnectData { reason: string; code: number; } /** * 心跳数据 */ interface HeartbeatData { clientTime: number; serverTime?: number; } /** * RPC请求数据 */ interface RpcRequestData { callId: string; methodName: string; target: RpcTarget; args: any[]; timeout?: number; } /** * 实体创建数据 */ interface EntityCreateData { entityId: string; entityType: string; ownerId: string; authority: AuthorityType; components: ComponentData[]; position?: Position3D; } /** * 实体销毁数据 */ interface EntityDestroyData { entityId: string; reason?: string; } /** * 组件同步数据 */ interface ComponentSyncData { entityId: string; componentType: string; syncMode: SyncMode; data: any; timestamp: number; } /** * 状态同步数据 */ interface StateSyncData { entityId: string; stateData: any; timestamp: number; } /** * 聊天数据 */ interface ChatData { playerId: string; message: string; timestamp: number; playerInfo?: PlayerInfo; } /** * 加入房间数据 */ interface JoinRoomData { roomId: string; playerInfo: PlayerInfo; } /** * 离开房间数据 */ interface LeaveRoomData { roomId: string; reason?: string; } /** * 玩家加入数据 */ interface PlayerJoinedData { playerId: string; playerName: string; roomId: string; } /** * 玩家离开数据 */ interface PlayerLeftData { playerId: string; roomId: string; reason?: string; } /** * 自定义数据 */ interface CustomData { eventType: string; data: any; timestamp: number; } /** * 错误数据 */ interface ErrorData { code: string; message: string; details?: any; relatedMessageId?: string; } /** * 连接请求消息 */ interface IConnectMessage extends INetworkMessage { type: MessageType.CONNECT; data: ConnectData; } /** * 连接响应消息 */ interface IConnectResponseMessage extends INetworkMessage { type: MessageType.CONNECT; data: ConnectResponseData; } /** * 心跳消息 */ interface IHeartbeatMessage extends INetworkMessage { type: MessageType.HEARTBEAT; data: HeartbeatData; } /** * 同步变量消息 */ interface ISyncVarMessage extends INetworkMessage { type: MessageType.SYNC_VAR; data: { /** 网络实体ID */ networkId: number; /** 组件类型名称 */ componentType: string; /** 变化的属性 */ changes: Record<string, any>; /** 同步模式 */ syncMode: SyncMode; /** 时间戳 */ timestamp: number; }; } /** * 批量同步消息 */ interface ISyncBatchMessage extends INetworkMessage { type: MessageType.SYNC_BATCH; data: { /** 同步数据列表 */ syncData: Array<{ networkId: number; componentType: string; changes: Record<string, any>; syncMode: SyncMode; }>; /** 批次时间戳 */ batchTimestamp: number; }; } /** * RPC调用消息 */ interface IRpcCallMessage extends INetworkMessage { type: MessageType.RPC_CALL; data: { /** 网络实体ID */ networkId: number; /** 组件类型名称 */ componentType: string; /** 方法名 */ methodName: string; /** 参数列表 */ args: any[]; /** 调用ID(用于响应匹配) */ callId?: string; /** RPC目标 */ target: RpcTarget; /** 是否需要响应 */ expectResponse?: boolean; /** 超时时间 */ timeout?: number; }; } /** * RPC响应数据 */ interface RpcResponseData { /** 调用ID */ callId: string; /** 是否成功 */ success: boolean; /** 返回值 */ result?: any; /** 错误信息 */ error?: string; } /** * RPC响应消息 */ interface IRpcResponseMessage extends INetworkMessage { type: MessageType.RPC_RESPONSE; data: RpcResponseData; } /** * 实体创建消息 */ interface IEntityCreateMessage extends INetworkMessage { type: MessageType.ENTITY_CREATE; data: { /** 网络实体ID */ networkId: number; /** 实体名称 */ entityName: string; /** 拥有者ID */ ownerId: string; /** 权限类型 */ authority: AuthorityType; /** 初始组件数据 */ components: ComponentData[]; /** 位置信息 */ position?: Position3D; }; } /** * 实体销毁消息 */ interface IEntityDestroyMessage extends INetworkMessage { type: MessageType.ENTITY_DESTROY; data: { /** 网络实体ID */ networkId: number; /** 销毁原因 */ reason?: string; }; } /** * 加入房间消息 */ interface IJoinRoomMessage extends INetworkMessage { type: MessageType.JOIN_ROOM; data: { /** 房间ID */ roomId: string; /** 密码(如果需要) */ password?: string; /** 玩家信息 */ playerInfo?: { name: string; avatar?: string; customData?: Record<string, any>; }; }; } /** * 离开房间消息 */ interface ILeaveRoomMessage extends INetworkMessage { type: MessageType.LEAVE_ROOM; data: LeaveRoomData; } /** * 房间状态消息 */ interface IRoomStateMessage extends INetworkMessage { type: MessageType.ROOM_STATE; data: { /** 房间ID */ roomId: string; /** 房间状态 */ state: string; /** 玩家列表 */ players: Array<{ id: string; name: string; isHost: boolean; customData?: Record<string, any>; }>; /** 房间设置 */ settings?: Record<string, any>; }; } /** * 游戏事件消息 */ interface IGameEventMessage extends INetworkMessage { type: MessageType.GAME_EVENT; data: { /** 事件类型 */ eventType: string; /** 事件数据 */ eventData: any; /** 目标客户端 */ target?: RpcTarget; /** 事件优先级 */ priority?: number; }; } /** * 错误消息 */ interface IErrorMessage extends INetworkMessage { type: MessageType.ERROR; data: ErrorData; } /** * 消息类型联合 */ type NetworkMessage = IConnectMessage | IConnectResponseMessage | IHeartbeatMessage | ISyncVarMessage | ISyncBatchMessage | IRpcCallMessage | IRpcResponseMessage | IEntityCreateMessage | IEntityDestroyMessage | IJoinRoomMessage | ILeaveRoomMessage | IRoomStateMessage | IGameEventMessage | IErrorMessage; /** * 消息ID生成器类型 */ declare enum MessageIdGeneratorType { UUID = "uuid", SNOWFLAKE = "snowflake", SEQUENTIAL = "sequential", TIMESTAMP = "timestamp" } /** * 消息创建选项 */ interface MessageCreateOptions { reliable?: boolean; priority?: number; timestamp?: number; } /** * 消息管理器配置 */ interface MessageManagerConfig { idGenerator: MessageIdGeneratorType; enableTimestampValidation: boolean; maxTimestampDrift: number; enableMessageDeduplication: boolean; deduplicationWindowMs: number; enableMessageOrdering: boolean; orderingWindowMs: number; maxPendingMessages: number; } /** * 消息验证结果 */ interface MessageValidationResult { isValid: boolean; errors: string[]; warnings: string[]; } /** * 消息统计信息 */ interface MessageStats { totalGenerated: number; totalValidated: number; validMessages: number; invalidMessages: number; duplicateMessages: number; outOfOrderMessages: number; timestampErrors: number; } /** * 消息管理器 */ declare class MessageManager { private logger; private config; private stats; private sequentialId; private snowflakeGenerator; private recentMessageIds; private pendingMessages; private messageSequence; private cleanupTimer?; /** * 构造函数 */ constructor(config?: Partial<MessageManagerConfig>); /** * 生成消息ID */ generateMessageId(): string; /** * 创建网络消息 */ createMessage<T extends INetworkMessage>(type: MessageType, data: any, senderId: string, options?: MessageCreateOptions): T; /** * 验证消息 */ validateMessage(message: INetworkMessage, senderId?: string): MessageValidationResult; /** * 处理消息排序 */ processMessageOrdering(message: INetworkMessage): INetworkMessage[]; /** * 获取统计信息 */ getStats(): MessageStats; /** * 重置统计信息 */ resetStats(): void; /** * 更新配置 */ updateConfig(newConfig: Partial<MessageManagerConfig>): void; /** * 销毁管理器 */ destroy(): void; /** * 生成UUID */ private generateUUID; /** * 刷新待处理消息 */ private flushPendingMessages; /** * 清理过期的待处理消息 */ private cleanupOldPendingMessages; /** * 启动清理定时器 */ private startCleanupTimer; /** * 执行清理操作 */ private performCleanup; /** * 获取消息处理报告 */ getProcessingReport(): { stats: MessageStats; validationRate: number; duplicateRate: number; pendingMessagesCount: number; cachedMessageIdsCount: number; recommendation: string; }; /** * 生成优化建议 */ private generateRecommendation; /** * 批量验证消息 */ validateMessageBatch(messages: INetworkMessage[], senderId?: string): MessageValidationResult[]; /** * 获取消息年龄(毫秒) */ getMessageAge(message: INetworkMessage): number; /** * 检查消息是否过期 */ isMessageExpired(message: INetworkMessage, maxAge?: number): boolean; } /** * 网络事件类型枚举 * 定义网络层中的所有事件类型 */ declare enum NetworkEventType { CONNECTION_ESTABLISHED = "network:connection:established", CONNECTION_LOST = "network:connection:lost", CONNECTION_ERROR = "network:connection:error", CONNECTION_TIMEOUT = "network:connection:timeout", RECONNECTION_STARTED = "network:reconnection:started", RECONNECTION_SUCCEEDED = "network:reconnection:succeeded", RECONNECTION_FAILED = "network:reconnection:failed", IDENTITY_CREATED = "network:identity:created", IDENTITY_DESTROYED = "network:identity:destroyed", IDENTITY_OWNER_CHANGED = "network:identity:owner:changed", IDENTITY_AUTHORITY_CHANGED = "network:identity:authority:changed", IDENTITY_SYNC_ENABLED = "network:identity:sync:enabled", IDENTITY_SYNC_DISABLED = "network:identity:sync:disabled", IDENTITY_PROPERTY_CHANGED = "network:identity:property:changed", IDENTITY_VISIBLE_CHANGED = "network:identity:visible:changed", SYNC_STARTED = "network:sync:started", SYNC_COMPLETED = "network:sync:completed", SYNC_FAILED = "network:sync:failed", SYNC_RATE_CHANGED = "network:sync:rate:changed", SYNC_PRIORITY_CHANGED = "network:sync:priority:changed", RPC_CALL_SENT = "network:rpc:call:sent", RPC_CALL_RECEIVED = "network:rpc:call:received", RPC_RESPONSE_SENT = "network:rpc:response:sent", RPC_RESPONSE_RECEIVED = "network:rpc:response:received", RPC_ERROR = "network:rpc:error", RPC_TIMEOUT = "network:rpc:timeout", MESSAGE_SENT = "network:message:sent", MESSAGE_RECEIVED = "network:message:received", MESSAGE_QUEUED = "network:message:queued", MESSAGE_DROPPED = "network:message:dropped", MESSAGE_RETRY = "network:message:retry", MESSAGE_ACKNOWLEDGED = "network:message:acknowledged", ROOM_JOINED = "network:room:joined", ROOM_LEFT = "network:room:left", ROOM_CREATED = "network:room:created", ROOM_DESTROYED = "network:room:destroyed", ROOM_PLAYER_JOINED = "network:room:player:joined", ROOM_PLAYER_LEFT = "network:room:player:left", CLIENT_CONNECTED = "network:client:connected", CLIENT_DISCONNECTED = "network:client:disconnected", CLIENT_AUTHENTICATED = "network:client:authenticated", CLIENT_KICKED = "network:client:kicked", CLIENT_TIMEOUT = "network:client:timeout", SERVER_STARTED = "network:server:started", SERVER_STOPPED = "network:server:stopped", SERVER_ERROR = "network:server:error", SERVER_OVERLOADED = "network:server:overloaded", DATA_SYNCHRONIZED = "network:data:synchronized", DATA_CONFLICT = "network:data:conflict", DATA_CORRUPTED = "network:data:corrupted", DATA_VALIDATED = "network:data:validated", BANDWIDTH_WARNING = "network:bandwidth:warning", LATENCY_HIGH = "network:latency:high", PACKET_LOSS_DETECTED = "network:packet:loss:detected", PERFORMANCE_DEGRADED = "network:performance:degraded" } /** * 网络事件优先级 */ declare enum NetworkEventPriority { LOW = 10, NORMAL = 20, HIGH = 30, CRITICAL = 40, EMERGENCY = 50 } /** * 网络事件数据基础接口 */ interface NetworkEventData { timestamp: number; networkId?: number; clientId?: string; roomId?: string; [key: string]: any; } /** * 网络身份事件数据 */ interface NetworkIdentityEventData extends NetworkEventData { networkId: number; ownerId: string; oldValue?: any; newValue?: any; } /** * RPC事件数据 */ interface RpcEventData extends NetworkEventData { rpcId: string; methodName: string; parameters?: any[]; result?: any; error?: string; } /** * 消息事件数据 */ interface MessageEventData extends NetworkEventData { messageId: string; messageType: string; payload: any; reliable: boolean; size: number; } /** * 连接事件数据 */ interface ConnectionEventData extends NetworkEventData { clientId: string; address?: string; reason?: string; reconnectAttempt?: number; } /** * 房间事件数据 */ interface RoomEventData extends NetworkEventData { roomId: string; playerId?: string; playerCount?: number; maxPlayers?: number; } /** * 性能事件数据 */ interface PerformanceEventData extends NetworkEventData { metric: string; value: number; threshold?: number; duration?: number; } /** * 网络事件工具类 */ declare class NetworkEventUtils { /** * 创建网络身份事件数据 */ static createIdentityEventData(networkId: number, ownerId: string, oldValue?: any, newValue?: any): NetworkIdentityEventData; /** * 创建RPC事件数据 */ static createRpcEventData(rpcId: string, methodName: string, clientId?: string, parameters?: any[], result?: any, error?: string): RpcEventData; /** * 创建消息事件数据 */ static createMessageEventData(messageId: string, messageType: string, payload: any, reliable?: boolean, clientId?: string): MessageEventData; /** * 创建连接事件数据 */ static createConnectionEventData(clientId: string, address?: string, reason?: string, reconnectAttempt?: number): ConnectionEventData; /** * 创建房间事件数据 */ static createRoomEventData(roomId: string, playerId?: string, playerCount?: number, maxPlayers?: number): RoomEventData; /** * 创建性能事件数据 */ static createPerformanceEventData(metric: string, value: number, threshold?: number, duration?: number, clientId?: string): PerformanceEventData; } /** * 网络身份组件 */ /** * 网络身份组件 * * 为实体提供网络同步能力的核心组件。 * 每个需要网络同步的实体都必须拥有此组件。 * * 集成了事件系统,当属性变化时自动发射事件用于网络同步。 */ declare class NetworkIdentity extends Component { /** * 事件发射器 * 用于发射网络相关事件 */ private eventEmitter; /** * 网络ID (全局唯一) * 用于在网络中标识实体 */ networkId: number; /** * 拥有者ID * 表示哪个客户端拥有此实体的控制权 */ ownerId: string; /** * 权限类型 * 决定哪一端对此实体有控制权 */ authority: AuthorityType; /** * 同步频率 (Hz) * 每秒同步的次数 */ syncRate: number; /** * 网络作用域 * 决定哪些客户端可以看到此实体 */ scope: NetworkScope; /** * 是否是本地玩家 * 标识此实体是否代表本地玩家 */ isLocalPlayer: boolean; /** * 是否启用网络同步 * 临时禁用/启用同步 */ syncEnabled: boolean; /** * 同步优先级 * 影响同步的顺序和频率,数值越高优先级越高 */ priority: number; /** * 距离阈值 * 用于附近同步模式,超过此距离的客户端不会收到同步 */ distanceThreshold: number; /** * 最后同步时间 * 记录上次同步的时间戳 */ lastSyncTime: number; /** * 是否可见 * 控制实体是否对其他客户端可见 */ visible: boolean; /** * 自定义同步过滤器 * 用于自定义作用域的同步逻辑 */ customSyncFilter?: (clientId: string) => boolean; /** * 获取实体的同步权重 * 基于优先级和距离计算 */ getSyncWeight(distance?: number): number; /** * 检查是否应该同步给指定客户端 */ shouldSyncToClient(clientId: string, distance?: number): boolean; /** * 检查客户端是否有权限修改此实体 */ hasAuthority(clientId: string): boolean; /** * 设置拥有者 */ setOwner(clientId: string): void; /** * 设置权限类型 */ setAuthority(authority: AuthorityType): void; /** * 设置同步状态 */ setSyncEnabled(enabled: boolean): void; /** * 设置同步频率 */ setSyncRate(rate: number): void; /** * 添加事件监听器 */ addEventListener(eventType: NetworkEventType, handler: (data: NetworkIdentityEventData) => void): void; /** * 移除事件监听器 */ removeEventListener(eventType: NetworkEventType, handler: (data: NetworkIdentityEventData) => void): void; /** * 发射事件 * @private */ private emitEvent; /** * 监听属性变化事件 */ onPropertyChanged(handler: (data: NetworkIdentityEventData) => void): void; /** * 监听拥有者变化事件 */ onOwnerChanged(handler: (data: NetworkIdentityEventData) => void): void; /** * 监听权限变化事件 */ onAuthorityChanged(handler: (data: NetworkIdentityEventData) => void): void; /** * 监听同步状态变化事件 */ onSyncStateChanged(handler: (data: NetworkIdentityEventData) => void): void; /** * 获取调试信息 */ getDebugInfo(): Record<string, any>; /** * 组件销毁时清理事件监听器 */ dispose(): void; } /** * 心跳配置 */ interface HeartbeatConfig { interval: number; timeout: number; maxMissedHeartbeats: number; enableLatencyMeasurement: boolean; } /** * 心跳状态 */ interface HeartbeatStatus { isHealthy: boolean; lastHeartbeat: number; latency?: number; missedHeartbeats: number; averageLatency?: number; packetLoss?: number; } /** * 心跳事件接口 */ interface HeartbeatEvents { heartbeatSent: (timestamp: number) => void; heartbeatReceived: (latency: number) => void; heartbeatTimeout: (missedCount: number) => void; healthStatusChanged: (isHealthy: boolean) => void; } /** * 心跳消息接口 */ interface HeartbeatMessage { type: MessageType.HEARTBEAT; clientTime: number; serverTime?: number; sequence?: number; } /** * 心跳管理器 */ declare class HeartbeatManager { private logger; private config; private status; private eventHandlers; private heartbeatTimer?; private timeoutTimer?; private pendingPings; private latencyHistory; private sequence; private sentCount; private receivedCount; /** * 发送心跳回调 */ private sendHeartbeat?; /** * 构造函数 */ constructor(config?: Partial<HeartbeatConfig>); /** * 启动心跳 */ start(sendCallback: (message: HeartbeatMessage) => void): void; /** * 停止心跳 */ stop(): void; /** * 处理接收到的心跳响应 */ handleHeartbeatResponse(message: HeartbeatMessage): void; /** * 处理心跳超时 */ handleHeartbeatTimeout(): void; /** * 获取心跳状态 */ getStatus(): HeartbeatStatus; /** * 获取统计信息 */ getStats(): { sentCount: number; receivedCount: number; packetLoss: number; averageLatency: number | undefined; currentLatency: number | undefined; isHealthy: boolean; missedHeartbeats: number; latencyHistory: number[]; }; /** * 设置事件处理器 */ on<K extends keyof HeartbeatEvents>(event: K, handler: HeartbeatEvents[K]): void; /** * 移除事件处理器 */ off<K extends keyof HeartbeatEvents>(event: K): void; /** * 手动发送心跳 */ sendHeartbeatNow(): void; /** * 更新配置 */ updateConfig(newConfig: Partial<HeartbeatConfig>): void; /** * 启动心跳定时器 */ private startHeartbeatTimer; /** * 停止心跳定时器 */ private stopHeartbeatTimer; /** * 启动超时定时器 */ private startTimeoutTimer; /** * 停止超时定时器 */ private stopTimeoutTimer; /** * 执行发送心跳 */ private doSendHeartbeat; /** * 更新延迟信息 */ private updateLatency; /** * 更新健康状态 */ private updateHealthStatus; /** * 清理过期的pending pings */ private cleanupPendingPings; /** * 重置统计信息 */ resetStats(): void; /** * 检查连接是否健康 */ isConnectionHealthy(): boolean; /** * 获取建议的重连延迟 */ getReconnectDelay(): number; } /** * 错误趋势分析结果 */ interface ErrorTrendAnalysis { trend: string; recommendation: string; } /** * 错误严重级别 */ declare enum ErrorSeverity { Low = "low",// 低级错误,可以忽略 Medium = "medium",// 中级错误,需要记录但不影响功能 High = "high",// 高级错误,影响功能但可以恢复 Critical = "critical" } /** * 错误恢复策略 */ declare enum RecoveryStrategy { Ignore = "ignore",// 忽略错误 Retry = "retry",// 重试操作 Reconnect = "reconnect",// 重新连接 Restart = "restart",// 重启服务 Escalate = "escalate" } /** * 错误处理配置 */ interface ErrorHandlerConfig { maxRetryAttempts: number; retryDelay: number; enableAutoRecovery: boolean; enableErrorReporting: boolean; errorReportingEndpoint?: string; } /** * 错误统计信息 */ interface ErrorStats { totalErrors: number; errorsByType: Record<NetworkErrorType, number>; errorsBySeverity: Record<ErrorSeverity, number>; recoveredErrors: number; unrecoveredErrors: number; lastError?: INetworkError; } /** * 错误处理事件 */ interface ErrorHandlerEvents { errorOccurred: (error: INetworkError, severity: ErrorSeverity) => void; errorRecovered: (error: INetworkError, strategy: RecoveryStrategy) => void; errorUnrecoverable: (error: INetworkError) => void; criticalError: (error: INetworkError) => void; } /** * 网络错误处理器 */ declare class ErrorHandler { private logger; private config; private stats; private eventHandlers; private retryAttempts; private pendingRecoveries; private severityRules; private recoveryRules; /** * 构造函数 */ constructor(config?: Partial<ErrorHandlerConfig>); /** * 处理错误 */ handleError(error: Error | INetworkError, context?: string): void; /** * 设置错误分类规则 */ setErrorSeverityRule(errorType: NetworkErrorType, severity: ErrorSeverity): void; /** * 设置错误恢复策略 */ setRecoveryStrategy(errorType: NetworkErrorType, strategy: RecoveryStrategy): void; /** * 获取错误统计 */ getStats(): ErrorStats; /** * 重置统计信息 */ resetStats(): void; /** * 设置事件处理器 */ on<K extends keyof ErrorHandlerEvents>(event: K, handler: ErrorHandlerEvents[K]): void; /** * 移除事件处理器 */ off<K extends keyof ErrorHandlerEvents>(event: K): void; /** * 更新配置 */ updateConfig(newConfig: Partial<ErrorHandlerConfig>): void; /** * 手动标记错误已恢复 */ markErrorRecovered(errorId: string): void; /** * 检查错误是否可恢复 */ isRecoverable(errorType: NetworkErrorType): boolean; /** * 标准化错误对象 */ private normalizeError; /** * 确定错误类型 */ private determineErrorType; /** * 分类错误严重程度 */ private classifyErrorSeverity; /** * 更新统计信息 */ private updateStats; /** * 尝试错误恢复 */ private attemptRecovery; /** * 执行恢复策略 */ private executeRecoveryStrategy; /** * 报告错误 */ private reportError; /** * 生成错误ID */ private generateErrorId; /** * 初始化默认规则 */ private initializeDefaultRules; /** * 获取错误趋势分析 */ getErrorTrends(): ErrorTrendAnalysis; } /** * 序列化器配置 */ interface SerializerConfig { enableTypeChecking: boolean; enableCompression: boolean; maxMessageSize: number; enableProfiling: boolean; customSerializers?: Map<string, ICustomSerializer>; } /** * JSON序列化消息验证结果 */ interface JsonMessageValidationResult { isValid: boolean; errors: string[]; } /** * 自定义序列化器接口 */ interface ICustomSerializer { serialize(data: any): any; deserialize(data: any): any; canHandle(data: any): boolean; } /** * 序列化结果 */ interface SerializationResult$2 { data: string | Buffer; size: number; compressionRatio?: number; serializationTime: number; } /** * 反序列化结果 */ interface DeserializationResult$2<T = any> { data: T; deserializationTime: number; isValid: boolean; errors?: string[]; } /** * 序列化统计信息 */ interface SerializationStats { totalSerialized: number; totalDeserialized: number; totalBytes: number; averageSerializationTime: number; averageDeserializationTime: number; averageMessageSize: number; errorCount: number; compressionSavings: number; } /** * JSON序列化器 */ declare class JSONSerializer { private logger; private config; private stats; private serializationTimes; private deserializationTimes; private messageSizes; /** * 构造函数 */ constructor(config?: Partial<SerializerConfig>); /** * 序列化消息 */ serialize<T extends INetworkMessage>(message: T): SerializationResult$2; /** * 反序列化消息 */ deserialize<T extends INetworkMessage>(data: string | ArrayBuffer): DeserializationResult$2<T>; /** * 批量序列化 */ serializeBatch<T extends INetworkMessage>(messages: T[]): SerializationResult$2; /** * 批量反序列化 */ deserializeBatch<T extends INetworkMessage>(data: string | ArrayBuffer): DeserializationResult$2<T[]>; /** * 获取统计信息 */ getStats(): SerializationStats; /** * 重置统计信息 */ resetStats(): void; /** * 添加自定义序列化器 */ addCustomSerializer(name: string, serializer: ICustomSerializer): void; /** * 移除自定义序列化器 */ removeCustomSerializer(name: string): boolean; /** * 更新配置 */ updateConfig(newConfig: Partial<SerializerConfig>): void; /** * 验证消息格式 */ private validateMessage; /** * 验证解析后的消息 */ private validateParsedMessage; /** * 预处理消息(序列化前) */ private preprocessMessage; /** * 后处理消息(反序列化后) */ private postprocessMessage; /** * 序列化特殊类型 */ private serializeSpecialTypes; /** * 反序列化特殊类型 */ private deserializeSpecialTypes; /** * 创建JSON.stringify替换函数 */ private createReplacer; /** * 创建JSON.parse恢复函数 */ private createReviver; /** * 查找自定义序列化器 */ private findCustomSerializer; /** * 更新序列化统计 */ private updateSerializationStats; /** * 更新反序列化统计 */ private updateDeserializationStats; /** * 获取性能分析报告 */ getPerformanceReport(): { stats: SerializationStats; serializationTimes: number[]; deserializationTimes: number[]; messageSizes: number[]; percentiles: { serialization: { p50?: undefined; p90?: undefined; p95?: undefined; p99?: undefined; } | { p50: number; p90: number; p95: number; p99: number; }; deserialization: { p50?: undefined; p90?: undefined; p95?: undefined; p99?: undefined; } | { p50: number; p90: number; p95: number; p99: number; }; messageSize: { p50?: undefined; p90?: undefined; p95?: undefined; p99?: undefined; } | { p50: number; p90: number; p95: number; p99: number; }; }; }; /** * 计算百分位数 */ private calculatePercentiles; } /** * 容器头结构 */ interface ContainerHeader { /** 魔数标识 'MCF0' */ magic: 'MCF0'; /** 版本号 */ version: 1; /** 压缩算法名称 */ algo: string; /** 原始数据大小 */ originalSize: number; /** 标志位,预留扩展用 */ flags: number; } /** * 容器头解析结果 */ interface ParsedHeader { /** 解析到的头部信息 */ header: ContainerHeader; /** 头部字节长度 */ headerSize: number; /** 载荷数据 */ payload: Uint8Array; } /** * 压缩算法接口 */ interface ICompressionAlgorithm { /** 算法名称 */ readonly name: string; /** 算法版本 */ readonly version: string; /** 是否支持异步压缩 */ readonly supportsAsync: boolean; /** * 同步压缩 * @param data - 待压缩的字节数据 * @returns 压缩后的字节数据 */ compress(data: Uint8Array): Uint8Array; /** * 同步解压缩 * @param data - 待解压的字节数据 * @returns 解压后的字节数据 */ decompress(data: Uint8Array): Uint8Array; /** * 异步压缩(可选) */ compressAsync?(data: Uint8Array): Promise<Uint8Array>; /** * 异步解压缩(可选) */ decompressAsync?(data: Uint8Array): Promise<Uint8Array>; } /** * 压缩配置 */ interface CompressionConfig { /** 默认压缩算法名称 */ defaultAlgorithm: string; /** 最小压缩阈值(字节) */ threshold: number; /** 是否启用异步压缩 */ enableAsync: boolean; /** 压缩级别提示 (0-9) */ level: number; /** 分块大小 */ chunkSize: number; /** 是否启用压缩统计 */ enableStats: boolean; } /** * 压缩结果 */ interface CompressionResult { /** 压缩后的数据 */ data: ArrayBuffer; /** 原始大小 */ originalSize: number; /** 压缩后大小 */ compressedSize: number; /** 压缩比 */ compressionRatio: number; /** 压缩耗时 */ compressionTime: number; /** 使用的算法 */ algorithm: string; /** 是否实际进行了压缩 */ wasCompressed: boolean; } /** * 解压缩结果 */ interface DecompressionResult { /** 解压缩后的数据 */ data: ArrayBuffer; /** 原始压缩大小 */ compressedSize: number; /** 解压缩后大小 */ decompressedSize: number; /** 解压缩耗时 */ decompressionTime: number; /** 使用的算法 */ algorithm: string; } /** * 压缩统计信息 */ interface CompressionStats { /** 总压缩次数 */ totalCompressions: number; /** 总解压缩次数 */ totalDecompressions: number; /** 总原始字节数 */ totalOriginalBytes: number; /** 总压缩字节数 */ totalCompressedBytes: number; /** 平均压缩比 */ averageCompressionRatio: number; /** 平均压缩时间 */ averageCompressionTime: number; /** 平均解压缩时间 */ averageDecompressionTime: number; /** 算法使用统计 */ algorithmUsage: Record<string, number>; } /** * 无压缩算法实现(默认) */ declare class NoCompressionAlgorithm implements ICompressionAlgorithm { readonly name = "none"; readonly version = "1.0.0"; readonly supportsAsync = false; compress(data: Uint8Array): Uint8Array; decompress(data: Uint8Array): Uint8Array; } /** * LZ字符串压缩算法实现 */ declare class LZCompressionAlgorithm implements ICompressionAlgorithm { readonly name = "lz-string"; readonly version = "1.0.0"; readonly supportsAsync = false; compress(data: Uint8Array): Uint8Array; decompress(data: Uint8Array): Uint8Array; /** * 将数字数组编码为字节数组 */ private numbersToUint8Array; /** * 将字节数组解码为数字数组 */ private uint8ArrayToNumbers; } /** * 消息压缩器 */ declare class MessageCompressor { private logger; private config; private algorithms; private stats; /** * 构造函数 */ constructor(config?: Partial<CompressionConfig>); /** * 注册压缩算法 */ registerAlgorithm(algorithm: ICompressionAlgorithm): void; /** * 注销压缩算法 */ unregisterAlgorithm(algorithmName: string): boolean; /** * 获取已注册的算法列表 */ getRegisteredAlgorithms(): string[]; /** * 检查算法是否已注册 */ hasAlgorithm(algorithmName: string): boolean; /** * 压缩数据 */ compress(data: ArrayBuffer | string, algorithmName?: string): Promise<CompressionResult>; /** * 解压缩数据 */ decompress(data: ArrayBuffer): Promise<DecompressionResult>; /** * 获取压缩统计信息 */ getStats(): CompressionStats; /** * 重置统计信息 */ resetStats(): void; /** * 更新配置 */ updateConfig(newConfig: Partial<CompressionConfig>): void; /** * 获取配置 */ getConfig(): CompressionConfig; /** * 更新压缩统计信息 */ private updateCompressionStats; /** * 更新解压缩统计信息 */ private updateDecompressionStats; /** * 编码容器头 * 格式: [MAGIC:4] 'MCF0' | [ver:1] | [algoLen:1] | [algoName:algoLen] * [origLen:4, LE] | [flags:1] | [payload:...] */ private encodeContainerHeader; /** * 解码容器头 */ private decodeContainerHeader; /** * 检测是否为新的容器格式 */ private isContainerFormat; } /** * 全局压缩器实例 */ declare const globalCompressor: MessageCompressor; /** * SyncVar支持的值类型 */ type SyncVarValue = string | number | boolean | object | null | undefined; /** * SyncVar配置选项 */ interface SyncVarOptions<T = SyncVarValue> { /** 同步模式 */ mode?: SyncMode; /** 同步频率(毫秒) */ syncRate?: number; /** 权限类型 */ authority?: AuthorityType; /** 网络作用域 */ scope?: NetworkScope; /** 变化阈值,用于数值类型 */ threshold?: number; /** 是否启用压缩 */ compression?: boolean; /** 优先级(0-10,数值越高优先级越高) */ priority?: number; /** 是否启用插值 */ interpolation?: boolean; /** 自定义序列化函数 */ customSerializer?: (value: T) => unknown; /** 自定义反序列化函数 */ customDeserializer?: (value: unknown) => T; /** 变化回调函数 */ onChanged?: (oldValue: T, newValue: T) => void; } /** * SyncVar元数据 */ interface SyncVarMetadata<T = SyncVarValue> { propertyKey: string | symbol; options: Required<SyncVarOptions<T>>; originalDescriptor?: PropertyDescriptor; lastValue?: T; lastSyncTime: number; isDirty: boolean; syncCount: number; } /** * 存储SyncVar元数据的Symbol键 */ declare const SYNCVAR_METADATA_KEY: unique symbol; /** * 默认SyncVar配置 */ declare const DEFAULT_SYNCVAR_OPTIONS: Required<SyncVarOptions<SyncVarValue>>; /** * SyncVar装饰器 * 用于标记需要网络同步的属性 */ declare function SyncVar<T extends SyncVarValue = SyncVarValue>(options?: SyncVarOptions<T>): (target: object, propertyKey: string | symbol) => void; /** * 获取对象的所有SyncVar元数据 */ declare function getSyncVarMetadata(target: object): Map<string | symbol, SyncVarMetadata>; /** * 获取特定属性的SyncVar元数据 */ declare function getSyncVarPropertyMetadata(target: object, propertyKey: string | symbol): SyncVarMetadata | undefined; /** * 检查对象是否有SyncVar属性 */ declare function hasSyncVars(target: object): boolean; /** * 获取对象的所有脏SyncVar属性 */ declare function getDirtySyncVars(target: object): Map<string | symbol, SyncVarMetadata>; /** * 清理所有脏标记 */ declare function clearDirtyFlags(target: object): void; /** * 重置SyncVar统计信息 */ declare function resetSyncVarStats(target: object): void; /** * SyncVar统计信息条目 */ interface SyncVarStatEntry { syncCount: number; lastSyncTime: number; isDirty: boolean; } /** * SyncVar统计信息映射 */ interface SyncVarStatsMap { [key: string]: SyncVarStatEntry; } /** * 获取SyncVar统计信息 */ declare function getSyncVarStats(target: object): SyncVarStatsMap; /** * 网络层专用的EventEmitter实现 * 继承自core库的Emitter,提供简单的事件API */ /** * 网络事件发射器,专为网络层设计 * 使用字符串或symbol作为事件类型,简化API */ declare class EventEmitter<T = Record<string, (...args: any[]) => void>> extends Emitter<string | symbol, void> { constructor(); /** * 添加事件监听器 * @param event - 事件名称 * @param listener - 监听函数 */ on(event: string | symbol, listener: Function): this; /** * 添加一次性事件监听器 * @param event - 事件名称 * @param listener - 监听函数 */ once(event: string | symbol, listener: Function): this; /** * 移除事件监听器 * @param event - 事件名称 * @param listener - 监听函数,不传则移除所有 */ off(event: string | symbol, listener?: Function): this; /** * 移除事件监听器(别名) */ removeListener(event: string | symbol, listener: Function): this; /** * 移除所有监听器 */ removeAllListeners(event?: string | symbol): this; /** * 获取监听器数量 */ listenerCount(event: string | symbol): number; /** * 发射事件(兼容Node.js EventEmitter) * @param event - 事件名称 * @param args - 事件参数 */ emit(event: string | symbol, ...args: any[]): boolean; } /** * 属性值映射类型 */ interface PropertyChanges { [propertyKey: string]: SyncVarValue; } /** * 同步模式映射类型 */ interface SyncModeMap { [propertyKey: string]: SyncMode; } /** * 权限映射类型 */ interface AuthorityMap { [propertyKey: string]: AuthorityType; } /** * 作用域映射类型 */ interface ScopeMap { [propertyKey: string]: NetworkScope; } /** * 优先级映射类型 */ interface PriorityMap { [propertyKey: string]: number; } /** * 同步批次数据 */ interface SyncBatch { /** 实例ID */ instanceId: string; /** 实例类型 */ instanceType: string; /** 变化的属性数据 */ changes: PropertyChanges; /** 时间戳 */ timestamp: number; /** 同步模式映射 */ syncModes: SyncModeMap; /** 权限映射 */ authorities: AuthorityMap; /** 作用域映射 */ scopes: ScopeMap; /** 优先级映射 */ priorities: PriorityMap; } /** * 同步统计信息 */ interface SyncStats { /** 注册的实例数量 */ registeredInstances: number; /** 脏实例数量 */ dirtyInstances: number; /** 总同步次数 */ totalSyncs: number; /** 总传输字节数 */ totalBytes: number; /** 平均同步延迟 */ averageLatency: number; /** 每秒同步次数 */ syncsPerSecond: number; /** 最后同步时间 */ lastSyncTime: number; } /** * SyncVar管理器 * 负责管理所有带有SyncVar的实例,追踪变化并生成同步批次 */ declare class SyncVarMana