/// <reference types="node" />
import { CoreModule, Extension, ExtensionWithConfig, OnExtensionLoad, OnModuleInstantiated, OnShutdown } from '../../core/interfaces';
import { Observable } from 'rxjs/Observable';
import { WebSocketServer } from './server';
import { ExtensionShutdown } from '../../core';
export interface SocketConfig {
    port?: number;
    autoAcceptConnections?: boolean;
    keepaliveInterval?: number;
    keepaliveGracePeriod?: number;
    closeTimeout?: number;
    useHttpExtension?: boolean;
    tls?: {
        key: Buffer;
        cert: Buffer;
    };
}
export declare class SocketServerExt implements OnExtensionLoad, OnModuleInstantiated, OnShutdown {
    static setConfig(config: SocketConfig): ExtensionWithConfig;
    /**
     * Initilization of the extension
     * Create the socket server
     *
     * @param  {CoreModule} module
     * @param  {SocketConfig} config
     * @returns Observable
     */
    onExtensionLoad(module: CoreModule, config: SocketConfig): Observable<Extension>;
    /**
     * Start socket server
     *
     * @param  {CoreModule} module
     * @param  {WebSocketServer} server
     * @returns Observable
     */
    onModuleInstantiated(module: CoreModule, server: WebSocketServer): Observable<any>;
    /**
     * Shutdown HapiJS server extension
     *
     * @param  {CoreModule} module
     * @param  {Server} server
     * @returns ExtensionShutdown
     */
    onShutdown(module: CoreModule, server: WebSocketServer): ExtensionShutdown;
}
