async close()

in lib/eventstream_rpc.ts [701:733]


    async close() {
        return new Promise<void>(async (resolve, reject) => {
            if (this.state == OperationState.Closed) {
                resolve();
                return;
            }

            this.operationConfig.client.removeUnclosedOperation(this);

            let shouldTerminateStream: boolean = this.state == OperationState.Activated;

            this.state = OperationState.Closed;

            if (shouldTerminateStream) {
                try {
                    await this.stream.sendMessage({
                        message: {
                            type: eventstream.MessageType.ApplicationMessage,
                            flags: eventstream.MessageFlags.TerminateStream
                        }
                    });
                } catch (e) {
                    // an exception generated from trying to gently end the stream should not propagate
                }
            }

            setImmediate(() => {
                this.stream.close();
            });

            resolve();
        });
    }