/// <reference types="node" />
import { Observable, Subject } from 'rxjs/Rx';
import { server, request } from 'websocket';
import { Socket } from './socket';
import { SocketConfig } from './extension';
import * as http from 'http';
import * as https from 'https';
export declare class WebSocketServer {
    private config;
    private server;
    private connections$;
    private sockets;
    private httpServer;
    private rooms;
    private secure;
    constructor(config: SocketConfig);
    start(): void;
    /**
     * Close all sockets and close http server
     *
     * @returns Observable
     */
    stop(): Observable<boolean>;
    /**
     * Get Http Server Extension instance
     * @FIXME Just take the first HapiJS connection for now
     */
    private getHttpServerExt();
    /**
     * Create Http Server for websocket
     *
     * @returns http
     */
    private createHttpServer();
    /**
     * Resquest handler
     * Accept the request
     *
     * @param  {request} _request
     */
    private onRequestHandler(_request);
    /**
     * Configure a secure callback
     * to accept/reject requests
     *
     * @param  {(request:request)=>Observable<boolean>} secure
     * @returns Subject
     */
    configure(secure: (request: request) => Observable<boolean>): Subject<Socket>;
    /**
     * Get connections Subject
     *
     * @returns Subject
     */
    connections(): Subject<Socket>;
    /**
     * Get active sockets
     *
     * @returns Socket
     */
    getSockets(): Socket[];
    /**
     * Broadcast data into active sockets
     *
     * @param  {string} event
     * @param  {any} data
     */
    broadcast(event: string, data: any): void;
    /**
     * Send a message to all sockets present in a room
     *
     * @param {string} room
     * @param {string} event
     * @param {any} data
     * @returns WebSocketServer
     */
    to(room: string, event: string, data: any): this;
    getServer(): server;
    getHttpServer(): http.Server | https.Server;
}
