@aptpod/iscp-ts
Version:
iSCP 2.0 client library for TypeScript
170 lines • 5.56 kB
JavaScript
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