node-opcua-client 2.144.0 → 2.146.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +7 -17
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
- package/dist/alarms_and_conditions/client_alarm.d.ts +0 -49
- package/dist/alarms_and_conditions/client_alarm.js +0 -110
- package/dist/alarms_and_conditions/client_alarm.js.map +0 -1
- package/dist/alarms_and_conditions/client_alarm_list.d.ts +0 -25
- package/dist/alarms_and_conditions/client_alarm_list.js +0 -98
- package/dist/alarms_and_conditions/client_alarm_list.js.map +0 -1
- package/dist/alarms_and_conditions/client_alarm_tools_acknowledge_all_conditions.d.ts +0 -18
- package/dist/alarms_and_conditions/client_alarm_tools_acknowledge_all_conditions.js +0 -193
- package/dist/alarms_and_conditions/client_alarm_tools_acknowledge_all_conditions.js.map +0 -1
- package/dist/alarms_and_conditions/client_alarm_tools_dump_event.d.ts +0 -9
- package/dist/alarms_and_conditions/client_alarm_tools_dump_event.js +0 -73
- package/dist/alarms_and_conditions/client_alarm_tools_dump_event.js.map +0 -1
- package/dist/alarms_and_conditions/client_alarm_tools_extractConditionFields.d.ts +0 -3
- package/dist/alarms_and_conditions/client_alarm_tools_extractConditionFields.js +0 -119
- package/dist/alarms_and_conditions/client_alarm_tools_extractConditionFields.js.map +0 -1
- package/dist/reconnection.d.ts +0 -9
- package/dist/reconnection.js +0 -382
- package/dist/reconnection.js.map +0 -1
package/dist/index.js
CHANGED
|
@@ -21,23 +21,13 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
|
|
|
21
21
|
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
22
22
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
23
23
|
};
|
|
24
|
-
var __importStar = (this && this.__importStar) ||
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
return ownKeys(o);
|
|
32
|
-
};
|
|
33
|
-
return function (mod) {
|
|
34
|
-
if (mod && mod.__esModule) return mod;
|
|
35
|
-
var result = {};
|
|
36
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
-
__setModuleDefault(result, mod);
|
|
38
|
-
return result;
|
|
39
|
-
};
|
|
40
|
-
})();
|
|
24
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
25
|
+
if (mod && mod.__esModule) return mod;
|
|
26
|
+
var result = {};
|
|
27
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
28
|
+
__setModuleDefault(result, mod);
|
|
29
|
+
return result;
|
|
30
|
+
};
|
|
41
31
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
32
|
exports.make_warningLog = exports.make_debugLog = exports.checkDebugFlag = exports.DataTypeDefinition = exports.makeApplicationUrn = exports.StatusCodes = exports.StatusCode = exports.coerceExpandedNodeId = exports.makeExpandedNodeId = exports.ExpandedNodeId = exports.sameNodeId = exports.coerceNodeId = exports.makeNodeId = exports.resolveNodeId = exports.NodeId = exports.setErrorLogger = exports.setWarningLogger = exports.setDebugLogger = exports.setLogLevel = exports.LogLevel = exports.hexDump = exports.crypto_utils = exports.utils = exports.ClientSecureChannelLayer = exports.SecurityPolicy = exports.ServiceCounterDataType = exports.ServerState = exports.ClientSidePublishEngine = exports.assert = void 0;
|
|
43
33
|
__exportStar(require("./client_base"), exports);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../source/index.ts"],"names":[],"mappings":";AAAA;;GAEG
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../source/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,gDAA8B;AAC9B,iDAA+B;AAC/B,mDAAiC;AACjC,wDAAsC;AACtC,+DAA6C;AAC7C,0DAAwC;AACxC,gEAA8C;AAC9C,uEAAqD;AACrD,sDAAoC;AACpC,2EAAyD;AACzD,iDAA+B;AAC/B,2CAAyB;AACzB,uDAAqC;AACrC,6EAA2D;AAC3D,uEAAqD;AACrD,6DAA2C;AAE3C,uDAA2C;AAAlC,2GAAA,MAAM,OAAA;AACf,mDAAiC;AAEjC,yEAA0E;AAAjE,gIAAA,uBAAuB,OAAA;AAEhC,uDAAwE;AAA/D,gHAAA,WAAW,OAAA;AAAE,2HAAA,sBAAsB,OAAA;AAE5C,uEAAgH;AAAvG,2HAAA,cAAc,OAAA;AAAE,qIAAA,wBAAwB,OAAA;AAEjD,yDAA2C;AAC9B,QAAA,KAAK,GAAG,MAAM,CAAC;AAE5B,oEAAsD;AACzC,QAAA,YAAY,GAAG,YAAY,CAAC;AAEzC,qDAAoH;AAA3G,2GAAA,OAAO,OAAA;AAAE,4GAAA,QAAQ,OAAA;AAAE,+GAAA,WAAW,OAAA;AAAE,kHAAA,cAAc,OAAA;AAAE,oHAAA,gBAAgB,OAAA;AAAE,kHAAA,cAAc,OAAA;AAEzF,GAAG;AACH,uDAU2B;AATvB,2GAAA,MAAM,OAAA;AACN,kHAAA,aAAa,OAAA;AACb,+GAAA,UAAU,OAAA;AACV,iHAAA,YAAY,OAAA;AACZ,+GAAA,UAAU,OAAA;AACV,mHAAA,cAAc,OAAA;AACd,uHAAA,kBAAkB,OAAA;AAElB,yHAAA,oBAAoB,OAAA;AAExB,iEAAgF;AAAvE,oHAAA,UAAU,OAAA;AAAE,qHAAA,WAAW,OAAA;AAChC,qDAAmC;AACnC,wDAAsC;AACtC,wDAAsC;AACtC,uDAAqC;AACrC,4DAA0C;AAC1C,uDAAuD;AAA9C,uHAAA,kBAAkB,OAAA;AAE3B,+DAA6C;AAC7C,4DAA0C;AAC1C,0DAAwC;AACxC,+DAA6C;AAC7C,+DAA6C;AAC7C,6DAA2C;AAC3C,2DAAyC;AACzC,0DAAwC;AACxC,oEAAkD;AAClD,6DAA2C;AAC3C,kEAAgD;AAChD,2EAAyD;AACzD,2DAAyC;AACzC,4DAA0C;AAC1C,4DAA0C;AAC1C,6EAA2D;AAC3D,qDAAsD;AAA7C,sHAAA,kBAAkB,OAAA;AAC3B,qDAAkF;AAAzE,kHAAA,cAAc,OAAA;AAAE,iHAAA,aAAa,OAAA;AAAE,mHAAA,eAAe,OAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "node-opcua-client",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.146.0",
|
|
4
4
|
"description": "pure nodejs OPCUA SDK - module client",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"clean": "npx rimraf -g node_modules dist *.tsbuildinfo certificates",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"node-opcua-basic-types": "2.139.0",
|
|
23
23
|
"node-opcua-buffer-utils": "2.139.0",
|
|
24
24
|
"node-opcua-certificate-manager": "2.143.0",
|
|
25
|
-
"node-opcua-client-dynamic-extension-object": "2.
|
|
25
|
+
"node-opcua-client-dynamic-extension-object": "2.146.0",
|
|
26
26
|
"node-opcua-common": "2.143.0",
|
|
27
27
|
"node-opcua-constants": "2.139.0",
|
|
28
28
|
"node-opcua-crypto": "4.16.0",
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
"devDependencies": {
|
|
62
62
|
"@types/underscore": "^1.13.0",
|
|
63
63
|
"dequeue": "^1.0.5",
|
|
64
|
-
"node-opcua-address-space": "2.
|
|
64
|
+
"node-opcua-address-space": "2.146.0",
|
|
65
65
|
"node-opcua-binary-stream": "2.139.0",
|
|
66
66
|
"node-opcua-factory": "2.139.0",
|
|
67
67
|
"node-opcua-leak-detector": "2.139.0",
|
|
@@ -87,7 +87,7 @@
|
|
|
87
87
|
"internet of things"
|
|
88
88
|
],
|
|
89
89
|
"homepage": "http://node-opcua.github.io/",
|
|
90
|
-
"gitHead": "
|
|
90
|
+
"gitHead": "a300e2278b431bef3ca23ed417be97f766bbd56c",
|
|
91
91
|
"files": [
|
|
92
92
|
"dist",
|
|
93
93
|
"source"
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
|
-
/// <reference types="node" />
|
|
3
|
-
import { EventEmitter } from "events";
|
|
4
|
-
import { NodeId } from "node-opcua-nodeid";
|
|
5
|
-
import { StatusCode } from "node-opcua-status-code";
|
|
6
|
-
import { Variant } from "node-opcua-variant";
|
|
7
|
-
import { ClientSession } from "../client_session";
|
|
8
|
-
export interface TVariant<T> extends Variant {
|
|
9
|
-
value: T;
|
|
10
|
-
}
|
|
11
|
-
export interface TTwoStateStatus extends TVariant<string> {
|
|
12
|
-
id: TVariant<boolean>;
|
|
13
|
-
}
|
|
14
|
-
export interface EventStuff {
|
|
15
|
-
conditionId: TVariant<NodeId>;
|
|
16
|
-
eventType: TVariant<NodeId>;
|
|
17
|
-
eventId: TVariant<Buffer>;
|
|
18
|
-
retain: TVariant<boolean>;
|
|
19
|
-
activeState: TTwoStateStatus;
|
|
20
|
-
ackedState: TTwoStateStatus;
|
|
21
|
-
confirmedState: TTwoStateStatus;
|
|
22
|
-
conditionName?: TVariant<string>;
|
|
23
|
-
}
|
|
24
|
-
export interface ClientAlarm {
|
|
25
|
-
conditionId: NodeId;
|
|
26
|
-
eventType: NodeId;
|
|
27
|
-
fields: EventStuff;
|
|
28
|
-
on(eventName: "changed", eventHandler: () => void): this;
|
|
29
|
-
acknowledge(session: ClientSession, comment: string): Promise<StatusCode>;
|
|
30
|
-
getField(fieldName: string): Variant | null;
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* describes a OPCUA Alarm as seen in the client side
|
|
34
|
-
*/
|
|
35
|
-
export declare class ClientAlarm extends EventEmitter {
|
|
36
|
-
conditionId: NodeId;
|
|
37
|
-
eventType: NodeId;
|
|
38
|
-
eventId: Buffer;
|
|
39
|
-
fields: EventStuff;
|
|
40
|
-
constructor(eventFields: EventStuff);
|
|
41
|
-
confirm(session: ClientSession, comment: string): Promise<StatusCode>;
|
|
42
|
-
update(eventFields: EventStuff): void;
|
|
43
|
-
getRetain(): boolean;
|
|
44
|
-
toString(): string;
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* @private
|
|
48
|
-
*/
|
|
49
|
-
export declare function fieldsToJson(fields: string[], eventFields: Variant[], flat?: boolean): EventStuff;
|
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.fieldsToJson = exports.ClientAlarm = void 0;
|
|
13
|
-
const events_1 = require("events");
|
|
14
|
-
const node_opcua_assert_1 = require("node-opcua-assert");
|
|
15
|
-
const node_opcua_debug_1 = require("node-opcua-debug");
|
|
16
|
-
const node_opcua_nodeid_1 = require("node-opcua-nodeid");
|
|
17
|
-
const node_opcua_utils_1 = require("node-opcua-utils");
|
|
18
|
-
const node_opcua_variant_1 = require("node-opcua-variant");
|
|
19
|
-
const warningLog = (0, node_opcua_debug_1.make_warningLog)(__filename);
|
|
20
|
-
/**
|
|
21
|
-
* describes a OPCUA Alarm as seen in the client side
|
|
22
|
-
*/
|
|
23
|
-
class ClientAlarm extends events_1.EventEmitter {
|
|
24
|
-
constructor(eventFields) {
|
|
25
|
-
super();
|
|
26
|
-
this.conditionId = (0, node_opcua_nodeid_1.resolveNodeId)(eventFields.conditionId.value);
|
|
27
|
-
this.eventType = (0, node_opcua_nodeid_1.resolveNodeId)(eventFields.eventType.value);
|
|
28
|
-
this.eventId = eventFields.eventId.value;
|
|
29
|
-
this.fields = eventFields;
|
|
30
|
-
this.update(eventFields);
|
|
31
|
-
}
|
|
32
|
-
acknowledge(session, comment) {
|
|
33
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
34
|
-
return yield session.acknowledgeCondition(this.conditionId, this.eventId, comment);
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
confirm(session, comment) {
|
|
38
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
39
|
-
return yield session.confirmCondition(this.conditionId, this.eventId, comment);
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
update(eventFields) {
|
|
43
|
-
(0, node_opcua_assert_1.assert)(this.conditionId.toString() === (0, node_opcua_nodeid_1.resolveNodeId)(eventFields.conditionId.value).toString());
|
|
44
|
-
(0, node_opcua_assert_1.assert)(this.eventType.toString() === (0, node_opcua_nodeid_1.resolveNodeId)(eventFields.eventType.value).toString());
|
|
45
|
-
this.eventId = eventFields.eventId.value;
|
|
46
|
-
this.fields = eventFields;
|
|
47
|
-
}
|
|
48
|
-
getRetain() {
|
|
49
|
-
return this.fields.retain.value;
|
|
50
|
-
}
|
|
51
|
-
toString() {
|
|
52
|
-
return (this.constructor.name +
|
|
53
|
-
": " +
|
|
54
|
-
this.conditionId.toString() +
|
|
55
|
-
" " +
|
|
56
|
-
this.eventType.toString() +
|
|
57
|
-
" " +
|
|
58
|
-
Object.entries(this.fields)
|
|
59
|
-
.filter(([key, value]) => value.dataType !== node_opcua_variant_1.DataType.Null)
|
|
60
|
-
.map(([key, value]) => key.padEnd(30) + "=" + value.toString())
|
|
61
|
-
.join("\n") +
|
|
62
|
-
"\n\n");
|
|
63
|
-
}
|
|
64
|
-
getField(fieldName) {
|
|
65
|
-
return this.fields[fieldName] || null;
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
exports.ClientAlarm = ClientAlarm;
|
|
69
|
-
/**
|
|
70
|
-
* @private
|
|
71
|
-
*/
|
|
72
|
-
function fieldsToJson(fields, eventFields, flat) {
|
|
73
|
-
function setProperty(_data, fieldName, value) {
|
|
74
|
-
let name;
|
|
75
|
-
if (!fieldName || value === null) {
|
|
76
|
-
return;
|
|
77
|
-
}
|
|
78
|
-
if (!flat) {
|
|
79
|
-
const f = fieldName.split(".");
|
|
80
|
-
if (f.length === 1) {
|
|
81
|
-
fieldName = (0, node_opcua_utils_1.lowerFirstLetter)(fieldName);
|
|
82
|
-
_data[fieldName] = value;
|
|
83
|
-
}
|
|
84
|
-
else {
|
|
85
|
-
for (let i = 0; i < f.length - 1; i++) {
|
|
86
|
-
name = (0, node_opcua_utils_1.lowerFirstLetter)(f[i]);
|
|
87
|
-
_data[name] = _data[name] || {};
|
|
88
|
-
_data = _data[name];
|
|
89
|
-
}
|
|
90
|
-
name = (0, node_opcua_utils_1.lowerFirstLetter)(f[f.length - 1]);
|
|
91
|
-
_data[name] = value;
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
else {
|
|
95
|
-
const name = fieldName.split(".").map(node_opcua_utils_1.lowerFirstLetter).join(".");
|
|
96
|
-
_data[name] = value;
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
if (fields.length > eventFields.length) {
|
|
100
|
-
warningLog("warning fields.length !== eventFields.length", fields.length, eventFields.length);
|
|
101
|
-
}
|
|
102
|
-
const data = {};
|
|
103
|
-
for (let index = 0; index < fields.length; index++) {
|
|
104
|
-
const variant = eventFields[index];
|
|
105
|
-
setProperty(data, fields[index], variant);
|
|
106
|
-
}
|
|
107
|
-
return data;
|
|
108
|
-
}
|
|
109
|
-
exports.fieldsToJson = fieldsToJson;
|
|
110
|
-
//# sourceMappingURL=client_alarm.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client_alarm.js","sourceRoot":"","sources":["../../source/alarms_and_conditions/client_alarm.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
|
-
import { EventEmitter } from "events";
|
|
3
|
-
import { ClientAlarm, EventStuff } from "./client_alarm";
|
|
4
|
-
export interface ClientAlarmList {
|
|
5
|
-
on(eventName: "alarmChanged", handler: (alarm: ClientAlarm) => void): this;
|
|
6
|
-
on(eventName: "alarmDeleted", handler: (alarm: ClientAlarm) => void): this;
|
|
7
|
-
on(eventName: "newAlarm", handler: (alarm: ClientAlarm) => void): this;
|
|
8
|
-
emit(eventName: "alarmChanged", alarm: ClientAlarm): boolean;
|
|
9
|
-
emit(eventName: "newAlarm", alarm: ClientAlarm): boolean;
|
|
10
|
-
emit(eventName: "alarmDeleted", alarm: ClientAlarm): boolean;
|
|
11
|
-
}
|
|
12
|
-
export declare class ClientAlarmList extends EventEmitter implements Iterable<ClientAlarm> {
|
|
13
|
-
private _map;
|
|
14
|
-
constructor();
|
|
15
|
-
[Symbol.iterator](): Iterator<ClientAlarm>;
|
|
16
|
-
alarms(): ClientAlarm[];
|
|
17
|
-
update(eventField: EventStuff): void;
|
|
18
|
-
removeAlarm(eventField: EventStuff): void;
|
|
19
|
-
get length(): number;
|
|
20
|
-
purgeUnusedAlarms(): void;
|
|
21
|
-
private _removeAlarm;
|
|
22
|
-
private makeKey;
|
|
23
|
-
private findAlarm;
|
|
24
|
-
private deleteAlarm;
|
|
25
|
-
}
|
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ClientAlarmList = void 0;
|
|
4
|
-
const events_1 = require("events");
|
|
5
|
-
const node_opcua_assert_1 = require("node-opcua-assert");
|
|
6
|
-
const client_alarm_1 = require("./client_alarm");
|
|
7
|
-
// maintain a set of alarm list for a client
|
|
8
|
-
class ClientAlarmList extends events_1.EventEmitter {
|
|
9
|
-
constructor() {
|
|
10
|
-
super();
|
|
11
|
-
this._map = {};
|
|
12
|
-
}
|
|
13
|
-
[Symbol.iterator]() {
|
|
14
|
-
let pointer = 0;
|
|
15
|
-
const components = Object.values(this._map);
|
|
16
|
-
return {
|
|
17
|
-
next() {
|
|
18
|
-
if (pointer >= components.length) {
|
|
19
|
-
return {
|
|
20
|
-
done: true,
|
|
21
|
-
value: components[pointer++]
|
|
22
|
-
};
|
|
23
|
-
}
|
|
24
|
-
else {
|
|
25
|
-
return {
|
|
26
|
-
done: false,
|
|
27
|
-
value: components[pointer++]
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
alarms() {
|
|
34
|
-
return Object.values(this._map);
|
|
35
|
-
}
|
|
36
|
-
update(eventField) {
|
|
37
|
-
// Spec says:
|
|
38
|
-
// Clients shall check for multiple Event Notifications for a ConditionBranch to avoid
|
|
39
|
-
// overwriting a new state delivered together with an older state from the Refresh
|
|
40
|
-
// process.
|
|
41
|
-
const { conditionId, eventType } = eventField;
|
|
42
|
-
(0, node_opcua_assert_1.assert)(conditionId, "must have a valid conditionId ( verify that event is a acknodweldgeable type");
|
|
43
|
-
const alarm = this.findAlarm(conditionId.value, eventType.value);
|
|
44
|
-
if (!alarm) {
|
|
45
|
-
const key = this.makeKey(conditionId.value, eventType.value);
|
|
46
|
-
const newAlarm = new client_alarm_1.ClientAlarm(eventField);
|
|
47
|
-
this._map[key] = newAlarm;
|
|
48
|
-
this.emit("newAlarm", newAlarm);
|
|
49
|
-
this.emit("alarmChanged", newAlarm);
|
|
50
|
-
}
|
|
51
|
-
else {
|
|
52
|
-
alarm.update(eventField);
|
|
53
|
-
this.emit("alarmChanged", alarm);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
removeAlarm(eventField) {
|
|
57
|
-
const { conditionId, eventType } = eventField;
|
|
58
|
-
const alarm = this.findAlarm(conditionId.value, eventType.value);
|
|
59
|
-
if (alarm) {
|
|
60
|
-
alarm.update(eventField);
|
|
61
|
-
this._removeAlarm(alarm);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
get length() {
|
|
65
|
-
return Object.keys(this._map).length;
|
|
66
|
-
}
|
|
67
|
-
purgeUnusedAlarms() {
|
|
68
|
-
const alarms = this.alarms();
|
|
69
|
-
for (const alarm of alarms) {
|
|
70
|
-
if (!alarm.getRetain()) {
|
|
71
|
-
this._removeAlarm(alarm);
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
_removeAlarm(alarm) {
|
|
76
|
-
this.emit("alarmDeleted", alarm);
|
|
77
|
-
this.deleteAlarm(alarm.conditionId, alarm.eventType);
|
|
78
|
-
}
|
|
79
|
-
makeKey(conditionId, eventType) {
|
|
80
|
-
return conditionId.toString() + "|" + eventType.toString();
|
|
81
|
-
}
|
|
82
|
-
findAlarm(conditionId, eventType) {
|
|
83
|
-
const key = this.makeKey(conditionId, eventType);
|
|
84
|
-
const _c = this._map[key];
|
|
85
|
-
return _c || null;
|
|
86
|
-
}
|
|
87
|
-
deleteAlarm(conditionId, eventType) {
|
|
88
|
-
const key = this.makeKey(conditionId, eventType);
|
|
89
|
-
const _c = this._map[key];
|
|
90
|
-
if (_c) {
|
|
91
|
-
delete this._map[key];
|
|
92
|
-
return true;
|
|
93
|
-
}
|
|
94
|
-
return false;
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
exports.ClientAlarmList = ClientAlarmList;
|
|
98
|
-
//# sourceMappingURL=client_alarm_list.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client_alarm_list.js","sourceRoot":"","sources":["../../source/alarms_and_conditions/client_alarm_list.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { StatusCode } from "node-opcua-status-code";
|
|
2
|
-
import { ClientSession } from "../client_session";
|
|
3
|
-
import { EventStuff } from "./client_alarm";
|
|
4
|
-
/**
|
|
5
|
-
*
|
|
6
|
-
* @param session
|
|
7
|
-
* @param eventStuff
|
|
8
|
-
* @param comment
|
|
9
|
-
*/
|
|
10
|
-
export declare function acknowledgeCondition(session: ClientSession, eventStuff: EventStuff, comment: string): Promise<StatusCode>;
|
|
11
|
-
export declare function confirmCondition(session: ClientSession, eventStuff: EventStuff, comment: string): Promise<StatusCode>;
|
|
12
|
-
/**
|
|
13
|
-
* Enumerate all events
|
|
14
|
-
* @param session
|
|
15
|
-
*/
|
|
16
|
-
export declare function findActiveConditions(session: ClientSession): Promise<EventStuff[]>;
|
|
17
|
-
export declare function acknwoledgeAllConditions(session: ClientSession, message: string): Promise<void>;
|
|
18
|
-
export declare function confirmAllConditions(session: ClientSession, message: string): Promise<void>;
|
|
@@ -1,193 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.confirmAllConditions = exports.acknwoledgeAllConditions = exports.findActiveConditions = exports.confirmCondition = exports.acknowledgeCondition = void 0;
|
|
13
|
-
const node_opcua_nodeid_1 = require("node-opcua-nodeid");
|
|
14
|
-
const node_opcua_service_filter_1 = require("node-opcua-service-filter");
|
|
15
|
-
const node_opcua_service_read_1 = require("node-opcua-service-read");
|
|
16
|
-
const node_opcua_status_code_1 = require("node-opcua-status-code");
|
|
17
|
-
const node_opcua_variant_1 = require("node-opcua-variant");
|
|
18
|
-
const node_opcua_debug_1 = require("node-opcua-debug");
|
|
19
|
-
const client_alarm_1 = require("./client_alarm");
|
|
20
|
-
const client_alarm_tools_extractConditionFields_1 = require("./client_alarm_tools_extractConditionFields");
|
|
21
|
-
const client_tools_1 = require("./client_tools");
|
|
22
|
-
const doDebug = (0, node_opcua_debug_1.checkDebugFlag)(__filename);
|
|
23
|
-
const debugLog = (0, node_opcua_debug_1.make_debugLog)(__filename);
|
|
24
|
-
const errorLog = (0, node_opcua_debug_1.make_errorLog)(__filename);
|
|
25
|
-
/**
|
|
26
|
-
*
|
|
27
|
-
* @param session
|
|
28
|
-
* @param eventStuff
|
|
29
|
-
* @param comment
|
|
30
|
-
*/
|
|
31
|
-
function acknowledgeCondition(session, eventStuff, comment) {
|
|
32
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
33
|
-
try {
|
|
34
|
-
const conditionId = eventStuff.conditionId.value;
|
|
35
|
-
const eventId = eventStuff.eventId.value;
|
|
36
|
-
return yield session.acknowledgeCondition(conditionId, eventId, comment);
|
|
37
|
-
}
|
|
38
|
-
catch (err) {
|
|
39
|
-
errorLog("Acknowledging alarm has failed !", err);
|
|
40
|
-
return node_opcua_status_code_1.StatusCodes.BadInternalError;
|
|
41
|
-
}
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
|
-
exports.acknowledgeCondition = acknowledgeCondition;
|
|
45
|
-
function confirmCondition(session, eventStuff, comment) {
|
|
46
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
47
|
-
try {
|
|
48
|
-
const conditionId = eventStuff.conditionId.value;
|
|
49
|
-
const eventId = eventStuff.eventId.value;
|
|
50
|
-
return yield session.confirmCondition(conditionId, eventId, comment);
|
|
51
|
-
}
|
|
52
|
-
catch (err) {
|
|
53
|
-
errorLog("Acknowledging alarm has failed !", err);
|
|
54
|
-
return node_opcua_status_code_1.StatusCodes.BadInternalError;
|
|
55
|
-
}
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
exports.confirmCondition = confirmCondition;
|
|
59
|
-
/**
|
|
60
|
-
* Enumerate all events
|
|
61
|
-
* @param session
|
|
62
|
-
*/
|
|
63
|
-
function findActiveConditions(session) {
|
|
64
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
65
|
-
const request = {
|
|
66
|
-
maxNotificationsPerPublish: 10000,
|
|
67
|
-
priority: 6,
|
|
68
|
-
publishingEnabled: true,
|
|
69
|
-
requestedLifetimeCount: 1000,
|
|
70
|
-
requestedMaxKeepAliveCount: 100,
|
|
71
|
-
requestedPublishingInterval: 100
|
|
72
|
-
};
|
|
73
|
-
const subscription = yield session.createSubscription2(request);
|
|
74
|
-
const itemToMonitor = {
|
|
75
|
-
attributeId: node_opcua_service_read_1.AttributeIds.EventNotifier,
|
|
76
|
-
nodeId: (0, node_opcua_nodeid_1.resolveNodeId)("Server") // i=2253
|
|
77
|
-
};
|
|
78
|
-
const fields = yield (0, client_alarm_tools_extractConditionFields_1.extractConditionFields)(session, "AcknowledgeableConditionType");
|
|
79
|
-
// note: we may want to have this select clause
|
|
80
|
-
// Or(OfType("AcknowledgeableConditionType"), OfType("RefreshStartEventType"), OfType("RefreshEndEventType"))
|
|
81
|
-
const eventFilter = (0, node_opcua_service_filter_1.constructEventFilter)(fields);
|
|
82
|
-
const monitoringParameters = {
|
|
83
|
-
discardOldest: false,
|
|
84
|
-
filter: eventFilter,
|
|
85
|
-
queueSize: 100,
|
|
86
|
-
samplingInterval: 0
|
|
87
|
-
};
|
|
88
|
-
const event_monitoringItem = yield subscription.monitor(itemToMonitor, monitoringParameters, node_opcua_service_read_1.TimestampsToReturn.Both);
|
|
89
|
-
const acknowledgeableConditions = [];
|
|
90
|
-
let refreshStartEventHasBeenReceived = false;
|
|
91
|
-
let RefreshEndEventHasBeenReceived = false;
|
|
92
|
-
const RefreshStartEventType = (0, node_opcua_nodeid_1.resolveNodeId)("RefreshStartEventType").toString();
|
|
93
|
-
const RefreshEndEventType = (0, node_opcua_nodeid_1.resolveNodeId)("RefreshEndEventType").toString();
|
|
94
|
-
const promise = new Promise((resolve, reject) => {
|
|
95
|
-
// now create a event monitored Item
|
|
96
|
-
event_monitoringItem.on("changed", (_eventFields) => {
|
|
97
|
-
const eventFields = _eventFields;
|
|
98
|
-
try {
|
|
99
|
-
if (RefreshEndEventHasBeenReceived) {
|
|
100
|
-
return;
|
|
101
|
-
}
|
|
102
|
-
// dumpEvent(session, fields, eventFields);
|
|
103
|
-
const pojo = (0, client_alarm_1.fieldsToJson)(fields, eventFields);
|
|
104
|
-
// console.log(pojo.eventType.value.toString({ addressSpace}), RefreshEndEventType, RefreshStartEventType);
|
|
105
|
-
// make sure we only start recording event after the RefreshStartEvent has been received
|
|
106
|
-
if (!refreshStartEventHasBeenReceived) {
|
|
107
|
-
if (pojo.eventType.value.toString() === RefreshStartEventType) {
|
|
108
|
-
refreshStartEventHasBeenReceived = true;
|
|
109
|
-
}
|
|
110
|
-
return;
|
|
111
|
-
}
|
|
112
|
-
if (pojo.eventType.value.toString() === RefreshEndEventType) {
|
|
113
|
-
RefreshEndEventHasBeenReceived = true;
|
|
114
|
-
resolve();
|
|
115
|
-
return;
|
|
116
|
-
}
|
|
117
|
-
if (!pojo.conditionId.value) {
|
|
118
|
-
// not a Acknowledgeable condition
|
|
119
|
-
return;
|
|
120
|
-
}
|
|
121
|
-
if (pojo.ackedState.id.dataType === node_opcua_variant_1.DataType.Boolean) {
|
|
122
|
-
acknowledgeableConditions.push(pojo);
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
catch (err) {
|
|
126
|
-
errorLog("Error !!", err);
|
|
127
|
-
}
|
|
128
|
-
});
|
|
129
|
-
// async call without waiting !
|
|
130
|
-
try {
|
|
131
|
-
(0, client_tools_1.callConditionRefresh)(subscription);
|
|
132
|
-
}
|
|
133
|
-
catch (err) {
|
|
134
|
-
// it is possible that server do not implement conditionRefresh ...
|
|
135
|
-
debugLog("Server may not implement conditionRefresh", err);
|
|
136
|
-
}
|
|
137
|
-
});
|
|
138
|
-
yield promise;
|
|
139
|
-
// now shut down susbscription
|
|
140
|
-
yield subscription.terminate();
|
|
141
|
-
return acknowledgeableConditions;
|
|
142
|
-
});
|
|
143
|
-
}
|
|
144
|
-
exports.findActiveConditions = findActiveConditions;
|
|
145
|
-
function acknwoledgeAllConditions(session, message) {
|
|
146
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
147
|
-
try {
|
|
148
|
-
let conditions = yield findActiveConditions(session);
|
|
149
|
-
if (conditions.length === 0) {
|
|
150
|
-
debugLog("Warning: cannot find conditions ");
|
|
151
|
-
}
|
|
152
|
-
// filter acknowledgable conditions (no acked yet)
|
|
153
|
-
conditions = conditions.filter((pojo) => pojo.ackedState.id.value === false);
|
|
154
|
-
const promises = [];
|
|
155
|
-
for (const eventStuff of conditions) {
|
|
156
|
-
promises.push(acknowledgeCondition(session, eventStuff, message));
|
|
157
|
-
}
|
|
158
|
-
const result = yield Promise.all(promises);
|
|
159
|
-
if (doDebug) {
|
|
160
|
-
debugLog("Acked all results: ", result.map((e) => e.toString()).join(" "));
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
catch (err) {
|
|
164
|
-
errorLog("Error", err);
|
|
165
|
-
}
|
|
166
|
-
});
|
|
167
|
-
}
|
|
168
|
-
exports.acknwoledgeAllConditions = acknwoledgeAllConditions;
|
|
169
|
-
function confirmAllConditions(session, message) {
|
|
170
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
171
|
-
try {
|
|
172
|
-
let conditions = yield findActiveConditions(session);
|
|
173
|
-
if (conditions.length === 0) {
|
|
174
|
-
debugLog("Warning: cannot find conditions ");
|
|
175
|
-
}
|
|
176
|
-
// filter acknowledgable conditions (no acked yet)
|
|
177
|
-
conditions = conditions.filter((pojo) => pojo.confirmedState.id.value === false);
|
|
178
|
-
const promises = [];
|
|
179
|
-
for (const eventStuff of conditions) {
|
|
180
|
-
promises.push(confirmCondition(session, eventStuff, message));
|
|
181
|
-
}
|
|
182
|
-
const result = yield Promise.all(promises);
|
|
183
|
-
if (doDebug) {
|
|
184
|
-
debugLog("Confirm all results: ", result.map((e) => e.toString()).join(" "));
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
catch (err) {
|
|
188
|
-
errorLog("Error", err);
|
|
189
|
-
}
|
|
190
|
-
});
|
|
191
|
-
}
|
|
192
|
-
exports.confirmAllConditions = confirmAllConditions;
|
|
193
|
-
//# sourceMappingURL=client_alarm_tools_acknowledge_all_conditions.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client_alarm_tools_acknowledge_all_conditions.js","sourceRoot":"","sources":["../../source/alarms_and_conditions/client_alarm_tools_acknowledge_all_conditions.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { IBasicSession } from "node-opcua-pseudo-session";
|
|
2
|
-
import { Variant } from "node-opcua-variant";
|
|
3
|
-
/**
|
|
4
|
-
*
|
|
5
|
-
* @param session
|
|
6
|
-
* @param fields
|
|
7
|
-
* @param eventFields
|
|
8
|
-
*/
|
|
9
|
-
export declare function dumpEvent(session: IBasicSession, fields: string[], eventFields: Variant[]): Promise<void>;
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.dumpEvent = void 0;
|
|
13
|
-
const chalk = require("chalk");
|
|
14
|
-
const node_opcua_data_model_1 = require("node-opcua-data-model");
|
|
15
|
-
const node_opcua_variant_1 = require("node-opcua-variant");
|
|
16
|
-
/**
|
|
17
|
-
*
|
|
18
|
-
* @param session
|
|
19
|
-
* @param fields
|
|
20
|
-
* @param eventFields
|
|
21
|
-
*/
|
|
22
|
-
function dumpEvent(session, fields, eventFields) {
|
|
23
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
24
|
-
function getBrowseName(_session, nodeId) {
|
|
25
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
26
|
-
const dataValue = yield _session.read({
|
|
27
|
-
attributeId: node_opcua_data_model_1.AttributeIds.BrowseName,
|
|
28
|
-
nodeId
|
|
29
|
-
});
|
|
30
|
-
if (dataValue.statusCode.isGood()) {
|
|
31
|
-
const browseName = dataValue.value.value.name;
|
|
32
|
-
return browseName;
|
|
33
|
-
}
|
|
34
|
-
else {
|
|
35
|
-
return "???";
|
|
36
|
-
}
|
|
37
|
-
});
|
|
38
|
-
}
|
|
39
|
-
function w(str, l) {
|
|
40
|
-
return (str || "").toString().padEnd(l, " ").substring(0, l);
|
|
41
|
-
}
|
|
42
|
-
function __dumpEvent1(_session, _fields, variant, index) {
|
|
43
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
44
|
-
if (variant.dataType === node_opcua_variant_1.DataType.Null) {
|
|
45
|
-
return;
|
|
46
|
-
}
|
|
47
|
-
if (variant.dataType === node_opcua_variant_1.DataType.NodeId) {
|
|
48
|
-
const name = yield getBrowseName(_session, variant.value);
|
|
49
|
-
// tslint:disable-next-line: no-console
|
|
50
|
-
console.log(chalk.yellow(w(name, 30), w(_fields[index], 25)), chalk.cyan(w(node_opcua_variant_1.DataType[variant.dataType], 10).toString()), chalk.cyan.bold(name), "(", w(variant.value, 20), ")");
|
|
51
|
-
}
|
|
52
|
-
else {
|
|
53
|
-
// tslint:disable-next-line: no-console
|
|
54
|
-
console.log(chalk.yellow(w("", 30), w(_fields[index], 25)), chalk.cyan(w(node_opcua_variant_1.DataType[variant.dataType], 10).toString()), variant.value);
|
|
55
|
-
}
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
function __dumpEvent(_session, _fields, _eventFields) {
|
|
59
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
60
|
-
let index = 0;
|
|
61
|
-
const promises = [];
|
|
62
|
-
for (const variant of _eventFields) {
|
|
63
|
-
promises.push(__dumpEvent1(_session, _fields, variant, index));
|
|
64
|
-
index++;
|
|
65
|
-
}
|
|
66
|
-
yield Promise.all(promises);
|
|
67
|
-
});
|
|
68
|
-
}
|
|
69
|
-
yield __dumpEvent(session, fields, eventFields);
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
exports.dumpEvent = dumpEvent;
|
|
73
|
-
//# sourceMappingURL=client_alarm_tools_dump_event.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client_alarm_tools_dump_event.js","sourceRoot":"","sources":["../../source/alarms_and_conditions/client_alarm_tools_dump_event.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,+BAA+B;AAC/B,iEAAqD;AAGrD,2DAAoE;AAEpE;;;;;GAKG;AACH,SAAsB,SAAS,CAAC,OAAsB,EAAE,MAAgB,EAAE,WAAsB;;QAC5F,SAAe,aAAa,CAAC,QAAuB,EAAE,MAAc;;gBAChE,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC;oBAClC,WAAW,EAAE,oCAAY,CAAC,UAAU;oBACpC,MAAM;iBACT,CAAC,CAAC;gBACH,IAAI,SAAS,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE;oBAC/B,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,IAAK,CAAC;oBAC/C,OAAO,UAAU,CAAC;iBACrB;qBAAM;oBACH,OAAO,KAAK,CAAC;iBAChB;YACL,CAAC;SAAA;QACD,SAAS,CAAC,CAAC,GAAW,EAAE,CAAS;YAC7B,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACjE,CAAC;QACD,SAAe,YAAY,CAAC,QAAuB,EAAE,OAAY,EAAE,OAAoB,EAAE,KAAa;;gBAClG,IAAI,OAAO,CAAC,QAAQ,KAAK,6BAAQ,CAAC,IAAI,EAAE;oBACpC,OAAO;iBACV;gBACD,IAAI,OAAO,CAAC,QAAQ,KAAK,6BAAQ,CAAC,MAAM,EAAE;oBACtC,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;oBAC1D,uCAAuC;oBACvC,OAAO,CAAC,GAAG,CACP,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EAChD,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,6BAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,EACxD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EACrB,GAAG,EACH,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,EACpB,GAAG,CACN,CAAC;iBACL;qBAAM;oBACH,uCAAuC;oBACvC,OAAO,CAAC,GAAG,CACP,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EAC9C,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,6BAAQ,CAAC,OAAO,CAAC,QAAkB,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,EAClE,OAAO,CAAC,KAAK,CAChB,CAAC;iBACL;YACL,CAAC;SAAA;QAED,SAAe,WAAW,CAAC,QAAuB,EAAE,OAAiB,EAAE,YAAuB;;gBAC1F,IAAI,KAAK,GAAG,CAAC,CAAC;gBACd,MAAM,QAAQ,GAAG,EAAE,CAAC;gBACpB,KAAK,MAAM,OAAO,IAAI,YAAY,EAAE;oBAChC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;oBAC/D,KAAK,EAAE,CAAC;iBACX;gBACD,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAChC,CAAC;SAAA;QACD,MAAM,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;IACpD,CAAC;CAAA;AAnDD,8BAmDC"}
|
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.extractConditionFields = void 0;
|
|
13
|
-
const node_opcua_data_model_1 = require("node-opcua-data-model");
|
|
14
|
-
const node_opcua_nodeid_1 = require("node-opcua-nodeid");
|
|
15
|
-
const node_opcua_types_1 = require("node-opcua-types");
|
|
16
|
-
function extractConditionFields(session, conditionNodeId) {
|
|
17
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
18
|
-
// conditionNodeId could be a Object of type ConditionType
|
|
19
|
-
// or it could be directly a ObjectType which is a subType of ConditionType
|
|
20
|
-
const _duplicateMap = {};
|
|
21
|
-
const fields1 = [];
|
|
22
|
-
function addField(name) {
|
|
23
|
-
if (!_duplicateMap[name]) {
|
|
24
|
-
fields1.push(name);
|
|
25
|
-
_duplicateMap[name] = name;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
const stack = [];
|
|
29
|
-
function deferObjectOrVariableInvestigation(objectId, browseName) {
|
|
30
|
-
stack.push({
|
|
31
|
-
browseName,
|
|
32
|
-
nodeId: objectId
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
|
-
function _investigateObjectOrVariable() {
|
|
36
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
37
|
-
if (stack.length === 0) {
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
|
-
const extracted = stack.splice(0);
|
|
41
|
-
const nodesToBrowse = extracted.map((e) => {
|
|
42
|
-
const b = {
|
|
43
|
-
browseDirection: node_opcua_data_model_1.BrowseDirection.Forward,
|
|
44
|
-
includeSubtypes: true,
|
|
45
|
-
// tslint:disable-next-line: no-bitwise
|
|
46
|
-
nodeClassMask: node_opcua_data_model_1.NodeClassMask.Object | node_opcua_data_model_1.NodeClassMask.Variable,
|
|
47
|
-
nodeId: e.nodeId,
|
|
48
|
-
referenceTypeId: "HasChild",
|
|
49
|
-
resultMask: 63
|
|
50
|
-
};
|
|
51
|
-
return b;
|
|
52
|
-
});
|
|
53
|
-
const results = yield session.browse(nodesToBrowse);
|
|
54
|
-
let i = 0;
|
|
55
|
-
for (const result of results) {
|
|
56
|
-
const name = extracted[i].browseName.toString();
|
|
57
|
-
i++;
|
|
58
|
-
if (!result.references) {
|
|
59
|
-
continue;
|
|
60
|
-
}
|
|
61
|
-
for (const ref of result.references) {
|
|
62
|
-
const n = name + "." + ref.browseName.toString();
|
|
63
|
-
if (ref.nodeClass === node_opcua_types_1.NodeClass.Variable) {
|
|
64
|
-
addField(n);
|
|
65
|
-
}
|
|
66
|
-
deferObjectOrVariableInvestigation(ref.nodeId, n);
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
yield _investigateObjectOrVariable();
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
// tslint:disable-next-line: no-shadowed-variable
|
|
73
|
-
function _investigateLevel(conditionNodeId) {
|
|
74
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
75
|
-
const nodeToBrowse1 = {
|
|
76
|
-
browseDirection: node_opcua_data_model_1.BrowseDirection.Inverse,
|
|
77
|
-
includeSubtypes: true,
|
|
78
|
-
nodeClassMask: node_opcua_data_model_1.NodeClassMask.ObjectType,
|
|
79
|
-
nodeId: conditionNodeId,
|
|
80
|
-
referenceTypeId: (0, node_opcua_nodeid_1.resolveNodeId)("HasSubtype"),
|
|
81
|
-
resultMask: 63
|
|
82
|
-
};
|
|
83
|
-
const nodeToBrowse2 = {
|
|
84
|
-
browseDirection: node_opcua_data_model_1.BrowseDirection.Forward,
|
|
85
|
-
includeSubtypes: true,
|
|
86
|
-
// tslint:disable-next-line: no-bitwise
|
|
87
|
-
nodeClassMask: node_opcua_data_model_1.NodeClassMask.Object | node_opcua_data_model_1.NodeClassMask.Variable,
|
|
88
|
-
nodeId: conditionNodeId,
|
|
89
|
-
referenceTypeId: (0, node_opcua_nodeid_1.resolveNodeId)("HasChild"),
|
|
90
|
-
resultMask: 63
|
|
91
|
-
};
|
|
92
|
-
const nodesToBrowse = [nodeToBrowse1, nodeToBrowse2];
|
|
93
|
-
const browseResults = yield session.browse(nodesToBrowse);
|
|
94
|
-
if (browseResults[1] && browseResults[1].references) {
|
|
95
|
-
for (const ref of browseResults[1].references) {
|
|
96
|
-
if (ref.nodeClass === node_opcua_types_1.NodeClass.Variable) {
|
|
97
|
-
addField(ref.browseName.toString());
|
|
98
|
-
}
|
|
99
|
-
deferObjectOrVariableInvestigation(ref.nodeId, ref.browseName.toString());
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
if (browseResults[0] && browseResults[0].references) {
|
|
103
|
-
const promises = [];
|
|
104
|
-
for (const reference of browseResults[0].references) {
|
|
105
|
-
promises.push(_investigateLevel(reference.nodeId));
|
|
106
|
-
}
|
|
107
|
-
yield Promise.all(promises);
|
|
108
|
-
}
|
|
109
|
-
yield _investigateObjectOrVariable();
|
|
110
|
-
});
|
|
111
|
-
}
|
|
112
|
-
yield _investigateLevel(conditionNodeId);
|
|
113
|
-
// add this field which will always be added
|
|
114
|
-
addField("ConditionId");
|
|
115
|
-
return fields1;
|
|
116
|
-
});
|
|
117
|
-
}
|
|
118
|
-
exports.extractConditionFields = extractConditionFields;
|
|
119
|
-
//# sourceMappingURL=client_alarm_tools_extractConditionFields.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client_alarm_tools_extractConditionFields.js","sourceRoot":"","sources":["../../source/alarms_and_conditions/client_alarm_tools_extractConditionFields.ts"],"names":[],"mappings":"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"}
|
package/dist/reconnection.d.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module node-opcua-client-private
|
|
3
|
-
*/
|
|
4
|
-
import { ClientSessionImpl } from "./private/client_session_impl";
|
|
5
|
-
import { IClientBase } from "./private/i_private_client";
|
|
6
|
-
type EmptyCallback = (err?: Error) => void;
|
|
7
|
-
export declare function repair_client_session(client: IClientBase, session: ClientSessionImpl, callback: EmptyCallback): void;
|
|
8
|
-
export declare function repair_client_sessions(client: IClientBase, callback: (err?: Error) => void): void;
|
|
9
|
-
export {};
|
package/dist/reconnection.js
DELETED
|
@@ -1,382 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* @module node-opcua-client-private
|
|
4
|
-
*/
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.repair_client_sessions = exports.repair_client_session = void 0;
|
|
7
|
-
// tslint:disable:only-arrow-functions
|
|
8
|
-
const async = require("async");
|
|
9
|
-
const chalk = require("chalk");
|
|
10
|
-
const node_opcua_assert_1 = require("node-opcua-assert");
|
|
11
|
-
const node_opcua_debug_1 = require("node-opcua-debug");
|
|
12
|
-
const node_opcua_service_subscription_1 = require("node-opcua-service-subscription");
|
|
13
|
-
const node_opcua_status_code_1 = require("node-opcua-status-code");
|
|
14
|
-
const node_opcua_types_1 = require("node-opcua-types");
|
|
15
|
-
const debugLog = (0, node_opcua_debug_1.make_debugLog)(__filename);
|
|
16
|
-
const doDebug = (0, node_opcua_debug_1.checkDebugFlag)(__filename);
|
|
17
|
-
const errorLog = (0, node_opcua_debug_1.make_errorLog)(__filename);
|
|
18
|
-
const warningLog = (0, node_opcua_debug_1.make_warningLog)(__filename);
|
|
19
|
-
//
|
|
20
|
-
// a new secure channel has be created, we need to reactivate the corresponding session,
|
|
21
|
-
// and reestablish the subscription and restart the publish engine.
|
|
22
|
-
//
|
|
23
|
-
//
|
|
24
|
-
// see OPC UA part 4 ( version 1.03 ) figure 34 page 106
|
|
25
|
-
// 6.5 Reestablishing subscription....
|
|
26
|
-
//
|
|
27
|
-
//
|
|
28
|
-
//
|
|
29
|
-
// +---------------------+
|
|
30
|
-
// | CreateSecureChannel |
|
|
31
|
-
// | CreateSession |
|
|
32
|
-
// | ActivateSession |
|
|
33
|
-
// +---------------------+
|
|
34
|
-
// |
|
|
35
|
-
// |
|
|
36
|
-
// v
|
|
37
|
-
// +---------------------+
|
|
38
|
-
// | CreateSubscription |<-------------------------------------------------------------+
|
|
39
|
-
// +---------------------+ |
|
|
40
|
-
// | (1)
|
|
41
|
-
// |
|
|
42
|
-
// v
|
|
43
|
-
// +---------------------+
|
|
44
|
-
// (2)------------->| StartPublishEngine |
|
|
45
|
-
// +---------------------+
|
|
46
|
-
// |
|
|
47
|
-
// V
|
|
48
|
-
// +---------------------+
|
|
49
|
-
// +------->| Monitor Connection |
|
|
50
|
-
// | +---------------------+
|
|
51
|
-
// | |
|
|
52
|
-
// | v
|
|
53
|
-
// | Good / \
|
|
54
|
-
// +-----------------/ SR? \______Broken_____+
|
|
55
|
-
// \ / |
|
|
56
|
-
// \ / |
|
|
57
|
-
// |
|
|
58
|
-
// v
|
|
59
|
-
// +---------------------+
|
|
60
|
-
// | |
|
|
61
|
-
// | CreateSecureChannel |<-----+
|
|
62
|
-
// | | |
|
|
63
|
-
// +---------------------+ |
|
|
64
|
-
// | |
|
|
65
|
-
// v |
|
|
66
|
-
// / \ |
|
|
67
|
-
// / SR? \______Bad________+
|
|
68
|
-
// \ /
|
|
69
|
-
// \ /
|
|
70
|
-
// |
|
|
71
|
-
// |Good
|
|
72
|
-
// v
|
|
73
|
-
// +---------------------+
|
|
74
|
-
// | |
|
|
75
|
-
// | ActivateSession |
|
|
76
|
-
// | |
|
|
77
|
-
// +---------------------+
|
|
78
|
-
// |
|
|
79
|
-
// +----------------------+
|
|
80
|
-
// |
|
|
81
|
-
// v +-------------------+ +----------------------+
|
|
82
|
-
// / \ | CreateSession | | |
|
|
83
|
-
// / SR? \______Bad_______>| ActivateSession |-----> | TransferSubscription |
|
|
84
|
-
// \ / | | | | (1)
|
|
85
|
-
// \ / +-------------------+ +----------------------+ ^
|
|
86
|
-
// | Good | |
|
|
87
|
-
// v (for each subscription) | |
|
|
88
|
-
// +--------------------+ / \ |
|
|
89
|
-
// | | OK / OK? \______Bad________+
|
|
90
|
-
// | RePublish |<----------------------------------------- \ /
|
|
91
|
-
// +-->| | \ /
|
|
92
|
-
// | +--------------------+
|
|
93
|
-
// | |
|
|
94
|
-
// | v
|
|
95
|
-
// | GOOD / \
|
|
96
|
-
// +------ / SR? \______Bad SubscriptionInvalidId______>(1)
|
|
97
|
-
// (2) \ /
|
|
98
|
-
// ^ \ /
|
|
99
|
-
// | |
|
|
100
|
-
// | |
|
|
101
|
-
// | BadMessageNotAvailable |
|
|
102
|
-
// +-------------------------------+
|
|
103
|
-
function _ask_for_subscription_republish(session, callback) {
|
|
104
|
-
if (session.hasBeenClosed()) {
|
|
105
|
-
doDebug && debugLog("_ask_for_subscription_republish : session is closed");
|
|
106
|
-
return callback(new Error("askForSubscriptionRepublish => canceled because session is closed"));
|
|
107
|
-
}
|
|
108
|
-
doDebug && debugLog(chalk.bgCyan.yellow.bold("_ask_for_subscription_republish "));
|
|
109
|
-
// assert(session.getPublishEngine().nbPendingPublishRequests === 0,
|
|
110
|
-
// "at this time, publish request queue shall still be empty");
|
|
111
|
-
session.getPublishEngine().republish((err) => {
|
|
112
|
-
doDebug && debugLog("_ask_for_subscription_republish : republish sent");
|
|
113
|
-
if (session.hasBeenClosed()) {
|
|
114
|
-
return callback(new Error("Cannot complete subscription republish due to session termination"));
|
|
115
|
-
}
|
|
116
|
-
doDebug && debugLog(chalk.bgCyan.green.bold("_ask_for_subscription_republish done "), err ? err.message : "OK");
|
|
117
|
-
if (err) {
|
|
118
|
-
doDebug && debugLog("_ask_for_subscription_republish has : recreating subscription");
|
|
119
|
-
return repair_client_session_by_recreating_a_new_session(session._client, session, callback);
|
|
120
|
-
}
|
|
121
|
-
// xx assert(session.getPublishEngine().nbPendingPublishRequests === 0);
|
|
122
|
-
session.resumePublishEngine();
|
|
123
|
-
callback(err);
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
|
-
function create_session_and_repeat_if_failed(client, session, callback) {
|
|
127
|
-
if (session.hasBeenClosed()) {
|
|
128
|
-
doDebug && debugLog("Cannot complete subscription republish due to session terminatio");
|
|
129
|
-
return callback(new Error("Cannot complete subscription republish due to session termination"));
|
|
130
|
-
}
|
|
131
|
-
doDebug && debugLog(chalk.bgWhite.red(" => creating a new session ...."));
|
|
132
|
-
// create new session, based on old session,
|
|
133
|
-
// so we can reuse subscriptions data
|
|
134
|
-
client.__createSession_step2(session, (err, session1) => {
|
|
135
|
-
if (err && session.hasBeenClosed()) {
|
|
136
|
-
doDebug && debugLog("Cannot complete subscription republish due to session terminatio");
|
|
137
|
-
return callback(new Error("Cannot complete subscription republish due to session termination"));
|
|
138
|
-
}
|
|
139
|
-
if (!err && session1) {
|
|
140
|
-
(0, node_opcua_assert_1.assert)(session === session1, "session should have been recycled");
|
|
141
|
-
callback(err, session);
|
|
142
|
-
return;
|
|
143
|
-
}
|
|
144
|
-
else {
|
|
145
|
-
doDebug && debugLog("Cannot complete subscription republish err = ", err === null || err === void 0 ? void 0 : err.message);
|
|
146
|
-
callback(err);
|
|
147
|
-
}
|
|
148
|
-
});
|
|
149
|
-
}
|
|
150
|
-
function repair_client_session_by_recreating_a_new_session(client, session, callback) {
|
|
151
|
-
if (doDebug) {
|
|
152
|
-
doDebug && debugLog(" repairing client session by_recreating a new session for old session ", session.sessionId.toString());
|
|
153
|
-
}
|
|
154
|
-
// TO DO : it is possible that session is already closed while we get there
|
|
155
|
-
if (session.hasBeenClosed()) {
|
|
156
|
-
doDebug && debugLog(chalk.bgWhite.red("Aborting reactivation of old session because user requested session to be closed"));
|
|
157
|
-
return callback(new Error("reconnection cancelled due to session termination"));
|
|
158
|
-
}
|
|
159
|
-
let newSession;
|
|
160
|
-
const listenerCountBefore = session.listenerCount("");
|
|
161
|
-
async.series([
|
|
162
|
-
function suspend_old_session_publish_engine(innerCallback) {
|
|
163
|
-
if (session.hasBeenClosed()) {
|
|
164
|
-
return innerCallback(new Error("Cannot complete subscription republish due to session termination"));
|
|
165
|
-
}
|
|
166
|
-
doDebug && debugLog(chalk.bgWhite.red(" => suspend old session publish engine...."));
|
|
167
|
-
session.getPublishEngine().suspend(true);
|
|
168
|
-
innerCallback();
|
|
169
|
-
},
|
|
170
|
-
function create_new_session(innerCallback) {
|
|
171
|
-
create_session_and_repeat_if_failed(client, session, (err, _newSession) => {
|
|
172
|
-
if (_newSession) {
|
|
173
|
-
newSession = _newSession;
|
|
174
|
-
}
|
|
175
|
-
innerCallback(err || undefined);
|
|
176
|
-
});
|
|
177
|
-
},
|
|
178
|
-
function activate_new_session(innerCallback) {
|
|
179
|
-
if (session.hasBeenClosed()) {
|
|
180
|
-
return innerCallback(new Error("Cannot complete subscription republish due to session termination"));
|
|
181
|
-
}
|
|
182
|
-
doDebug && debugLog(chalk.bgWhite.red(" => activating a new session ...."));
|
|
183
|
-
client._activateSession(newSession, newSession.userIdentityInfo, (err, session1) => {
|
|
184
|
-
doDebug && debugLog(chalk.bgWhite.cyan(" => activating a new session .... Done err=", err ? err.message : "null"));
|
|
185
|
-
if (err) {
|
|
186
|
-
doDebug && debugLog(chalk.bgWhite.cyan("reactivation of the new session has failed: let be smart and close it before failing this repair attempt"));
|
|
187
|
-
// but just on the server side, not on the client side
|
|
188
|
-
const closeSessionRequest = new node_opcua_types_1.CloseSessionRequest({
|
|
189
|
-
deleteSubscriptions: true
|
|
190
|
-
});
|
|
191
|
-
session.performMessageTransaction(closeSessionRequest, (err2) => {
|
|
192
|
-
if (err2) {
|
|
193
|
-
warningLog("closing session", err2.message);
|
|
194
|
-
}
|
|
195
|
-
innerCallback(err);
|
|
196
|
-
});
|
|
197
|
-
}
|
|
198
|
-
else {
|
|
199
|
-
innerCallback(err ? err : undefined);
|
|
200
|
-
}
|
|
201
|
-
});
|
|
202
|
-
},
|
|
203
|
-
function attempt_subscription_transfer(innerCallback) {
|
|
204
|
-
if (session.hasBeenClosed()) {
|
|
205
|
-
return innerCallback(new Error("Cannot complete subscription republish due to session termination"));
|
|
206
|
-
}
|
|
207
|
-
// get the old subscriptions id from the old session
|
|
208
|
-
const subscriptionsIds = session.getPublishEngine().getSubscriptionIds();
|
|
209
|
-
doDebug && debugLog(" session subscriptionCount = ", newSession.getPublishEngine().subscriptionCount);
|
|
210
|
-
if (subscriptionsIds.length === 0) {
|
|
211
|
-
doDebug && debugLog(" No subscriptions => skipping transfer subscriptions");
|
|
212
|
-
return innerCallback(); // no need to transfer subscriptions
|
|
213
|
-
}
|
|
214
|
-
doDebug && debugLog(" => asking server to transfer subscriptions = [", subscriptionsIds.join(", "), "]");
|
|
215
|
-
// Transfer subscriptions - ask for initial values....
|
|
216
|
-
const subscriptionsToTransfer = new node_opcua_service_subscription_1.TransferSubscriptionsRequest({
|
|
217
|
-
sendInitialValues: true,
|
|
218
|
-
subscriptionIds: subscriptionsIds
|
|
219
|
-
});
|
|
220
|
-
if (newSession.getPublishEngine().nbPendingPublishRequests !== 0) {
|
|
221
|
-
warningLog("Warning : we should not be publishing here");
|
|
222
|
-
}
|
|
223
|
-
newSession.transferSubscriptions(subscriptionsToTransfer, (err, transferSubscriptionsResponse) => {
|
|
224
|
-
if (err) {
|
|
225
|
-
warningLog(chalk.bgCyan("Warning TransferSubscription has failed " + err.message));
|
|
226
|
-
warningLog(chalk.bgCyan("May be the server is not supporting this feature"));
|
|
227
|
-
// when transfer subscription has failed, we have no other choice but
|
|
228
|
-
// recreate the subscriptions on the server side
|
|
229
|
-
return innerCallback();
|
|
230
|
-
}
|
|
231
|
-
// istanbul ignore next
|
|
232
|
-
if (!transferSubscriptionsResponse) {
|
|
233
|
-
return innerCallback(new Error("Internal Error"));
|
|
234
|
-
}
|
|
235
|
-
const results = transferSubscriptionsResponse.results || [];
|
|
236
|
-
// istanbul ignore next
|
|
237
|
-
if (doDebug) {
|
|
238
|
-
doDebug && debugLog(chalk.cyan(" => transfer subscriptions done"), results.map((x) => x.statusCode.toString()).join(" "));
|
|
239
|
-
}
|
|
240
|
-
const subscriptionsToRecreate = [];
|
|
241
|
-
// some subscriptions may be marked as invalid on the server side ...
|
|
242
|
-
// those one need to be recreated and repaired ....
|
|
243
|
-
for (let i = 0; i < results.length; i++) {
|
|
244
|
-
const statusCode = results[i].statusCode;
|
|
245
|
-
if (statusCode.equals(node_opcua_status_code_1.StatusCodes.BadSubscriptionIdInvalid)) {
|
|
246
|
-
// repair subscription
|
|
247
|
-
doDebug && debugLog(chalk.red(" WARNING SUBSCRIPTION "), subscriptionsIds[i], chalk.red(" SHOULD BE RECREATED"));
|
|
248
|
-
subscriptionsToRecreate.push(subscriptionsIds[i]);
|
|
249
|
-
}
|
|
250
|
-
else {
|
|
251
|
-
const availableSequenceNumbers = results[i].availableSequenceNumbers;
|
|
252
|
-
doDebug && debugLog(chalk.green(" SUBSCRIPTION "), subscriptionsIds[i], chalk.green(" CAN BE REPAIRED AND AVAILABLE "), availableSequenceNumbers);
|
|
253
|
-
// should be Good.
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
doDebug && debugLog(" new session subscriptionCount = ", newSession.getPublishEngine().subscriptionCount);
|
|
257
|
-
async.forEach(subscriptionsToRecreate, (subscriptionId, next) => {
|
|
258
|
-
if (!session.getPublishEngine().hasSubscription(subscriptionId)) {
|
|
259
|
-
doDebug && debugLog(chalk.red(" => CANNOT RECREATE SUBSCRIPTION "), subscriptionId);
|
|
260
|
-
return next();
|
|
261
|
-
}
|
|
262
|
-
const subscription = session.getPublishEngine().getSubscription(subscriptionId);
|
|
263
|
-
(0, node_opcua_assert_1.assert)(subscription.constructor.name === "ClientSubscriptionImpl");
|
|
264
|
-
doDebug && debugLog(chalk.red(" => RECREATING SUBSCRIPTION "), subscriptionId);
|
|
265
|
-
(0, node_opcua_assert_1.assert)(subscription.session === newSession, "must have the session");
|
|
266
|
-
subscription.recreateSubscriptionAndMonitoredItem((err1) => {
|
|
267
|
-
if (err1) {
|
|
268
|
-
doDebug && debugLog("_recreateSubscription failed !" + err1.message);
|
|
269
|
-
}
|
|
270
|
-
doDebug && debugLog(chalk.cyan(" => RECREATING SUBSCRIPTION AND MONITORED ITEM DONE "), subscriptionId);
|
|
271
|
-
next();
|
|
272
|
-
});
|
|
273
|
-
}, (err1) => {
|
|
274
|
-
innerCallback(err1);
|
|
275
|
-
});
|
|
276
|
-
});
|
|
277
|
-
},
|
|
278
|
-
function ask_for_subscription_republish(innerCallback) {
|
|
279
|
-
if (session.hasBeenClosed()) {
|
|
280
|
-
return innerCallback(new Error("Cannot complete subscription republish due to session termination"));
|
|
281
|
-
}
|
|
282
|
-
// assert(newSession.getPublishEngine().nbPendingPublishRequests === 0, "we should not be publishing here");
|
|
283
|
-
// call Republish
|
|
284
|
-
return _ask_for_subscription_republish(newSession, (err) => {
|
|
285
|
-
if (err) {
|
|
286
|
-
// tslint:disable-next-line: no-console
|
|
287
|
-
console.log("warning: Subscription republished has failed ", err.message);
|
|
288
|
-
}
|
|
289
|
-
innerCallback(err);
|
|
290
|
-
});
|
|
291
|
-
},
|
|
292
|
-
function start_publishing_as_normal(innerCallback) {
|
|
293
|
-
if (session.hasBeenClosed()) {
|
|
294
|
-
return innerCallback(new Error("Cannot complete subscription republish due to session termination"));
|
|
295
|
-
}
|
|
296
|
-
newSession.getPublishEngine().suspend(false);
|
|
297
|
-
const listenerCountAfter = session.listenerCount("");
|
|
298
|
-
(0, node_opcua_assert_1.assert)(newSession === session);
|
|
299
|
-
doDebug && debugLog("listenerCountBefore =", listenerCountBefore, "listenerCountAfter = ", listenerCountAfter);
|
|
300
|
-
innerCallback();
|
|
301
|
-
}
|
|
302
|
-
], (err) => {
|
|
303
|
-
callback(err);
|
|
304
|
-
});
|
|
305
|
-
}
|
|
306
|
-
function _repair_client_session(client, session, callback) {
|
|
307
|
-
const callback2 = (err2) => {
|
|
308
|
-
doDebug && debugLog("Session repair completed with err: ", err2 ? err2.message : "<no error>", session.sessionId.toString());
|
|
309
|
-
session.emit("session_repaired");
|
|
310
|
-
callback(err2);
|
|
311
|
-
};
|
|
312
|
-
if (doDebug) {
|
|
313
|
-
doDebug && debugLog(chalk.yellow(" TRYING TO REACTIVATE EXISTING SESSION"), session.sessionId.toString());
|
|
314
|
-
doDebug && debugLog(" SubscriptionIds :", session.getPublishEngine().getSubscriptionIds());
|
|
315
|
-
}
|
|
316
|
-
client._activateSession(session, session.userIdentityInfo, (err, session2) => {
|
|
317
|
-
//
|
|
318
|
-
// Note: current limitation :
|
|
319
|
-
// - The reconnection doesn't work yet, if connection break is caused by a server that crashes and restarts.
|
|
320
|
-
//
|
|
321
|
-
doDebug && debugLog(" ActivateSession : ", err ? chalk.red(err.message) : chalk.green(" SUCCESS !!! "));
|
|
322
|
-
if (err) {
|
|
323
|
-
// activate old session has failed => let's recreate a new Channel and transfer the subscription
|
|
324
|
-
return repair_client_session_by_recreating_a_new_session(client, session, callback2);
|
|
325
|
-
}
|
|
326
|
-
else {
|
|
327
|
-
// activate old session has succeeded => let's call Republish
|
|
328
|
-
return _ask_for_subscription_republish(session, callback2);
|
|
329
|
-
}
|
|
330
|
-
});
|
|
331
|
-
}
|
|
332
|
-
function repair_client_session(client, session, callback) {
|
|
333
|
-
if (!client) {
|
|
334
|
-
doDebug && debugLog("Aborting reactivation of old session because user requested session to be close");
|
|
335
|
-
return callback();
|
|
336
|
-
}
|
|
337
|
-
doDebug && debugLog(chalk.yellow("Starting client session repair"));
|
|
338
|
-
const privateSession = session;
|
|
339
|
-
privateSession._reconnecting = privateSession._reconnecting || { reconnecting: false, pendingCallbacks: [] };
|
|
340
|
-
if (privateSession._reconnecting.reconnecting) {
|
|
341
|
-
doDebug && debugLog(chalk.bgCyan("Reconnecting already happening for session"), session.sessionId.toString());
|
|
342
|
-
privateSession._reconnecting.pendingCallbacks.push(callback);
|
|
343
|
-
return;
|
|
344
|
-
}
|
|
345
|
-
privateSession._reconnecting.reconnecting = true;
|
|
346
|
-
// get old transaction queue ...
|
|
347
|
-
const transactionQueue = privateSession.pendingTransactions ? privateSession.pendingTransactions.splice(0) : [];
|
|
348
|
-
_repair_client_session(client, session, (err) => {
|
|
349
|
-
privateSession._reconnecting.reconnecting = false;
|
|
350
|
-
if (err) {
|
|
351
|
-
errorLog(chalk.red("session restoration has failed! err ="), err.message, session.sessionId.toString(), " => Let's retry");
|
|
352
|
-
setTimeout(() => {
|
|
353
|
-
_repair_client_session(client, session, callback);
|
|
354
|
-
}, 2000);
|
|
355
|
-
return;
|
|
356
|
-
}
|
|
357
|
-
doDebug && debugLog(chalk.yellow("session has been restored"), session.sessionId.toString());
|
|
358
|
-
session.emit("session_restored");
|
|
359
|
-
const otherCallbacks = privateSession._reconnecting.pendingCallbacks;
|
|
360
|
-
privateSession._reconnecting.pendingCallbacks = [];
|
|
361
|
-
// re-inject element in queue
|
|
362
|
-
doDebug && debugLog(chalk.yellow("re-injecting transaction queue"), transactionQueue.length);
|
|
363
|
-
transactionQueue.forEach((e) => privateSession.pendingTransactions.push(e));
|
|
364
|
-
otherCallbacks.forEach((c) => c(err));
|
|
365
|
-
callback(err);
|
|
366
|
-
});
|
|
367
|
-
}
|
|
368
|
-
exports.repair_client_session = repair_client_session;
|
|
369
|
-
function repair_client_sessions(client, callback) {
|
|
370
|
-
const self = client;
|
|
371
|
-
// repair session
|
|
372
|
-
const sessions = self.getSessions();
|
|
373
|
-
doDebug && debugLog(chalk.red.bgWhite(" Starting sessions reactivation", sessions.length));
|
|
374
|
-
async.map(sessions, (session, next) => {
|
|
375
|
-
repair_client_session(client, session, next);
|
|
376
|
-
}, (err) => {
|
|
377
|
-
err && errorLog("sessions reactivation completed: err ", err ? err.message : "null");
|
|
378
|
-
return callback(err);
|
|
379
|
-
});
|
|
380
|
-
}
|
|
381
|
-
exports.repair_client_sessions = repair_client_sessions;
|
|
382
|
-
//# sourceMappingURL=reconnection.js.map
|
package/dist/reconnection.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"reconnection.js","sourceRoot":"","sources":["../source/reconnection.ts"],"names":[],"mappings":"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"}
|