///
import { Deserialize, Serialize, ServiceDefinition } from './make-client';
import { HandleCall } from './server-call';
import { ServerCredentials } from './server-credentials';
import { ChannelOptions } from './channel-options';
import { ServerRef } from './channelz';
import { ServerInterceptor } from './server-interceptors';
import { Duplex } from 'stream';
export type UntypedHandleCall = HandleCall;
export interface UntypedServiceImplementation {
[name: string]: UntypedHandleCall;
}
export interface ServerOptions extends ChannelOptions {
interceptors?: ServerInterceptor[];
}
export interface ConnectionInjector {
injectConnection(connection: Duplex): void;
drain(graceTimeMs: number): void;
destroy(): void;
}
export declare class Server {
private boundPorts;
private http2Servers;
private sessionIdleTimeouts;
private handlers;
private sessions;
/**
* This field only exists to ensure that the start method throws an error if
* it is called twice, as it did previously.
*/
private started;
private shutdown;
private options;
private serverAddressString;
private readonly channelzEnabled;
private channelzRef;
private channelzTrace;
private callTracker;
private listenerChildrenTracker;
private sessionChildrenTracker;
private readonly maxConnectionAgeMs;
private readonly maxConnectionAgeGraceMs;
private readonly keepaliveTimeMs;
private readonly keepaliveTimeoutMs;
private readonly sessionIdleTimeout;
private readonly interceptors;
/**
* Options that will be used to construct all Http2Server instances for this
* Server.
*/
private commonServerOptions;
constructor(options?: ServerOptions);
private getChannelzInfo;
private getChannelzSessionInfo;
private trace;
private keepaliveTrace;
addProtoService(): never;
addService(service: ServiceDefinition, implementation: UntypedServiceImplementation): void;
removeService(service: ServiceDefinition): void;
bind(port: string, creds: ServerCredentials): never;
private registerListenerToChannelz;
private createHttp2Server;
private bindOneAddress;
private bindManyPorts;
private bindAddressList;
private resolvePort;
private bindPort;
private normalizePort;
bindAsync(port: string, creds: ServerCredentials, callback: (error: Error | null, port: number) => void): void;
private registerInjectorToChannelz;
createConnectionInjector(credentials: ServerCredentials): ConnectionInjector;
private closeServer;
private closeSession;
private completeUnbind;
/**
* Unbind a previously bound port, or cancel an in-progress bindAsync
* operation. If port 0 was bound, only the actual bound port can be
* unbound. For example, if bindAsync was called with "localhost:0" and the
* bound port result was 54321, it can be unbound as "localhost:54321".
* @param port
*/
unbind(port: string): void;
/**
* Gracefully close all connections associated with a previously bound port.
* After the grace time, forcefully close all remaining open connections.
*
* If port 0 was bound, only the actual bound port can be
* drained. For example, if bindAsync was called with "localhost:0" and the
* bound port result was 54321, it can be drained as "localhost:54321".
* @param port
* @param graceTimeMs
* @returns
*/
drain(port: string, graceTimeMs: number): void;
forceShutdown(): void;
register(name: string, handler: HandleCall, serialize: Serialize, deserialize: Deserialize, type: string): boolean;
unregister(name: string): boolean;
/**
* @deprecated No longer needed as of version 1.10.x
*/
start(): void;
tryShutdown(callback: (error?: Error) => void): void;
addHttp2Port(): never;
/**
* Get the channelz reference object for this server. The returned value is
* garbage if channelz is disabled for this server.
* @returns
*/
getChannelzRef(): ServerRef;
private _verifyContentType;
private _retrieveHandler;
private _respondWithError;
private _channelzHandler;
private _streamHandler;
private _runHandlerForCall;
private _setupHandlers;
private _sessionHandler;
private _channelzSessionHandler;
private enableIdleTimeout;
private onIdleTimeout;
private onStreamOpened;
private onStreamClose;
}