import { SecretInfo } from "./../../GN-common/entity/SecretInfo";
import { OperationRequest } from "./../../GN-common/entity/operationRequest/OperationRequest";
import { OperationResponse } from "./../../GN-common/entity/operationResponse/OperationResponse";
import { IPostEventCallbackService, IPreEventCallbackService, OnPostCallbackFunction, OnPreCallbackFunction } from "./IEventCallbackService";
import * as mongoDB from "mongodb";
import { GNServer } from "../../GNServer";
import { GNServerSettingsOptions } from "@xmobitea/gn-typescript-client";
import { OperationEvent } from "../../GN-common/entity/operationEvent/OperationEvent";
import { MatchmakingTicketCanMatch } from "../handler/controller/handler/multiplayer/MatchmakingHandler";
interface DbConnection {
    url: string;
    dbName: string;
    options?: {
        [k: string]: any;
    };
}
export interface EventCallbackCloudScriptFunction {
    type: string;
    version: string;
    fullScript: string;
    tsLastUpdate: number;
    childScripts: {
        eventName: string;
        script: string;
        hasEdit: boolean;
    }[];
}
export interface IEventCallbackCloudScriptService {
    executeRequestServerDetailSystem(gameId: string, matchmakingTicketCanMatch: MatchmakingTicketCanMatch): Promise<{
        success: boolean;
    }>;
    executePost(eventName: string, request: {
        [k: string]: any;
    }, secretInfo: SecretInfo, operationRequest: OperationRequest, operationResponse: OperationResponse): Promise<void>;
    executeEvent(eventName: string, request: {
        [k: string]: any;
    }, operationEvent: OperationEvent): Promise<void>;
    executePre(eventName: string, request: {
        [k: string]: any;
    }, secretInfo: SecretInfo, operationRequest: OperationRequest): Promise<OperationResponse>;
    addCloudScriptFunction(eventName: string, script: string): Promise<{
        success: boolean;
        errorMessage?: string;
        version?: string;
    }>;
    getAllCloudScriptFunction(): Promise<{
        type: string;
        version: string;
        fullScript: string;
        tsLastUpdate: number;
        childScripts: {
            eventName: string;
            script: string;
            hasEdit: boolean;
        }[];
    }[]>;
}
export declare class EventCallbackCloudScriptService implements IEventCallbackCloudScriptService {
    private static readonly ExecuteTimeoutInMs;
    private static readonly SystemExecuteTimeoutInMs;
    private static readonly OnEveryMinute;
    private static readonly OnEveryHour;
    private static readonly OnEveryDay;
    private cloudScriptWorkerDict;
    private cloudScriptWaitingResponseCallbackDict;
    private cloudScriptFunctionCollection;
    private backupCloudScriptFunctionCollection;
    private gnServer;
    private gnServerSettingsOptions;
    private dbConnection;
    private cloudScriptFunctionDict;
    constructor();
    getAllCloudScriptFunction(): Promise<{
        type: string;
        version: string;
        fullScript: string;
        tsLastUpdate: number;
        childScripts: {
            eventName: string;
            script: string;
            hasEdit: boolean;
        }[];
    }[]>;
    init(gnServerSettingsOptions: GNServerSettingsOptions, dbConnection: DbConnection, gnServer: GNServer): void;
    setCloudScriptFunctionCollection(cloudScriptFunctionCollection: mongoDB.Collection<mongoDB.Document>): void;
    setBackupCloudScriptFunctionCollection(cloudScriptFunctionCollection: mongoDB.Collection<mongoDB.Document>): void;
    run(): void;
    private loadVersion;
    private executeSystem;
    executeRequestServerDetailSystem(gameId: string, matchmakingTicketCanMatch: MatchmakingTicketCanMatch): Promise<{
        success: boolean;
    }>;
    executeEvent(eventName: string, request: {
        [k: string]: any;
    }, operationEvent: OperationEvent): Promise<void>;
    executePre(eventName: string, request: {
        [k: string]: any;
    }, secretInfo: SecretInfo, operationRequest: OperationRequest): Promise<OperationResponse>;
    executePost(eventName: string, request: {
        [k: string]: any;
    }, secretInfo: SecretInfo, operationRequest: OperationRequest, operationResponse: OperationResponse): Promise<void>;
    private loadCloudScriptFunctionWorkerFromCache;
    addCloudScriptFunction(eventName: string, script: string): Promise<{
        success: boolean;
        errorMessage?: string;
        version?: string;
    }>;
    private remoteAddCloudScriptFunction;
    private loadCloudScriptFunctionWorker;
    private loadCloudScriptWorker;
}
export declare class PostEventCallbackService implements IPostEventCallbackService {
    private eventLstDict;
    constructor();
    private eventCallbackCollection;
    private cloudScriptService;
    subscriberEvent(eventName: string, callbackFunction: OnPostCallbackFunction): void;
    unSubscriberEvent(eventName: string, callbackFunction: OnPostCallbackFunction): void;
    setEventCallbackCollection(eventCallbackCollection: mongoDB.Collection<mongoDB.Document>): void;
    setCloudScriptService(cloudScriptService: IEventCallbackCloudScriptService): void;
    onEvent(eventName: string, request: {}, secretInfo: SecretInfo, operationRequest: OperationRequest, operationResponse: OperationResponse): Promise<void>;
}
export declare class PreEventCallbackService implements IPreEventCallbackService {
    private eventDict;
    private cloudScriptService;
    constructor();
    subscriberEvent(eventName: string, callbackFunction: OnPreCallbackFunction): void;
    unSubscriberEvent(eventName: string): void;
    setCloudScriptService(cloudScriptService: IEventCallbackCloudScriptService): void;
    onEvent(eventName: string, request: {}, secretInfo: SecretInfo, operationRequest: OperationRequest): Promise<OperationResponse>;
}
export {};
