import { Server, Socket } from "socket.io";
import { Request } from "./../../GN-common/entity/operationRequest/base/Request";
import { OperationEvent } from "./../../GN-common/entity/operationEvent/OperationEvent";
import { OperationResponse } from "./../../GN-common/entity/operationResponse/OperationResponse";
import { Emitter } from "@socket.io/mongo-emitter";
import { ApiMiddleware } from "./../middleware/ApiMiddleware";
import { AntiDdosMiddleware } from "./../middleware/AntiDdosMiddleware";
import { xDatabase } from "./../../GN-library/xdatabase/lib/xDatabase";
interface OnSocketDisconnect {
    (socket: Socket, data: string): void;
}
interface OnSocketRequest {
    (request: Request): Promise<OperationResponse>;
}
export declare class SocketAppHandler {
    private static readonly CONNECT_CMD;
    private static readonly DISCONNECT_CMD;
    private _onDisconnectCb;
    private _onRequestCb;
    private apiMiddleware;
    private antiDdosMiddleware;
    private enableSendAndReceiveDebug;
    private enablePostViaMsgPack;
    private enablePostViaJson;
    private server;
    private emitter;
    private xDatabase;
    setEnableSendAndReceiveDebug(enableSendAndReceiveDebug: boolean): void;
    setEnablePostViaMsgPack(enablePostViaMsgPack: boolean): void;
    setEnablePostViaJson(enablePostViaJson: boolean): void;
    setServer(server: Server): void;
    setApiMiddleware(apiMiddleware: ApiMiddleware): void;
    setAntiDdosMiddleware(antiDdosMiddleware: AntiDdosMiddleware): void;
    setEmitter(emitter: Emitter): void;
    setDatabase(database: xDatabase): void;
    setOnSocketRequest(_onRequestCb: OnSocketRequest): void;
    setOnSocketDisconnect(_onDisconnectCb: OnSocketDisconnect): void;
    run(): void;
    private socketConnect;
    private initSocket;
    private onSocketRequestAuthToken;
    private onSocketRequestMsgPack;
    private onSocketRequestJson;
    private onSocketResponse;
    private onSocketDisconnect;
    private sendResponseForSocket;
    private sendEventForSocket;
    sendEventTo(userId: string, operationEvent: OperationEvent): Promise<void>;
    sendEventToRoom(roomId: string, operationEvent: OperationEvent): Promise<void>;
    sendEventToMoreUser(userIds: string[], operationEvent: OperationEvent): Promise<void>;
    sendEventToAllPlayer(operationEvent: OperationEvent): Promise<void>;
    sendEventToNamespace(namespace: string, operationEvent: OperationEvent): Promise<void>;
    getSocketViaSocketId(socketId: string): Socket;
    getSockets(userId: string): import("socket.io").BroadcastOperator<import("socket.io/dist/typed-events").DecorateAcknowledgementsWithMultipleResponses<import("socket.io").DefaultEventsMap>, any>;
    joinRoom(userId: string, roomId: string): Promise<void>;
    leaveRoom(userId: string, roomId: string): Promise<void>;
    getRooms(userId: string): Promise<string[]>;
}
export {};
