UNPKG

@aptpod/iscp-ts

Version:

iSCP 2.0 client library for TypeScript

523 lines (522 loc) 29.1 kB
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { if (kind === "m") throw new TypeError("Private method is not writable"); if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; }; var _Downstream_instances, _Downstream_logger, _Downstream_ackInterval, _Downstream_omitEmptyChunk, _Downstream_streamIdAlias, _Downstream_qos, _Downstream_expiryInterval, _Downstream_filters, _Downstream_id, _Downstream_serverTime, _Downstream_dataIdAliasMap, _Downstream_upstreamInfoAliasMap, _Downstream_ackIdSequence, _Downstream_dataIdAliasSequence, _Downstream_upstreamInfoAliasSequence, _Downstream_isClosedResolver, _Downstream_isDrainingResolver, _Downstream_ackMetadataRequestIds, _Downstream_ackChunkResults, _Downstream_ackUpstreamInfoMap, _Downstream_ackDataIdAliasMap, _Downstream_resumeRequester, _Downstream_closeRequester, _Downstream_chunkAckSender, _Downstream_metadataAckSender, _Downstream_messageChunkIterator, _Downstream_messageChunkAckCompleteIterator, _Downstream_messageMetadataIterator, _Downstream_reopenIterator, _Downstream_abortController, _Downstream_modelChunkEvent, _Downstream_modelMetadataEvent, _Downstream_closedEvent, _Downstream_closeLock, _Downstream_start, _Downstream_readChunkLoop, _Downstream_readMetadataLoop, _Downstream_readReopen, _Downstream_readChunkAckComplete, _Downstream_flushAckLoop, _Downstream_close; import AwaitLock from 'await-lock'; import { ISCPException } from './exceptions'; import { DataId, UpstreamInfo, DataFilter, DownstreamFilter, DownstreamChunkAck, DownstreamChunkAckExtensionFields, RESULT_CODE, DownstreamChunkResult, DownstreamChunkResultExtensionFields, DownstreamResumeRequest, DownstreamResumeRequestExtensionFields, DownstreamCloseRequest, DownstreamCloseRequestExtensionFields, DownstreamMetadataAck, DownstreamMetadataAckExtensionFields, } from './message'; import { DownstreamChunk as Model$DownstreamChunk, DownstreamMetadata as Model$DownstreamMetadata, DataPointGroup as Model$DataPointGroup, DownstreamState, } from './model'; import { Resolver } from './utils/resolver'; import { Sequence } from './sequence'; import { Ticker } from './utils/ticker'; import { LOGGER_TAG } from './constant'; import { TypedEvent } from './utils/typed-event'; import { AliasMap } from './utils/alias-map'; import { ISCPFailedMessageError, ISCPReconnectingError } from './exceptions/exceptions'; /** * ダウンストリームを閉じた時のイベントです。 * @category Downstream */ export class DownstreamClosedEvent { constructor(init) { this.state = init.state; this.error = init.error; } } /** * ダウンストリームを表すクラスです。 * * @attention このクラスのオブジェクトは、必ず{@link Conn}の{@link Conn.openDownstream}を使用して生成してください。 * * @category Downstream * * @example * ```ts * const example = async () => { * const conn = await Conn.connect(...) * const downstream = conn.openDownstream(...) * try * // ... * finally { * await downstream.close() * } * } * ``` */ export class Downstream { /** * @internal */ static async start(config) { const downstream = new Downstream(config); await __classPrivateFieldGet(downstream, _Downstream_instances, "m", _Downstream_start).call(downstream); return downstream; } /** * @internal */ constructor(config) { _Downstream_instances.add(this); _Downstream_logger.set(this, void 0); _Downstream_ackInterval.set(this, void 0); _Downstream_omitEmptyChunk.set(this, void 0); _Downstream_streamIdAlias.set(this, void 0); _Downstream_qos.set(this, void 0); _Downstream_expiryInterval.set(this, void 0); _Downstream_filters.set(this, void 0); _Downstream_id.set(this, void 0); _Downstream_serverTime.set(this, void 0); _Downstream_dataIdAliasMap.set(this, void 0); _Downstream_upstreamInfoAliasMap.set(this, void 0); _Downstream_ackIdSequence.set(this, void 0); _Downstream_dataIdAliasSequence.set(this, void 0); _Downstream_upstreamInfoAliasSequence.set(this, void 0); _Downstream_isClosedResolver.set(this, void 0); _Downstream_isDrainingResolver.set(this, void 0); _Downstream_ackMetadataRequestIds.set(this, void 0); _Downstream_ackChunkResults.set(this, void 0); _Downstream_ackUpstreamInfoMap.set(this, void 0); _Downstream_ackDataIdAliasMap.set(this, void 0); _Downstream_resumeRequester.set(this, void 0); _Downstream_closeRequester.set(this, void 0); _Downstream_chunkAckSender.set(this, void 0); _Downstream_metadataAckSender.set(this, void 0); _Downstream_messageChunkIterator.set(this, void 0); _Downstream_messageChunkAckCompleteIterator.set(this, void 0); _Downstream_messageMetadataIterator.set(this, void 0); _Downstream_reopenIterator.set(this, void 0); _Downstream_abortController.set(this, void 0); _Downstream_modelChunkEvent.set(this, void 0); _Downstream_modelMetadataEvent.set(this, void 0); _Downstream_closedEvent.set(this, void 0); _Downstream_closeLock.set(this, void 0); // Logger __classPrivateFieldSet(this, _Downstream_logger, config.logger, "f"); // Config __classPrivateFieldSet(this, _Downstream_ackInterval, config.ackInterval, "f"); __classPrivateFieldSet(this, _Downstream_omitEmptyChunk, config.omitEmptyChunk, "f"); // From DownstreamOpenRequest __classPrivateFieldSet(this, _Downstream_streamIdAlias, config.idAlias, "f"); __classPrivateFieldSet(this, _Downstream_qos, config.qos, "f"); __classPrivateFieldSet(this, _Downstream_expiryInterval, config.expiryInterval, "f"); __classPrivateFieldSet(this, _Downstream_filters, config.filters, "f"); // From DownstreamOpenResponse __classPrivateFieldSet(this, _Downstream_id, config.id, "f"); __classPrivateFieldSet(this, _Downstream_serverTime, config.serverTime, "f"); // State __classPrivateFieldSet(this, _Downstream_dataIdAliasMap, AliasMap.fromAliases(config.dataIdAliases ?? {}), "f"); __classPrivateFieldSet(this, _Downstream_upstreamInfoAliasMap, AliasMap.fromAliases({}), "f"); // Sequences __classPrivateFieldSet(this, _Downstream_ackIdSequence, Sequence.forAckId(), "f"); __classPrivateFieldSet(this, _Downstream_dataIdAliasSequence, config.dataIdAliasSequence ?? Sequence.forDataIdAlias(), "f"); __classPrivateFieldSet(this, _Downstream_upstreamInfoAliasSequence, Sequence.forDataIdAlias(), "f"); // status __classPrivateFieldSet(this, _Downstream_isClosedResolver, new Resolver(), "f"); __classPrivateFieldSet(this, _Downstream_isDrainingResolver, new Resolver(), "f"); // ack __classPrivateFieldSet(this, _Downstream_ackMetadataRequestIds, [], "f"); __classPrivateFieldSet(this, _Downstream_ackChunkResults, [], "f"); __classPrivateFieldSet(this, _Downstream_ackUpstreamInfoMap, new Map(), "f"); __classPrivateFieldSet(this, _Downstream_ackDataIdAliasMap, new Map(), "f"); // requester & sender __classPrivateFieldSet(this, _Downstream_resumeRequester, config.resumeRequester, "f"); __classPrivateFieldSet(this, _Downstream_closeRequester, config.closeRequester, "f"); __classPrivateFieldSet(this, _Downstream_chunkAckSender, config.chunkAckSender, "f"); __classPrivateFieldSet(this, _Downstream_metadataAckSender, config.metadataAckSender, "f"); __classPrivateFieldSet(this, _Downstream_reopenIterator, config.reopenIterator, "f"); // message iterator __classPrivateFieldSet(this, _Downstream_messageChunkIterator, config.chunkIterator, "f"); __classPrivateFieldSet(this, _Downstream_messageChunkAckCompleteIterator, config.chunkAckCompleteIterator, "f"); __classPrivateFieldSet(this, _Downstream_messageMetadataIterator, config.metadataIterator, "f"); __classPrivateFieldSet(this, _Downstream_abortController, new AbortController(), "f"); __classPrivateFieldSet(this, _Downstream_modelChunkEvent, new TypedEvent(), "f"); __classPrivateFieldSet(this, _Downstream_modelMetadataEvent, new TypedEvent(), "f"); __classPrivateFieldSet(this, _Downstream_closedEvent, new TypedEvent(), "f"); __classPrivateFieldSet(this, _Downstream_closeLock, new AwaitLock(), "f"); } /** * ストリームIDを取得します。 * @returns ストリームID */ get id() { return __classPrivateFieldGet(this, _Downstream_id, "f"); } /** * ダウンストリームを開いた時のサーバー時刻(ナノ秒)を取得します。 * @returns ダウンストリームを開いた時のサーバー時刻(ナノ秒) */ get serverTime() { return __classPrivateFieldGet(this, _Downstream_serverTime, "f"); } /** * 有効期限を取得します。 * @returns ストリームの有効期限(秒) */ get expiryInterval() { return __classPrivateFieldGet(this, _Downstream_expiryInterval, "f"); } /** * QoSを取得します。 * @returns QoS */ get qos() { return __classPrivateFieldGet(this, _Downstream_qos, "f"); } /** * Ack返却間隔(秒)を取得します。 * @returns Ack返却間隔(秒) */ get ackInterval() { return __classPrivateFieldGet(this, _Downstream_ackInterval, "f"); } /** * 空チャンク省略フラグを取得します。 */ get omitEmptyChunk() { return __classPrivateFieldGet(this, _Downstream_omitEmptyChunk, "f"); } /** * ダウンストリームフィルタのリストを取得します。 * @returns ダウンストリームフィルタのリスト */ get filters() { return __classPrivateFieldGet(this, _Downstream_filters, "f").map((filter) => { return new DownstreamFilter({ sourceNodeId: filter.sourceNodeId, dataFilters: filter.dataFilters.map((dataFilter) => { return new DataFilter({ name: dataFilter.name, type: dataFilter.type, }); }), }); }); } /** * ストリームの状態を取得します。 * @returns ダウンストリームの状態 */ get state() { return new DownstreamState({ dataIdAliases: __classPrivateFieldGet(this, _Downstream_dataIdAliasMap, "f").toAliases(), upstreamInfos: __classPrivateFieldGet(this, _Downstream_upstreamInfoAliasMap, "f").toAliases(), lastIssuedDataIdAlias: __classPrivateFieldGet(this, _Downstream_dataIdAliasSequence, "f").current, lastIssuedUpstreamInfoAlias: __classPrivateFieldGet(this, _Downstream_upstreamInfoAliasSequence, "f").current, lastIssuedAckId: __classPrivateFieldGet(this, _Downstream_ackIdSequence, "f").current, }); } /** * ダウンストリームが閉じるまで待機します。 */ async waitClosed() { await __classPrivateFieldGet(this, _Downstream_isClosedResolver, "f").wait(); } /** * ダウンストリームを閉じます。 */ async close() { await __classPrivateFieldGet(this, _Downstream_instances, "m", _Downstream_close).call(this); } addEventListener(name, listener, options) { switch (name) { case Downstream.EVENT.CHUNK: options?.once ? __classPrivateFieldGet(this, _Downstream_modelChunkEvent, "f").once(listener) : __classPrivateFieldGet(this, _Downstream_modelChunkEvent, "f").on(listener); return; case Downstream.EVENT.METADATA: options?.once ? __classPrivateFieldGet(this, _Downstream_modelMetadataEvent, "f").once(listener) : __classPrivateFieldGet(this, _Downstream_modelMetadataEvent, "f").on(listener); return; case Downstream.EVENT.CLOSED: options?.once ? __classPrivateFieldGet(this, _Downstream_closedEvent, "f").once(listener) : __classPrivateFieldGet(this, _Downstream_closedEvent, "f").on(listener); return; default: throw new ISCPException('Unrecognized EventName.'); } } removeEventListener(name, listener) { switch (name) { case Downstream.EVENT.CHUNK: __classPrivateFieldGet(this, _Downstream_modelChunkEvent, "f").off(listener); return; case Downstream.EVENT.METADATA: __classPrivateFieldGet(this, _Downstream_modelMetadataEvent, "f").off(listener); return; case Downstream.EVENT.CLOSED: __classPrivateFieldGet(this, _Downstream_closedEvent, "f").off(listener); return; default: throw new ISCPException('Unrecognized EventName.'); } } } _Downstream_logger = new WeakMap(), _Downstream_ackInterval = new WeakMap(), _Downstream_omitEmptyChunk = new WeakMap(), _Downstream_streamIdAlias = new WeakMap(), _Downstream_qos = new WeakMap(), _Downstream_expiryInterval = new WeakMap(), _Downstream_filters = new WeakMap(), _Downstream_id = new WeakMap(), _Downstream_serverTime = new WeakMap(), _Downstream_dataIdAliasMap = new WeakMap(), _Downstream_upstreamInfoAliasMap = new WeakMap(), _Downstream_ackIdSequence = new WeakMap(), _Downstream_dataIdAliasSequence = new WeakMap(), _Downstream_upstreamInfoAliasSequence = new WeakMap(), _Downstream_isClosedResolver = new WeakMap(), _Downstream_isDrainingResolver = new WeakMap(), _Downstream_ackMetadataRequestIds = new WeakMap(), _Downstream_ackChunkResults = new WeakMap(), _Downstream_ackUpstreamInfoMap = new WeakMap(), _Downstream_ackDataIdAliasMap = new WeakMap(), _Downstream_resumeRequester = new WeakMap(), _Downstream_closeRequester = new WeakMap(), _Downstream_chunkAckSender = new WeakMap(), _Downstream_metadataAckSender = new WeakMap(), _Downstream_messageChunkIterator = new WeakMap(), _Downstream_messageChunkAckCompleteIterator = new WeakMap(), _Downstream_messageMetadataIterator = new WeakMap(), _Downstream_reopenIterator = new WeakMap(), _Downstream_abortController = new WeakMap(), _Downstream_modelChunkEvent = new WeakMap(), _Downstream_modelMetadataEvent = new WeakMap(), _Downstream_closedEvent = new WeakMap(), _Downstream_closeLock = new WeakMap(), _Downstream_instances = new WeakSet(), _Downstream_start = async function _Downstream_start() { Promise.all([ __classPrivateFieldGet(this, _Downstream_instances, "m", _Downstream_flushAckLoop).call(this, __classPrivateFieldGet(this, _Downstream_abortController, "f").signal), __classPrivateFieldGet(this, _Downstream_instances, "m", _Downstream_readChunkLoop).call(this), __classPrivateFieldGet(this, _Downstream_instances, "m", _Downstream_readChunkAckComplete).call(this), __classPrivateFieldGet(this, _Downstream_instances, "m", _Downstream_readMetadataLoop).call(this), __classPrivateFieldGet(this, _Downstream_instances, "m", _Downstream_readReopen).call(this), ]).catch((error) => { const overwriteError = error instanceof Error ? error : new Error(String(error)); __classPrivateFieldGet(this, _Downstream_instances, "m", _Downstream_close).call(this, { overwriteError, }); }); }, _Downstream_readChunkLoop = async function _Downstream_readChunkLoop() { for await (const messageChunk of __classPrivateFieldGet(this, _Downstream_messageChunkIterator, "f")) { registerWithUpstreamAliases({ upstreamOrAlias: messageChunk.upstreamOrAlias, upstreamInfoAliasMap: __classPrivateFieldGet(this, _Downstream_upstreamInfoAliasMap, "f"), ackUpstreamInfoAliases: __classPrivateFieldGet(this, _Downstream_ackUpstreamInfoMap, "f"), issueAlias: __classPrivateFieldGet(this, _Downstream_upstreamInfoAliasSequence, "f").next.bind(__classPrivateFieldGet(this, _Downstream_upstreamInfoAliasSequence, "f")), }); const upstreamInfo = getUpstreamInfo({ upstreamOrAlias: messageChunk.upstreamOrAlias, upstreamInfoAliasMap: __classPrivateFieldGet(this, _Downstream_upstreamInfoAliasMap, "f"), }); __classPrivateFieldGet(this, _Downstream_ackChunkResults, "f").push(new DownstreamChunkResult({ resultCode: RESULT_CODE.SUCCEEDED, resultString: 'OK', sequenceNumberInUpstream: messageChunk.streamChunk.sequenceNumber, streamIdOfUpstream: upstreamInfo?.streamId, extensionFields: new DownstreamChunkResultExtensionFields(), })); const modelDataPointGroups = messageChunk.streamChunk.dataPointGroups.map((group) => { registerWithDataIdAliases({ dataIdOrAlias: group.dataIdOrAlias, dataIdAliasMap: __classPrivateFieldGet(this, _Downstream_dataIdAliasMap, "f"), ackDataIdAliases: __classPrivateFieldGet(this, _Downstream_ackDataIdAliasMap, "f"), issueAlias: __classPrivateFieldGet(this, _Downstream_dataIdAliasSequence, "f").next.bind(__classPrivateFieldGet(this, _Downstream_dataIdAliasSequence, "f")), }); const dataId = getDataId({ dataIdOrAlias: group.dataIdOrAlias, dataIdAliasMap: __classPrivateFieldGet(this, _Downstream_dataIdAliasMap, "f"), }); return new Model$DataPointGroup({ dataId, dataPoints: group.dataPoints, }); }); const modelChunk = new Model$DownstreamChunk({ upstreamInfo, sequenceNumber: messageChunk.streamChunk.sequenceNumber, dataPointGroups: modelDataPointGroups, }); __classPrivateFieldGet(this, _Downstream_modelChunkEvent, "f").emit(modelChunk); } }, _Downstream_readMetadataLoop = async function _Downstream_readMetadataLoop() { for await (const messageMetadata of __classPrivateFieldGet(this, _Downstream_messageMetadataIterator, "f")) { /* const metadataAck = new DownstreamMetadataAck({ requestId: messageMetadata.requestId, resultCode: RESULT_CODE.SUCCEEDED, resultString: 'OK', extensionFields: new DownstreamMetadataAckExtensionFields(), }) // await this.#metadataAckSender(metadataAck) */ __classPrivateFieldGet(this, _Downstream_ackMetadataRequestIds, "f").push(messageMetadata.requestId); const modelMetadata = new Model$DownstreamMetadata({ sourceNodeId: messageMetadata.sourceNodeId, metadata: messageMetadata.metadata, }); __classPrivateFieldGet(this, _Downstream_modelMetadataEvent, "f").emit(modelMetadata); } }, _Downstream_readReopen = async function _Downstream_readReopen() { // eslint-disable-next-line @typescript-eslint/no-unused-vars for await (const _ of __classPrivateFieldGet(this, _Downstream_reopenIterator, "f")) { const response = await __classPrivateFieldGet(this, _Downstream_resumeRequester, "f").call(this, new DownstreamResumeRequest({ requestId: 0, streamId: __classPrivateFieldGet(this, _Downstream_id, "f"), desiredStreamIdAlias: __classPrivateFieldGet(this, _Downstream_streamIdAlias, "f"), extensionFields: new DownstreamResumeRequestExtensionFields(), })); if (response.resultCode !== RESULT_CODE.SUCCEEDED) { throw new ISCPFailedMessageError(response); } } }, _Downstream_readChunkAckComplete = async function _Downstream_readChunkAckComplete() { for await (const message of __classPrivateFieldGet(this, _Downstream_messageChunkAckCompleteIterator, "f")) { if (message.resultCode !== RESULT_CODE.SUCCEEDED) { __classPrivateFieldGet(this, _Downstream_logger, "f").warn(LOGGER_TAG.DOWNSTREAM, `code[${message.resultCode}],message,[${message.resultString}]`); } } }, _Downstream_flushAckLoop = async function _Downstream_flushAckLoop(signal) { const ticker = Ticker.of({ delayMs: __classPrivateFieldGet(this, _Downstream_ackInterval, "f") * 1e3, signal, }); const chunkAckQueue = []; const metadataAckQueue = []; // eslint-disable-next-line @typescript-eslint/no-unused-vars for await (const _ of ticker) { for (const requestId of __classPrivateFieldGet(this, _Downstream_ackMetadataRequestIds, "f")) { const metadataAck = new DownstreamMetadataAck({ requestId, resultCode: RESULT_CODE.SUCCEEDED, resultString: 'OK', extensionFields: new DownstreamMetadataAckExtensionFields(), }); metadataAckQueue.push(metadataAck); } __classPrivateFieldSet(this, _Downstream_ackMetadataRequestIds, [], "f"); if (__classPrivateFieldGet(this, _Downstream_ackChunkResults, "f").length > 0) { const chunkAck = new DownstreamChunkAck({ ackId: __classPrivateFieldGet(this, _Downstream_ackIdSequence, "f").next(), streamIdAlias: __classPrivateFieldGet(this, _Downstream_streamIdAlias, "f"), results: __classPrivateFieldGet(this, _Downstream_ackChunkResults, "f"), upstreamAliases: Object.fromEntries(__classPrivateFieldGet(this, _Downstream_ackUpstreamInfoMap, "f")), dataIdAliases: Object.fromEntries(__classPrivateFieldGet(this, _Downstream_ackDataIdAliasMap, "f")), extensionFields: new DownstreamChunkAckExtensionFields(), }); chunkAckQueue.push(chunkAck); __classPrivateFieldSet(this, _Downstream_ackChunkResults, [], "f"); __classPrivateFieldGet(this, _Downstream_ackUpstreamInfoMap, "f").clear(); __classPrivateFieldGet(this, _Downstream_ackDataIdAliasMap, "f").clear(); } try { for (;;) { if (metadataAckQueue.length === 0) { break; } const metadataAck = metadataAckQueue[0]; await __classPrivateFieldGet(this, _Downstream_metadataAckSender, "f").call(this, metadataAck); metadataAckQueue.shift(); } } catch (error) { if (error instanceof ISCPReconnectingError) { __classPrivateFieldGet(this, _Downstream_logger, "f").warn(LOGGER_TAG.DOWNSTREAM, `failed to send metadata ack. stream_id [${__classPrivateFieldGet(this, _Downstream_id, "f")}]`, error); continue; } throw error; } try { for (;;) { if (chunkAckQueue.length === 0) { break; } const chunkAck = chunkAckQueue[0]; await __classPrivateFieldGet(this, _Downstream_chunkAckSender, "f").call(this, chunkAck); chunkAckQueue.shift(); } } catch (error) { if (error instanceof ISCPReconnectingError) { __classPrivateFieldGet(this, _Downstream_logger, "f").warn(LOGGER_TAG.DOWNSTREAM, `failed to send chunk ack. stream_id [${__classPrivateFieldGet(this, _Downstream_id, "f")}]`, error); continue; } throw error; } } }, _Downstream_close = async function _Downstream_close(config) { const overwriteError = config?.overwriteError; if (__classPrivateFieldGet(this, _Downstream_isClosedResolver, "f").isDone) { return; } if (__classPrivateFieldGet(this, _Downstream_isDrainingResolver, "f").isDone) { const errorMessage = 'Already draining.'; throw new ISCPException(errorMessage); } __classPrivateFieldGet(this, _Downstream_isDrainingResolver, "f").resolve(); try { await __classPrivateFieldGet(this, _Downstream_closeLock, "f").acquireAsync(); if (__classPrivateFieldGet(this, _Downstream_isClosedResolver, "f").isDone) { return; } __classPrivateFieldGet(this, _Downstream_abortController, "f").abort(); const response = await __classPrivateFieldGet(this, _Downstream_closeRequester, "f").call(this, new DownstreamCloseRequest({ requestId: 0, streamId: __classPrivateFieldGet(this, _Downstream_id, "f"), extensionFields: new DownstreamCloseRequestExtensionFields(), })); if (response.resultCode !== RESULT_CODE.SUCCEEDED) { __classPrivateFieldGet(this, _Downstream_logger, "f").error(LOGGER_TAG.DOWNSTREAM, `failed to close a downstream. stream_id [${__classPrivateFieldGet(this, _Downstream_id, "f")}] code[${response.resultCode}] messge=[${response.resultString}]`); } __classPrivateFieldGet(this, _Downstream_closedEvent, "f").emit({ state: this.state, error: overwriteError, }); } catch (error) { __classPrivateFieldGet(this, _Downstream_closedEvent, "f").emit(new DownstreamClosedEvent({ state: this.state, error: error instanceof Error ? error : new Error(String(error)), })); } finally { __classPrivateFieldGet(this, _Downstream_closeLock, "f").release(); __classPrivateFieldGet(this, _Downstream_isClosedResolver, "f").resolve(); __classPrivateFieldGet(this, _Downstream_modelChunkEvent, "f").dispose(); __classPrivateFieldGet(this, _Downstream_modelMetadataEvent, "f").dispose(); __classPrivateFieldGet(this, _Downstream_closedEvent, "f").dispose(); } }; /** * @event イベント */ Downstream.EVENT = { /** ダウンストリームチャンクを受信した時に呼び出されるイベントです。 */ CHUNK: 'chunk', /** ダウンストリームメタデータを受信した時に呼び出されるイベントです。 */ METADATA: 'metadata', /** ダウンストリームを閉じた時に呼び出されるイベントです。 */ CLOSED: 'closed', }; // // Static Functions // const registerWithUpstreamAliases = (params) => { const { upstreamOrAlias, upstreamInfoAliasMap, ackUpstreamInfoAliases, issueAlias } = params; if (upstreamOrAlias instanceof UpstreamInfo) { const info = upstreamOrAlias; const alias = upstreamInfoAliasMap.findAlias(info); if (typeof alias === 'undefined') { const issuedAlias = issueAlias(); upstreamInfoAliasMap.set(issuedAlias, info); ackUpstreamInfoAliases.set(issuedAlias, info); } } }; const getUpstreamInfo = (params) => { const { upstreamOrAlias, upstreamInfoAliasMap } = params; if (upstreamOrAlias instanceof UpstreamInfo) { return upstreamOrAlias; } const info = upstreamInfoAliasMap.get(upstreamOrAlias); if (typeof info === 'undefined') { throw new ISCPException('Not found UpstreamInfo.'); } return info; }; const registerWithDataIdAliases = (params) => { const { dataIdOrAlias, dataIdAliasMap, ackDataIdAliases, issueAlias } = params; if (dataIdOrAlias instanceof DataId) { const dataId = dataIdOrAlias; const alias = dataIdAliasMap.findAlias(dataId); if (typeof alias === 'undefined') { const issuedAlias = issueAlias(); dataIdAliasMap.set(issuedAlias, dataId); ackDataIdAliases.set(issuedAlias, dataId); } } }; const getDataId = (params) => { const { dataIdOrAlias, dataIdAliasMap } = params; if (dataIdOrAlias instanceof DataId) { return dataIdOrAlias; } const dataId = dataIdAliasMap.get(dataIdOrAlias); if (typeof dataId === 'undefined') { throw new ISCPException('Not found DataId.'); } return dataId; }; //# sourceMappingURL=downstream.js.map