UNPKG

@aptpod/iscp-ts

Version:

iSCP 2.0 client library for TypeScript

170 lines 5.56 kB
const WILDCARD = '#'; /** * QoSを表します。 * @category Enum * @enum */ export const QOS = { /** 低信頼。 */ UNRELIABLE: 1, /** 高信頼。 */ RELIABLE: 2, /** 信頼性のあるトランスポートを利用する低信頼。 */ PARTIAL: 3, }; /** * データポイントを表します。 * * データポイントは、経過時間を付与されたバイナリデータです。 バイナリデータのことをペイロードと呼びます。 * @category Data ID and Data Point */ export class DataPoint { constructor(init) { this.elapsedTime = init.elapsedTime; this.payload = init.payload; } } /** * データポイントの、名称とデータ型を表す識別子です。 * * おもに、ブローカーおよびノードでのデータの意味と型の特定、 * ダウンストリームフィルタにて指定された受信条件に各時系列データポイントが合致するかどうかの判定、などに使用されます。 * * 特殊文字 ``/`` はセパレータです。名称や型の階層構造を表現することができます。 * * @category Data ID and Data Point */ export class DataId { constructor(init) { this.name = init.name; this.type = init.type; } /** * DataIdの文字列表現から{@link DataId}を生成します。 */ static parse(dataId) { const sp = dataId.split(':'); if (sp.length !== 2) { throw new TypeError(`invalid dataId[${dataId}]`); } const [type, name] = sp; return new DataId({ type, name, }); } /** * DataIdを文字列表現に変換します。 */ toString() { return `${this.type}:${this.name}`; } /** * DataIdを再帰的に複製します。 */ deepCopy() { return new DataId({ name: this.name, type: this.type, }); } } /** * ストリームチャンクの中のデータポイントをデータIDごとにまとめた集合です。 */ export class DataPointGroup { constructor(init) { this.dataIdOrAlias = init.dataIdOrAlias; this.dataPoints = init.dataPoints; } } /** * 受信するデータを指定するためのデータフィルタです。 * * 名称や型の指定において階層構造を表現したいときには、特殊文字 ``/`` をセパレータとして使用することができます。 * * 特殊文字 ``#`` はマルチレベルワイルドカードです。 * * - フィルタが ``#`` のとき、 ``name`` はマッチします。 * - フィルタが ``#`` のとき、 ``group/name`` はマッチします。 * - フィルタが ``group/#`` のとき、 ``group/name`` はマッチします。 * - フィルタが ``group/#`` のとき、 ``group/sub-group/name`` はマッチします。 * - フィルタが ``group/#`` のとき、 ``other-group/name`` はマッチしません。 * * 特殊文字 ``+`` は単一レベルワイルドカードです。 * * - フィルタが ``+`` のとき、 ``name`` はマッチします。 * - フィルタが ``group/+`` のとき、 ``group/name`` はマッチします。 * - フィルタが ``group/+/name`` のとき、 ``group/sub-group/name`` はマッチします。 * - フィルタが ``group/+/name`` のとき、 ``group/other-group/name`` はマッチします。 * - フィルタが ``group/+/name`` のとき、 ``group/other-group/some-name`` はマッチしません。 * * @category Downstream */ export class DataFilter { constructor(init) { this.name = init.name; this.type = init.type; } /** * 全データ型、全データ名称を受信対象とするデータフィルタを取得します。 */ static fullOpen() { return new DataFilter({ name: WILDCARD, type: WILDCARD, }); } /** * データフィルタの文字列表現から{@link DataFilter}を生成します。 */ static parse(dataId) { const sp = dataId.split(':'); if (sp.length !== 2) { throw new TypeError(`invalid dataId[${dataId}]`); } const [type, name] = sp; return new DataFilter({ type, name, }); } /** * データフィルタの文字列表現を取得します。 */ toString() { return `${this.type}:${this.name}`; } } /** * ダウンストリームフィルタを表します。 * @category Downstream */ export class DownstreamFilter { constructor(init) { this.sourceNodeId = init.sourceNodeId; this.dataFilters = init.dataFilters; } /** * 指定したノードが送信するすべてのデータを取得するフィルタです。 * @param sourceNodeId データ取得対象とする送信元ノード。 */ static allFor(sourceNodeId) { return new DownstreamFilter({ sourceNodeId, dataFilters: [DataFilter.fullOpen()], }); } } /** * ストリームを時間で区切ったデータポイントのまとまりです。 * * iSCPにおけるデータ伝送は、このチャンク単位で行われます。 */ export class StreamChunk { constructor(init) { this.sequenceNumber = init.sequenceNumber; this.dataPointGroups = init.dataPointGroups; } } //# sourceMappingURL=common.js.map