import { FuncInfo, FuncPromiseData } from "./funcBase.js"; import { EventEmitter } from "eventemitter3"; import { LogLine } from "./logBase.js"; import * as Message from "./message.js"; import websocket from "websocket"; import { ImageFrame, ImageReq } from "./imageBase.js"; import { FieldBase } from "./fieldBase.js"; export interface Canvas2DData { width: number; height: number; components: Message.Canvas2DComponent[]; } export interface LogData { data: LogLine[]; sentLines: number; } export declare class ClientData { selfMemberName: string; valueStore: SyncDataStore2; textStore: SyncDataStore2; funcStore: SyncDataStore2; viewStore: SyncDataStore2; imageStore: SyncDataStore2; robotModelStore: SyncDataStore2; canvas3DStore: SyncDataStore2; canvas2DStore: SyncDataStore2; logStore: SyncDataStore2; syncTimeStore: SyncDataStore1; funcResultStore: FuncResultStore; memberIds: Map; memberLibName: Map; memberLibVer: Map; memberRemoteAddr: Map; eventEmitter: EventEmitter; svrName: string; svrVersion: string; selfMemberId: number; svrHostName: string; pingStatus: Map; pingStatusReq: boolean; pingStatusReqSend: boolean; host: string; port: number; closing: boolean; connectionStarted: boolean; ws: null | websocket.w3cwebsocket; messageQueue: ArrayBuffer[]; logLevel: "trace" | "verbose" | "none"; constructor(name: string, host?: string, port?: number, logLevel?: "trace" | "verbose" | "none"); get consoleLogger(): { readonly trace: (msg: string) => false | void | ""; readonly info: (msg: string) => false | void | ""; readonly warn: (msg: string) => false | void | ""; readonly error: (msg: string) => false | void | ""; }; isSelf(member: string): boolean; getMemberNameFromId(id: number): string; getMemberIdFromName(name: string): number; /** * 次回接続後一番最初に送信するメッセージ * * * syncDataFirst() の返り値であり、 * すべてのリクエストとすべてのsyncデータ(1時刻分)が含まれる * * sync()時に未接続かつこれが空ならその時点のsyncDataFirstをこれにセット * * 接続時にこれが空でなければ、 * * これ + messageQueueの中身(=syncDataFirst以降のすべてのsync()データ) を、 * * これが空ならその時点のsyncDataFirstを、 * * 送信する * * 切断時に再度これを空にする */ syncFirst: ArrayBuffer | null; /** * messageQueueにたまっているメッセージを処理 */ sendMsg(): void; /** * メッセージを追加 & messageQueueを消費 * * messageQueueになにか追加するところで呼ぶこと */ pushSendAlways(msgs?: Message.AnyMessage[]): void; /** * 接続されている場合に限ってメッセージを追加しtrueを返す */ pushSendOnline(msgs?: Message.AnyMessage[]): boolean; /** * sync_firstが空でなければメッセージをキューに入れtrueを返す */ pushSendReq(msgs?: Message.AnyMessage[]): boolean; } export declare class SyncDataStore2 { dataSend: Map; dataSendPrev: Map; dataRecv: Map>; entry: Map; req: Map>; reqInfo: Map>; selfMemberName: string; shouldSend: (prev: T | undefined, current: T) => boolean; static shouldSendAlways: () => boolean; static shouldNotSendTwice: (prev: any) => boolean; static shouldSendOnChange: (prev: any, current: any) => boolean; constructor(name: string, shouldSend?: (prev: T | undefined, current: T) => boolean); isSelf(member: string): boolean; /** * 送信するデータをdata_sendとdata_recv[self_member_name]にセット */ setSend(field: string, data: T): void; /** * 受信したデータをdata_recvにセット */ setRecv(member: string, field: string, data: T): void; getMaxReq(): number; /** * リクエストされてなければリクエストする * * @param option undefinedでなく前回のoptionと異なる場合すでにリクエストされてても更新する * @return リクエストid, すでにリクエストされてれば0 */ addReq(member: string, field: string, option?: ReqT): number; /** * data_recvからデータを返す */ getRecv(member: string, field: string): NonNullable | null; /** * dataRecvからデータを削除 */ clearRecv(member: string, field: string): void; /** * data_recvからデータを削除, req,req_sendをfalseにする */ unsetRecv(member: string, field: string): void; /** * member名のりすとを取得(entryから) */ getMembers(): string[]; /** * entryを取得 */ getEntry(member: string): string[]; /** * entryにmember名を追加、recvをクリア */ initMember(member: string): void; /** * 受信したentryを追加 */ setEntry(member: string, e: string): void; /** * data_sendを返し、data_sendをクリア */ transferSend(isFirst: boolean): Map; getSendPrev(isFirst: boolean): Map; /** * req_sendを返す */ transferReq(): Map>; getReq(i: number, subField: string): string[]; getReqInfo(member: string, field: string): ReqT | undefined; } export declare class SyncDataStore1 { dataRecv: Map; req: Map; entry: Set; selfMemberName: string; constructor(name: string); isSelf(member: string): boolean; setRecv(member: string, data: T): void; addReq(member: string): boolean; getRecv(member: string): NonNullable | null; unsetRecv(member: string): void; transferReq(): Map; /** * entryを取得 */ getEntry(member: string): boolean; /** * 受信したentryを追加 */ setEntry(member: string): void; /** * entry削除 */ clearEntry(member: string): void; } export declare class FuncResultStore { results: FuncPromiseData[]; addResult(caller: string, base: FieldBase, data: ClientData): FuncPromiseData; getResult(callerId: number): FuncPromiseData; }