/// <reference types="node" />
import { BaseAddon, UserToken, NullablePromise } from "pao-aop";
import { Session } from '../session/index';
/**
 * 服务器状态
 */
export declare type ServerStatus = 'stopped' | 'running' | 'error' | string;
/**
 * 移除文件中的BOM
 * @author pao
 * @param bin
 */
export declare function removeBOM(bin: Buffer): Buffer;
/**
 * 保存
 * @author pao
 * @param filePath 文件路径
 */
export declare function saveObject(filePath: string, obj: Object): void;
/**
 * 读取
 * @author pao
 * @param filePath 文件路径
 */
export declare function loadObject(filePath: string): Object;
/**
 * 准备配置
 * @author pao
 * @param defaultConfig 默认配置对象
 * @param configFile 配置文件
 * @param loadConfig 是否从配置文件加载
 * @param saveConfig 是否保存配置文件
 */
export declare function prepareConfig(defaultConfig: Object, configFile: string, loadConfig?: boolean, saveConfig?: boolean): Object;
/**
 * 服务信息: 包含服务名称和服务对象的信息
 * @author pao
 */
export declare class ServerInfo {
    serverName?: string;
    serverObject?: BaseServer;
    constructor(serverName?: string, serverObject?: BaseServer);
}
/**
 * 注册服务列表
 * @author pao
 * @param serverInfos 服务信息列表
 */
export declare function registerServers(serverInfos: ServerInfo[]): void;
/**
 * 注册服务
 * @author pao
 * @param serverInfo 服务信息
 */
export declare function registerServer(serverInfo: ServerInfo): void;
/**
 * 编历服务器
 * @param serviceFunction 服务处理方法
 */
export declare function forEachServer(serverFunction: (serverInfo: BaseServer) => void): void;
/** 根据名称获取服务
 * @author pao
 * @param name 名称
 */
export declare function getServerByName(name: string): BaseServer;
/**
 * 服务信息: 包含服务名称和服务对象的信息
 * @author pao
 */
export declare class ServiceInfo {
    serviceName?: string;
    serviceObject?: BaseService;
    constructor(serviceName?: string, serviceObject?: BaseService);
}
/**
 * 服务授权接口
 */
export interface IServiceAuthority {
    /**
     * 检查授权
     * @param userToken 用户令牌
     * @param functionName 函数名称
     * @param args 参数
     */
    checkAuthority?(token: UserToken, session: Session, functionName: string, args: any[]): Promise<void>;
}
/**
 * 名称:基础服务
 * @description 所有服务的基类
 * @author huyl
 */
export declare class BaseService extends BaseAddon {
    /**
     * 授权对象
     */
    authoryObject?: IServiceAuthority;
    /**
     * 当前用户令牌
     */
    userToken?: UserToken;
    /**
     * 当前会话
     */
    session?: Session;
    /** 基础服务 */
    constructor();
    /** 调用 */
    call?(userToken: UserToken, session: Session, functionName: string, args: any[]): Promise<any>;
    /**
     * 函数调用前
     * @param userToken 用户令牌
     * @param session 会话
     * @param functionName 函数名称
     * @param args 参数
     */
    protected beforeCallFunction?(userToken: UserToken, session: Session, functionName: string, args: any[]): Promise<void>;
}
/**
 * 名称:基础服务器
 * @description 所有服务器的基类，服务器是可以启动和停止的应用程序，服务器程序不应当阻塞主线程
 * @author pao
 */
export declare class BaseServer extends BaseAddon {
    /**
     * 服务器状态
     */
    status?: ServerStatus;
    /**
     * 服务启动
     */
    start?(): void;
    /**
     * 服务停止
     */
    stop?(): void;
    protected onStart?(): void;
    protected onStop?(): void;
    /**
     * 服务重置
     */
    reset?(): void;
}
/**
 * 服务数据
 */
export declare class ServerData {
    /**
     * 服务ID
     */
    id?: string;
    /**
     * 服务名称
     */
    name?: string;
    /**
     * 服务类型
     */
    type?: 'DeviceServer' | 'WebServer' | 'ProxyClient' | 'ProxyServer' | 'ProxyListenServer' | 'DataProcessServer' | string;
    /**
     * 状态
     */
    status?: ServerStatus;
}
/**
 * 名称: 服务管理接口
 * @description 提供服务管理功能的接口
 * @author pao
 */
export declare class IServerManagement extends BaseAddon {
    /**
     * 获取服务器列表
     */
    getServers(): NullablePromise<ServerData[]>;
    /**
     * 获取服务明细信息
     */
    getServerDetailInfo(): NullablePromise<object[]>;
    /**
     * 启动服务
     */
    startServer(serverName: string): NullablePromise<void>;
    /**
     * 停止服务
     */
    stopServer(serverName: string): NullablePromise<void>;
}
//# sourceMappingURL=index.d.ts.map