/// <reference types="node" />
import { connection, request as WSRequest } from 'websocket';
import { WebSocketRooms } from './rooms';
import { Observable } from 'rxjs/Rx';
export declare class Socket {
    request: WSRequest;
    private _connection;
    private _rooms;
    private static logger;
    private data$;
    private store;
    constructor(request: WSRequest, _connection: connection, _rooms: WebSocketRooms);
    /**
     * Listen events
     *
     * @param  {string} event
     * @param  {(data: any)=>void} callback
     */
    on(event: string, callback: (data: any) => void): void;
    /**
     * Listen data filtered by event
     * in a Observable
     *
     * @param  {string} event
     * @returns Observable
     */
    on$<T = any>(event: string): Observable<T>;
    /**
     * Listen to binary data
     *
     * @param  {(data:Buffer)=>void} callback
     */
    onBytes(callback: (data: Buffer) => void): void;
    /**
     * Send data
     *
     * @param  {string} event
     * @param  {any} data
     */
    emit(event: string, data: any): void;
    /**
     * Send bytes
     *
     * @param  {Buffer} data
     */
    emitBytes(data: Buffer): void;
    /**
     * Close connection
     */
    close(): void;
    join(room: string): Socket;
    leave(room: string): Socket;
    setData(key: string, value: any): Socket;
    getData(key: string): any;
    private getJSON(data);
}
