///
///
import CancellationToken from 'cancellationtoken';
import { EventEmitter } from 'events';
import { ServiceActivationOptions } from './ServiceActivationOptions';
import { ServiceMoniker } from './ServiceMoniker';
import { ServiceRpcDescriptor } from './ServiceRpcDescriptor';
import { IDisposable } from './IDisposable';
import StrictEventEmitter from 'strict-event-emitter-types';
import { BrokeredServicesChangedArgs } from './BrokeredServicesChangedArgs';
/**
* Describes the events that can be fired from {@linkcode IServiceBroker} or {@linkcode IRemoteServiceBroker}
*/
export interface ServiceBrokerEvents {
availabilityChanged: (args: BrokeredServicesChangedArgs) => void;
}
/**
* The {@linkcode StrictEventEmitter} extended by {@linkcode IServiceBroker} and {@linkcode IRemoteServiceBroker}
*/
export type ServiceBrokerEmitter = StrictEventEmitter;
/**
* A service broker that can provide or activate services.
* Emits an event when the availability of a service changes.
*/
export interface IServiceBroker extends ServiceBrokerEmitter {
/**
* Gets a proxy to the requested service
* @param serviceDescriptor The service being requested
* @param options Activation options for that service
* @param cancellationToken A cancellation token
*/
getProxy(serviceDescriptor: ServiceRpcDescriptor, options?: ServiceActivationOptions, cancellationToken?: CancellationToken): Promise<(T & IDisposable) | null>;
/**
* Gets a pipe to communicate with a requested service
* @param serviceMoniker The service being requested
* @param options Activation options for that service
* @param cancellationToken A cancellation token
*/
getPipe(serviceMoniker: ServiceMoniker, options?: ServiceActivationOptions, cancellationToken?: CancellationToken): Promise;
}