import { Socket } from 'socket.io';
import * as ws from 'ws';
import { Disposable, Event, Message } from 'open-collaboration-protocol';
export declare class Channel {
    private onDidCloseEmitter;
    private onDidDisconnectEmitter;
    private onDidReconnectEmitter;
    private onMessageEmitter;
    get onClose(): Event<void>;
    get onDisconnect(): Event<void>;
    get onReconnect(): Event<void>;
    get transport(): TransportChannel | undefined;
    set transport(transport: TransportChannel | undefined);
    private _transport?;
    private buffer;
    private toDispose;
    private closeTimeout;
    constructor(transport: TransportChannel);
    get onMessage(): Event<Message>;
    sendMessage(message: Message): void;
    close(): void;
}
export interface TransportChannel {
    onMessage(cb: (message: Message) => void): Disposable;
    sendMessage(message: Message): void;
    close(): void;
    onClose: Event<void>;
}
export declare class WebSocketChannel implements TransportChannel {
    private onDidCloseEmitter;
    get onClose(): Event<void>;
    private _socket;
    constructor(socket: ws.WebSocket);
    onMessage(cb: (message: Message) => void): Disposable;
    sendMessage(message: Message): void;
    close(): void;
}
export declare class SocketIoChannel implements TransportChannel {
    private onDidCloseEmitter;
    get onClose(): Event<void>;
    private _socket;
    constructor(socket: Socket);
    onMessage(cb: (message: Message) => void): Disposable;
    sendMessage(message: Message): void;
    close(): void;
}
//# sourceMappingURL=channel.d.ts.map