///
import CancellationToken from 'cancellationtoken';
import { IDisposable } from './IDisposable';
import { IRemoteServiceBroker } from './IRemoteServiceBroker';
import { ServiceBrokerEmitter, IServiceBroker } from './IServiceBroker';
import { MultiplexingStream } from 'nerdbank-streams';
import { RemoteServiceConnectionInfo } from './RemoteServiceConnectionInfo';
import { ServiceActivationOptions } from './ServiceActivationOptions';
import { ServiceBrokerClientMetadata } from './ServiceBrokerClientMetadata';
import { ServiceMoniker } from './ServiceMoniker';
import { RpcEventServer } from './ServiceRpcDescriptor';
declare const MultiplexingRelayServiceBroker_base: new () => ServiceBrokerEmitter;
export declare class MultiplexingRelayServiceBroker extends MultiplexingRelayServiceBroker_base implements IRemoteServiceBroker, RpcEventServer, IDisposable {
private readonly serviceBroker;
private readonly multiplexingStreamWithClient;
private readonly multiplexingStreamWithRemoteClientOwned;
private static readonly _rpcEventNames;
private readonly channelsOfferedToClient;
readonly completion: Promise;
readonly rpcEventNames: readonly string[];
private disposed;
constructor(serviceBroker: IServiceBroker, multiplexingStreamWithClient: MultiplexingStream, multiplexingStreamWithRemoteClientOwned: boolean);
/**
* Initializes a new instance of the [MultiplexingRelayServiceBroker](#MultiplexingRelayServiceBroker)
* and establishes a [MultiplexingStream](#MultiplexingStream) protocol with the client over the given stream.
* @param serviceBroker A broker for the services to be relayed.
* @param duplexStreamWithClient
* The duplex stream over which the client will make RPC calls to the returned [IRemoteServiceBroker](#IRemoteServiceBroker) instance.
* A multiplexing stream will be established on this stream and the client is expected to accept an offer for a channel with an empty string for a name.
* This object is considered "owned" by the returned [MultiplexingRelayServiceBroker](#MultiplexingRelayServiceBroker) and will be disposed when the returned value is disposed,
* or disposed before this method throws.
* @param cancellationToken A cancellation token
* @returns A [MultiplexingRelayServiceBroker](#MultiplexingRelayServiceBroker) that provides access to remote services, all over a multiplexing stream.
* @remarks The [RemoteServiceBroker](#RemoteServiceBroker) is used as the wire protocol.
*/
static connectToServer(serviceBroker: IServiceBroker, duplexStreamWithClient: NodeJS.ReadWriteStream, cancellationToken?: CancellationToken): Promise;
handshake(clientMetadata: ServiceBrokerClientMetadata, cancellationToken?: CancellationToken): Promise;
requestServiceChannel(serviceMoniker: ServiceMoniker, options?: ServiceActivationOptions | undefined, cancellationToken?: CancellationToken | undefined): Promise;
cancelServiceRequest(serviceRequestId: string, cancellationToken?: CancellationToken | undefined): Promise;
dispose(): void;
private onAvailabilityChanged;
}
export {};