/// /// import * as http2 from 'http2'; import { Status } from './constants'; import { InterceptingListener, MessageContext, StatusObject } from './call-interface'; import { CallEventTracker, Transport } from './transport'; export interface SubchannelCall { cancelWithStatus(status: Status, details: string): void; getPeer(): string; sendMessageWithContext(context: MessageContext, message: Buffer): void; startRead(): void; halfClose(): void; getCallNumber(): number; } export interface StatusObjectWithRstCode extends StatusObject { rstCode?: number; } export interface SubchannelCallInterceptingListener extends InterceptingListener { onReceiveStatus(status: StatusObjectWithRstCode): void; } export declare class Http2SubchannelCall implements SubchannelCall { private readonly http2Stream; private readonly callEventTracker; private readonly listener; private readonly transport; private readonly callId; private decoder; private isReadFilterPending; private isPushPending; private canPush; /** * Indicates that an 'end' event has come from the http2 stream, so there * will be no more data events. */ private readsClosed; private statusOutput; private unpushedReadMessages; private mappedStatusCode; private finalStatus; private internalError; constructor(http2Stream: http2.ClientHttp2Stream, callEventTracker: CallEventTracker, listener: SubchannelCallInterceptingListener, transport: Transport, callId: number); onDisconnect(): void; private outputStatus; private trace; /** * On first call, emits a 'status' event with the given StatusObject. * Subsequent calls are no-ops. * @param status The status of the call. */ private endCall; private maybeOutputStatus; private push; private tryPush; private handleTrailers; private destroyHttp2Stream; cancelWithStatus(status: Status, details: string): void; getStatus(): StatusObject | null; getPeer(): string; getCallNumber(): number; startRead(): void; sendMessageWithContext(context: MessageContext, message: Buffer): void; halfClose(): void; }