node-opcua-service-discovery 2.68.1 → 2.70.2

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/bonjour.d.ts CHANGED
@@ -1,21 +1,40 @@
1
- import * as bonjour from "bonjour";
2
- export declare function acquireBonjour(): bonjour.Bonjour;
3
- export declare function releaseBonjour(): void;
1
+ import { Bonjour, Service, ServiceConfig } from "sterfive-bonjour-service";
2
+ export declare function acquireBonjour(): Bonjour;
3
+ export declare function releaseBonjour(bonjour: Bonjour, callback: () => void): void;
4
+ export declare function acquireBonjour2(): Bonjour;
5
+ export declare function releaseBonjour2(bonjour: Bonjour): void;
4
6
  export interface Announcement {
5
7
  port: number;
6
8
  path: string;
7
9
  name: string;
8
10
  capabilities: string[];
9
11
  }
10
- export declare function sameAnnouncement(a?: Announcement, b?: Announcement): boolean;
11
- export declare function _announceServerOnMulticastSubnet(multicastDNS: bonjour.Bonjour, options: Announcement): Promise<bonjour.Service>;
12
+ export declare function announcementToServiceConfig(announcement: Announcement): ServiceConfig;
13
+ export declare function isSameService(a?: ServiceConfig, b?: ServiceConfig): boolean;
14
+ export declare const serviceToString: (service: ServiceConfig) => string;
15
+ export declare function _announceServerOnMulticastSubnet(multicastDNS: Bonjour, serviceConfig: ServiceConfig): Promise<Service>;
12
16
  export declare class BonjourHolder {
13
- announcement?: Announcement;
17
+ serviceConfig?: ServiceConfig;
14
18
  private _multicastDNS?;
15
19
  private _service?;
16
- _announcedOnMulticastSubnet(options: Announcement): Promise<boolean>;
20
+ private pendingAnnouncement;
21
+ /**
22
+ *
23
+ * @param announcement
24
+ * @returns
25
+ */
26
+ announcedOnMulticastSubnet(announcement: Announcement): Promise<boolean>;
17
27
  isStarted(): boolean;
18
- _announcedOnMulticastSubnetWithCallback(options: Announcement, callback: (err: Error | null, result?: boolean) => void): void;
19
- _stop_announcedOnMulticastSubnet(): Promise<void>;
20
- _stop_announcedOnMulticastSubnetWithCallback(callback: (err: Error | null) => void): void;
28
+ /**
29
+ *
30
+ * @param announcement
31
+ * @param callback
32
+ * @private
33
+ */
34
+ announcedOnMulticastSubnetWithCallback(announcement: Announcement, callback: (err: Error | null, result?: boolean) => void): void;
35
+ /**
36
+ * @private
37
+ */
38
+ stopAnnnouncedOnMulticastSubnet(): Promise<void>;
39
+ stopAnnouncedOnMulticastSubnetWithCallback(callback: (err: Error | null) => void): void;
21
40
  }
package/dist/bonjour.js CHANGED
@@ -9,32 +9,50 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  });
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.BonjourHolder = exports._announceServerOnMulticastSubnet = exports.sameAnnouncement = exports.releaseBonjour = exports.acquireBonjour = void 0;
12
+ exports.BonjourHolder = exports._announceServerOnMulticastSubnet = exports.serviceToString = exports.isSameService = exports.announcementToServiceConfig = exports.releaseBonjour2 = exports.acquireBonjour2 = exports.releaseBonjour = exports.acquireBonjour = void 0;
13
13
  /**
14
14
  * @module node-opcua-service-discovery
15
15
  */
16
16
  // tslint:disable:no-console
17
17
  const util_1 = require("util");
18
+ const chalk = require("chalk");
18
19
  const node_opcua_assert_1 = require("node-opcua-assert");
19
20
  const node_opcua_debug_1 = require("node-opcua-debug");
20
21
  const node_opcua_object_registry_1 = require("node-opcua-object-registry");
21
- const bonjour = require("bonjour");
22
+ const sterfive_bonjour_service_1 = require("sterfive-bonjour-service");
22
23
  const debugLog = (0, node_opcua_debug_1.make_debugLog)(__filename);
23
24
  const doDebug = (0, node_opcua_debug_1.checkDebugFlag)(__filename);
24
25
  let gBonjour;
25
26
  let gBonjourRefCount = 0;
26
27
  const registry = new node_opcua_object_registry_1.ObjectRegistry();
28
+ function errorCallback(err) {
29
+ console.log(" ERROR received from Bonjour", err.message);
30
+ }
27
31
  function acquireBonjour() {
32
+ const bonjour = new sterfive_bonjour_service_1.Bonjour();
33
+ registry.unregister(bonjour);
34
+ return bonjour;
35
+ }
36
+ exports.acquireBonjour = acquireBonjour;
37
+ function releaseBonjour(bonjour, callback) {
38
+ bonjour.unpublishAll(() => {
39
+ bonjour.destroy(callback);
40
+ registry.unregister(bonjour);
41
+ });
42
+ }
43
+ exports.releaseBonjour = releaseBonjour;
44
+ function acquireBonjour2() {
28
45
  if (gBonjourRefCount === 0) {
29
46
  // will start the Bonjour service
30
- gBonjour = bonjour();
47
+ debugLog("Starting Bonjour");
48
+ gBonjour = new sterfive_bonjour_service_1.Bonjour(undefined, errorCallback);
31
49
  registry.register(gBonjour);
32
50
  }
33
51
  gBonjourRefCount++;
34
52
  return gBonjour;
35
53
  }
36
- exports.acquireBonjour = acquireBonjour;
37
- function releaseBonjour() {
54
+ exports.acquireBonjour2 = acquireBonjour2;
55
+ function releaseBonjour2(bonjour) {
38
56
  gBonjourRefCount--;
39
57
  (0, node_opcua_assert_1.assert)(gBonjourRefCount >= 0);
40
58
  if (gBonjourRefCount === 0) {
@@ -44,105 +62,203 @@ function releaseBonjour() {
44
62
  const tmp = gBonjour;
45
63
  gBonjour = undefined;
46
64
  // will stop the Bonjour service
47
- tmp.destroy();
48
- registry.unregister(tmp);
65
+ tmp.unpublishAll(() => {
66
+ tmp.destroy();
67
+ registry.unregister(tmp);
68
+ debugLog("Releasing Bonjour");
69
+ });
49
70
  }
50
71
  }
51
- exports.releaseBonjour = releaseBonjour;
52
- function sameAnnouncement(a, b) {
72
+ exports.releaseBonjour2 = releaseBonjour2;
73
+ function announcementToServiceConfig(announcement) {
74
+ const serviceConfig = {
75
+ name: announcement.name,
76
+ port: announcement.port,
77
+ protocol: "tcp",
78
+ txt: {
79
+ caps: announcement.capabilities.sort().join(","),
80
+ path: announcement.path
81
+ },
82
+ type: "opcua-tcp"
83
+ };
84
+ return serviceConfig;
85
+ }
86
+ exports.announcementToServiceConfig = announcementToServiceConfig;
87
+ function isSameService(a, b) {
88
+ var _a, _b, _c, _d;
53
89
  if (!a && !b) {
54
90
  return true;
55
91
  }
56
92
  if (!a || !b) {
57
93
  return false;
58
94
  }
59
- return a.port === b.port && a.path === b.path && a.name === b.name && a.capabilities.join(" ") === b.capabilities.join(" ");
95
+ return a.port === b.port && ((_a = a.txt) === null || _a === void 0 ? void 0 : _a.path) === ((_b = b.txt) === null || _b === void 0 ? void 0 : _b.path) && a.name === b.name && ((_c = a.txt) === null || _c === void 0 ? void 0 : _c.caps) === ((_d = b.txt) === null || _d === void 0 ? void 0 : _d.caps);
60
96
  }
61
- exports.sameAnnouncement = sameAnnouncement;
62
- function _announceServerOnMulticastSubnet(multicastDNS, options) {
97
+ exports.isSameService = isSameService;
98
+ const serviceToString = (service) => {
99
+ return "type=" + service.type + service.name + " on port " + service.port + " txt " + JSON.stringify(service.txt);
100
+ };
101
+ exports.serviceToString = serviceToString;
102
+ // function waitServiceUp(serviceConfig: ServiceConfig, callback: () => void) {
103
+ // const multicastDNS = new Bonjour();
104
+ // const browser = multicastDNS.find({
105
+ // protocol: "tcp",
106
+ // type: "opcua-tcp"
107
+ // });
108
+ // const onUp = (service: Service) => {
109
+ // if (doDebug) {
110
+ // debugLog(chalk.cyan(" waitServiceUp is up with ", serviceToString(service)));
111
+ // }
112
+ // if (isSameService(service, serviceConfig)) {
113
+ // browser.removeAllListeners("up");
114
+ // multicastDNS.destroy();
115
+ // callback();
116
+ // }
117
+ // };
118
+ // browser.on("up", onUp);
119
+ // }
120
+ // function waitServiceDown(serviceConfig: ServiceConfig, callback: () => void) {
121
+ // const multicastDNS = new Bonjour();
122
+ // const browser = multicastDNS.find({
123
+ // protocol: "tcp",
124
+ // type: "opcua-tcp"
125
+ // });
126
+ // const onDown = (service: Service) => {
127
+ // if (doDebug) {
128
+ // debugLog(chalk.cyan(" waitServiceDown down with ", serviceToString(service)));
129
+ // }
130
+ // if (isSameService(service, serviceConfig)) {
131
+ // browser.removeAllListeners("down");
132
+ // multicastDNS.destroy();
133
+ // callback();
134
+ // }
135
+ // };
136
+ // browser.on("down", onDown);
137
+ // }
138
+ function _announceServerOnMulticastSubnet(multicastDNS, serviceConfig) {
63
139
  return __awaiter(this, void 0, void 0, function* () {
64
- const port = options.port;
65
- (0, node_opcua_assert_1.assert)(typeof port === "number");
66
- (0, node_opcua_assert_1.assert)(multicastDNS, "bonjour must have been initialized?");
67
- const params = {
68
- name: options.name,
69
- port,
70
- protocol: "tcp",
71
- txt: {
72
- caps: options.capabilities.join(","),
73
- path: options.path
74
- },
75
- type: "opcua-tcp"
76
- };
77
- const service = multicastDNS.publish(params);
78
- service.on("error", (err) => {
79
- debugLog("bonjour ERROR received ! ", err.message);
80
- debugLog("params = ", params);
140
+ return new Promise((resolve, reject) => {
141
+ const port = serviceConfig.port;
142
+ (0, node_opcua_assert_1.assert)(typeof port === "number");
143
+ (0, node_opcua_assert_1.assert)(multicastDNS, "bonjour must have been initialized?");
144
+ debugLog(chalk.cyan(" announceServerOnMulticastSubnet", (0, exports.serviceToString)(serviceConfig)));
145
+ // waitServiceUp(serviceConfig, () => {
146
+ // // istanbul ignore next
147
+ // if (doDebug) {
148
+ // debugLog(chalk.cyan(" announcedOnMulticastSubnet done ", serviceToString(serviceConfig)));
149
+ // }
150
+ // // resolve(service);
151
+ // });
152
+ const service = multicastDNS.publish(Object.assign(Object.assign({}, serviceConfig), { probe: false }));
153
+ service.on("error", (err) => {
154
+ debugLog("bonjour ERROR received ! ", err.message);
155
+ debugLog("params = ", serviceConfig);
156
+ });
157
+ service.on("up", () => {
158
+ debugLog("_announceServerOnMulticastSubnet: bonjour UP received ! ", (0, exports.serviceToString)(serviceConfig));
159
+ resolve(service);
160
+ });
161
+ service.start();
81
162
  });
82
- // istanbul ignore next
83
- if (doDebug) {
84
- debugLog("Announcing ", params.name, "on port ", port, " txt ", JSON.stringify(params.txt));
85
- }
86
- service.start();
87
- return service;
88
163
  });
89
164
  }
90
165
  exports._announceServerOnMulticastSubnet = _announceServerOnMulticastSubnet;
91
166
  class BonjourHolder {
92
- _announcedOnMulticastSubnet(options) {
167
+ constructor() {
168
+ this.pendingAnnouncement = false;
169
+ }
170
+ /**
171
+ *
172
+ * @param announcement
173
+ * @returns
174
+ */
175
+ announcedOnMulticastSubnet(announcement) {
93
176
  return __awaiter(this, void 0, void 0, function* () {
94
- if (!options) {
95
- // ignored
96
- return false;
97
- }
98
- if (this._service && this.announcement && options) {
177
+ debugLog(chalk.yellow("\n\nentering announcedOnMulticastSubnet"));
178
+ const serviceConfig = announcementToServiceConfig(announcement);
179
+ if (this._service && this.serviceConfig) {
99
180
  // verify that Announcement has changed
100
- if (sameAnnouncement(options, this.announcement)) {
101
- debugLog(" Announcement ignored as it has been already made", options.name);
181
+ if (isSameService(serviceConfig, this.serviceConfig)) {
182
+ debugLog(" Announcement ignored as it has been already made", announcement.name);
183
+ debugLog("exiting announcedOnMulticastSubnet-2", false);
102
184
  return false; // nothing changed
103
185
  }
104
186
  }
105
187
  (0, node_opcua_assert_1.assert)(!this._multicastDNS, "already called ?");
106
188
  this._multicastDNS = acquireBonjour();
107
- this._service = yield _announceServerOnMulticastSubnet(this._multicastDNS, options);
108
- this.announcement = options;
189
+ this.pendingAnnouncement = true;
190
+ this.serviceConfig = serviceConfig;
191
+ this._service = yield _announceServerOnMulticastSubnet(this._multicastDNS, serviceConfig);
192
+ this.pendingAnnouncement = false;
193
+ debugLog(chalk.yellow("exiting announcedOnMulticastSubnet-3", true));
109
194
  return true;
110
195
  });
111
196
  }
112
197
  isStarted() {
113
198
  return !!this._multicastDNS;
114
199
  }
115
- _announcedOnMulticastSubnetWithCallback(options, callback) {
200
+ /**
201
+ *
202
+ * @param announcement
203
+ * @param callback
204
+ * @private
205
+ */
206
+ announcedOnMulticastSubnetWithCallback(announcement, callback) {
116
207
  callback(new Error("Internal Error"));
117
208
  }
118
- _stop_announcedOnMulticastSubnet() {
209
+ /**
210
+ * @private
211
+ */
212
+ stopAnnnouncedOnMulticastSubnet() {
119
213
  return __awaiter(this, void 0, void 0, function* () {
120
- debugLog("_stop_announcedOnMulticastSubnet = ");
121
- if (this._service) {
122
- // due to a wrong declaration of Service.stop in the d.ts file we
123
- // need to use a workaround here
124
- const this_service = this._service;
125
- this._service = undefined;
126
- this._multicastDNS = undefined;
127
- releaseBonjour();
128
- this.announcement = undefined;
129
- const proxy = (callback) => {
130
- this_service.stop(() => {
131
- callback();
132
- });
133
- };
134
- const stop = (0, util_1.promisify)(proxy);
135
- yield stop.call(this);
136
- //xx await new Promise((resolve) => setTimeout(resolve, 20));
137
- debugLog("stop announcement completed");
214
+ if (this.pendingAnnouncement) {
215
+ debugLog(chalk.bgWhite.redBright("stopAnnnouncedOnMulticastSubnet is pending : let's wait a little bit and try again"));
216
+ // wait until announcement is done
217
+ yield new Promise((resolve) => setTimeout(resolve, 500));
218
+ return this.stopAnnnouncedOnMulticastSubnet();
138
219
  }
220
+ debugLog(chalk.green("\n\nentering stop_announcedOnMulticastSubnet = ", this.serviceConfig ? (0, exports.serviceToString)(this.serviceConfig) : "<null>"));
221
+ if (!this._service) {
222
+ debugLog(chalk.green("leaving stop_announcedOnMulticastSubnet = no service"));
223
+ return;
224
+ }
225
+ // due to a wrong declaration of Service.stop in the d.ts file we
226
+ // need to use a workaround here
227
+ const that_service = this._service;
228
+ const that_multicastDNS = this._multicastDNS;
229
+ this._service = undefined;
230
+ this._multicastDNS = undefined;
231
+ this.serviceConfig = undefined;
232
+ const proxy = (callback) => {
233
+ if (that_multicastDNS && that_service.stop) {
234
+ // waitServiceDown(that_service, () => {
235
+ // debugLog(chalk.green("stop_announcedOnMulticastSubnet, ", serviceToString(that_service)));
236
+ // });
237
+ that_service.stop((err) => {
238
+ debugLog(chalk.green("service stopped err=", err));
239
+ that_multicastDNS.unpublishAll(() => {
240
+ releaseBonjour(that_multicastDNS, () => {
241
+ callback();
242
+ });
243
+ });
244
+ });
245
+ return;
246
+ }
247
+ else {
248
+ callback();
249
+ }
250
+ };
251
+ const stop = (0, util_1.promisify)(proxy);
252
+ yield stop.call(this);
253
+ debugLog(chalk.green("leaving stop_announcedOnMulticastSubnet = done"));
254
+ debugLog(chalk.green("leaving stop_announcedOnMulticastSubnet stop announcement completed"));
139
255
  });
140
256
  }
141
- _stop_announcedOnMulticastSubnetWithCallback(callback) {
257
+ stopAnnouncedOnMulticastSubnetWithCallback(callback) {
142
258
  callback(new Error("Internal Error"));
143
259
  }
144
260
  }
145
261
  exports.BonjourHolder = BonjourHolder;
146
- BonjourHolder.prototype._announcedOnMulticastSubnetWithCallback = (0, util_1.callbackify)(BonjourHolder.prototype._announcedOnMulticastSubnet);
147
- BonjourHolder.prototype._stop_announcedOnMulticastSubnetWithCallback = (0, util_1.callbackify)(BonjourHolder.prototype._stop_announcedOnMulticastSubnet);
262
+ BonjourHolder.prototype.announcedOnMulticastSubnetWithCallback = (0, util_1.callbackify)(BonjourHolder.prototype.announcedOnMulticastSubnet);
263
+ BonjourHolder.prototype.stopAnnouncedOnMulticastSubnetWithCallback = (0, util_1.callbackify)(BonjourHolder.prototype.stopAnnnouncedOnMulticastSubnet);
148
264
  //# sourceMappingURL=bonjour.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"bonjour.js","sourceRoot":"","sources":["../source/bonjour.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bonjour.js","sourceRoot":"","sources":["../source/bonjour.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -3,4 +3,4 @@
3
3
  */
4
4
  export { RegisteredServer, RegisterServerRequest, RegisterServerResponse, MdnsDiscoveryConfiguration, RegisterServer2Request, RegisterServer2Response, RegisterServerRequestOptions, RegisterServer2RequestOptions, FindServersRequest, FindServersRequestOptions, FindServersResponse, FindServersOnNetworkRequest, FindServersOnNetworkRequestOptions, FindServersOnNetworkResponse, ServerOnNetwork } from "node-opcua-types";
5
5
  export { serverCapabilities } from "./server_capabilities";
6
- export { acquireBonjour, Announcement, releaseBonjour, BonjourHolder, sameAnnouncement, _announceServerOnMulticastSubnet } from "./bonjour";
6
+ export { Announcement, BonjourHolder, isSameService as sameService, _announceServerOnMulticastSubnet, announcementToServiceConfig, serviceToString, } from "./bonjour";
package/dist/index.js CHANGED
@@ -3,7 +3,7 @@
3
3
  * @module node-opcua-service-discovery
4
4
  */
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports._announceServerOnMulticastSubnet = exports.sameAnnouncement = exports.BonjourHolder = exports.releaseBonjour = exports.acquireBonjour = exports.serverCapabilities = exports.ServerOnNetwork = exports.FindServersOnNetworkResponse = exports.FindServersOnNetworkRequest = exports.FindServersResponse = exports.FindServersRequest = exports.RegisterServer2Response = exports.RegisterServer2Request = exports.MdnsDiscoveryConfiguration = exports.RegisterServerResponse = exports.RegisterServerRequest = exports.RegisteredServer = void 0;
6
+ exports.serviceToString = exports.announcementToServiceConfig = exports._announceServerOnMulticastSubnet = exports.sameService = exports.BonjourHolder = exports.serverCapabilities = exports.ServerOnNetwork = exports.FindServersOnNetworkResponse = exports.FindServersOnNetworkRequest = exports.FindServersResponse = exports.FindServersRequest = exports.RegisterServer2Response = exports.RegisterServer2Request = exports.MdnsDiscoveryConfiguration = exports.RegisterServerResponse = exports.RegisterServerRequest = exports.RegisteredServer = void 0;
7
7
  var node_opcua_types_1 = require("node-opcua-types");
8
8
  Object.defineProperty(exports, "RegisteredServer", { enumerable: true, get: function () { return node_opcua_types_1.RegisteredServer; } });
9
9
  Object.defineProperty(exports, "RegisterServerRequest", { enumerable: true, get: function () { return node_opcua_types_1.RegisterServerRequest; } });
@@ -19,9 +19,9 @@ Object.defineProperty(exports, "ServerOnNetwork", { enumerable: true, get: funct
19
19
  var server_capabilities_1 = require("./server_capabilities");
20
20
  Object.defineProperty(exports, "serverCapabilities", { enumerable: true, get: function () { return server_capabilities_1.serverCapabilities; } });
21
21
  var bonjour_1 = require("./bonjour");
22
- Object.defineProperty(exports, "acquireBonjour", { enumerable: true, get: function () { return bonjour_1.acquireBonjour; } });
23
- Object.defineProperty(exports, "releaseBonjour", { enumerable: true, get: function () { return bonjour_1.releaseBonjour; } });
24
22
  Object.defineProperty(exports, "BonjourHolder", { enumerable: true, get: function () { return bonjour_1.BonjourHolder; } });
25
- Object.defineProperty(exports, "sameAnnouncement", { enumerable: true, get: function () { return bonjour_1.sameAnnouncement; } });
23
+ Object.defineProperty(exports, "sameService", { enumerable: true, get: function () { return bonjour_1.isSameService; } });
26
24
  Object.defineProperty(exports, "_announceServerOnMulticastSubnet", { enumerable: true, get: function () { return bonjour_1._announceServerOnMulticastSubnet; } });
25
+ Object.defineProperty(exports, "announcementToServiceConfig", { enumerable: true, get: function () { return bonjour_1.announcementToServiceConfig; } });
26
+ Object.defineProperty(exports, "serviceToString", { enumerable: true, get: function () { return bonjour_1.serviceToString; } });
27
27
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../source/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,qDAoB0B;AAnBtB,oHAAA,gBAAgB,OAAA;AAChB,yHAAA,qBAAqB,OAAA;AACrB,0HAAA,sBAAsB,OAAA;AACtB,8HAAA,0BAA0B,OAAA;AAC1B,0HAAA,sBAAsB,OAAA;AACtB,2HAAA,uBAAuB,OAAA;AAKvB,sHAAA,kBAAkB,OAAA;AAElB,uHAAA,mBAAmB,OAAA;AAEnB,+HAAA,2BAA2B,OAAA;AAE3B,gIAAA,4BAA4B,OAAA;AAE5B,mHAAA,eAAe,OAAA;AAGnB,6DAA2D;AAAlD,yHAAA,kBAAkB,OAAA;AAC3B,qCAOkB;AANd,yGAAA,cAAc,OAAA;AAEd,yGAAA,cAAc,OAAA;AACd,wGAAA,aAAa,OAAA;AACb,2GAAA,gBAAgB,OAAA;AAChB,2HAAA,gCAAgC,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../source/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,qDAoB0B;AAnBtB,oHAAA,gBAAgB,OAAA;AAChB,yHAAA,qBAAqB,OAAA;AACrB,0HAAA,sBAAsB,OAAA;AACtB,8HAAA,0BAA0B,OAAA;AAC1B,0HAAA,sBAAsB,OAAA;AACtB,2HAAA,uBAAuB,OAAA;AAKvB,sHAAA,kBAAkB,OAAA;AAElB,uHAAA,mBAAmB,OAAA;AAEnB,+HAAA,2BAA2B,OAAA;AAE3B,gIAAA,4BAA4B,OAAA;AAE5B,mHAAA,eAAe,OAAA;AAGnB,6DAA2D;AAAlD,yHAAA,kBAAkB,OAAA;AAC3B,qCAOkB;AALd,wGAAA,aAAa,OAAA;AACb,sGAAA,aAAa,OAAe;AAC5B,2HAAA,gCAAgC,OAAA;AAChC,sHAAA,2BAA2B,OAAA;AAC3B,0GAAA,eAAe,OAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "node-opcua-service-discovery",
3
- "version": "2.68.1",
3
+ "version": "2.70.2",
4
4
  "description": "pure nodejs OPCUA SDK - module -service-discovery",
5
5
  "scripts": {
6
6
  "build": "tsc -b",
@@ -12,18 +12,18 @@
12
12
  "types": "./dist/index.d.ts",
13
13
  "dependencies": {
14
14
  "@types/bonjour": "^3.5.10",
15
- "bonjour": "^3.5.0",
16
15
  "node-opcua-assert": "2.66.0",
17
- "node-opcua-basic-types": "2.68.0",
18
- "node-opcua-binary-stream": "2.67.0",
19
- "node-opcua-data-model": "2.68.0",
20
- "node-opcua-debug": "2.68.0",
21
- "node-opcua-factory": "2.68.0",
22
- "node-opcua-nodeid": "2.68.0",
23
- "node-opcua-object-registry": "2.68.0",
24
- "node-opcua-service-endpoints": "2.68.1",
25
- "node-opcua-service-secure-channel": "2.68.1",
26
- "node-opcua-types": "2.68.1"
16
+ "node-opcua-basic-types": "2.70.0",
17
+ "node-opcua-binary-stream": "2.69.0",
18
+ "node-opcua-data-model": "2.70.0",
19
+ "node-opcua-debug": "2.69.0",
20
+ "node-opcua-factory": "2.70.0",
21
+ "node-opcua-nodeid": "2.70.0",
22
+ "node-opcua-object-registry": "2.69.0",
23
+ "node-opcua-service-endpoints": "2.70.2",
24
+ "node-opcua-service-secure-channel": "2.70.2",
25
+ "node-opcua-types": "2.70.2",
26
+ "sterfive-bonjour-service": "1.1.4"
27
27
  },
28
28
  "author": "Etienne Rossignon",
29
29
  "license": "MIT",
@@ -40,5 +40,5 @@
40
40
  "internet of things"
41
41
  ],
42
42
  "homepage": "http://node-opcua.github.io/",
43
- "gitHead": "7bcb67b06ea755d438e91f5c143d20531497e286"
43
+ "gitHead": "3d63db79d14539ee61bc82998b19320202f35392"
44
44
  }
package/source/bonjour.ts CHANGED
@@ -3,31 +3,49 @@
3
3
  */
4
4
  // tslint:disable:no-console
5
5
  import { callbackify, promisify } from "util";
6
-
6
+ import * as chalk from "chalk";
7
7
  import { assert } from "node-opcua-assert";
8
8
  import { checkDebugFlag, make_debugLog } from "node-opcua-debug";
9
9
  import { ObjectRegistry } from "node-opcua-object-registry";
10
- import * as bonjour from "bonjour";
10
+ import { Bonjour, Service, ServiceConfig } from "sterfive-bonjour-service";
11
11
 
12
12
  const debugLog = make_debugLog(__filename);
13
13
  const doDebug = checkDebugFlag(__filename);
14
14
 
15
- let gBonjour: bonjour.Bonjour | undefined;
15
+ let gBonjour: Bonjour | undefined;
16
16
  let gBonjourRefCount = 0;
17
17
 
18
18
  const registry = new ObjectRegistry();
19
19
 
20
- export function acquireBonjour(): bonjour.Bonjour {
20
+ function errorCallback(err: Error) {
21
+ console.log(" ERROR received from Bonjour", err.message);
22
+ }
23
+
24
+ export function acquireBonjour(): Bonjour {
25
+ const bonjour = new Bonjour();
26
+ registry.unregister(bonjour);
27
+ return bonjour;
28
+ }
29
+
30
+ export function releaseBonjour(bonjour: Bonjour, callback: () => void) {
31
+ bonjour!.unpublishAll(() => {
32
+ bonjour!.destroy(callback);
33
+ registry.unregister(bonjour);
34
+ });
35
+ }
36
+
37
+ export function acquireBonjour2(): Bonjour {
21
38
  if (gBonjourRefCount === 0) {
22
39
  // will start the Bonjour service
23
- gBonjour = bonjour();
40
+ debugLog("Starting Bonjour");
41
+ gBonjour = new Bonjour(undefined, errorCallback);
24
42
  registry.register(gBonjour);
25
43
  }
26
44
  gBonjourRefCount++;
27
45
  return gBonjour!;
28
46
  }
29
47
 
30
- export function releaseBonjour() {
48
+ export function releaseBonjour2(bonjour: Bonjour) {
31
49
  gBonjourRefCount--;
32
50
  assert(gBonjourRefCount >= 0);
33
51
  if (gBonjourRefCount === 0) {
@@ -37,8 +55,11 @@ export function releaseBonjour() {
37
55
  const tmp = gBonjour;
38
56
  gBonjour = undefined;
39
57
  // will stop the Bonjour service
40
- tmp!.destroy();
41
- registry.unregister(tmp);
58
+ tmp!.unpublishAll(() => {
59
+ tmp!.destroy();
60
+ registry.unregister(tmp);
61
+ debugLog("Releasing Bonjour");
62
+ });
42
63
  }
43
64
  }
44
65
 
@@ -49,87 +70,133 @@ export interface Announcement {
49
70
  capabilities: string[];
50
71
  }
51
72
 
52
- export function sameAnnouncement(a?: Announcement, b?: Announcement): boolean {
73
+ export function announcementToServiceConfig(announcement: Announcement): ServiceConfig {
74
+ const serviceConfig: ServiceConfig = {
75
+ name: announcement.name,
76
+ port: announcement.port,
77
+ protocol: "tcp",
78
+ txt: {
79
+ caps: announcement.capabilities.sort().join(","),
80
+ path: announcement.path
81
+ },
82
+ type: "opcua-tcp"
83
+ };
84
+
85
+ return serviceConfig;
86
+ }
87
+
88
+ export function isSameService(a?: ServiceConfig, b?: ServiceConfig): boolean {
53
89
  if (!a && !b) {
54
90
  return true;
55
91
  }
56
92
  if (!a || !b) {
57
93
  return false;
58
94
  }
59
- return a.port === b.port && a.path === b.path && a.name === b.name && a.capabilities.join(" ") === b.capabilities.join(" ");
95
+ return a.port === b.port && a.txt?.path === b.txt?.path && a.name === b.name && a.txt?.caps === b.txt?.caps;
60
96
  }
61
97
 
62
- export async function _announceServerOnMulticastSubnet(
63
- multicastDNS: bonjour.Bonjour,
64
- options: Announcement
65
- ): Promise<bonjour.Service> {
66
- const port = options.port;
67
- assert(typeof port === "number");
68
- assert(multicastDNS, "bonjour must have been initialized?");
69
-
70
- const params: bonjour.ServiceOptions = {
71
- name: options.name,
72
- port,
73
- protocol: "tcp",
74
- txt: {
75
- caps: options.capabilities.join(","),
76
- path: options.path
77
- },
78
- type: "opcua-tcp"
79
- };
80
- const service: bonjour.Service = multicastDNS.publish(params);
81
- service.on("error", (err: Error) => {
82
- debugLog("bonjour ERROR received ! ", err.message);
83
- debugLog("params = ", params);
84
- });
98
+ export const serviceToString = (service: ServiceConfig) => {
99
+ return "type=" + service.type + service.name + " on port " + service.port + " txt " + JSON.stringify(service.txt);
100
+ };
85
101
 
86
- // istanbul ignore next
87
- if (doDebug) {
88
- debugLog("Announcing ", params.name, "on port ", port, " txt ", JSON.stringify(params.txt));
89
- }
102
+ // function waitServiceUp(serviceConfig: ServiceConfig, callback: () => void) {
103
+ // const multicastDNS = new Bonjour();
104
+ // const browser = multicastDNS.find({
105
+ // protocol: "tcp",
106
+ // type: "opcua-tcp"
107
+ // });
108
+ // const onUp = (service: Service) => {
109
+ // if (doDebug) {
110
+ // debugLog(chalk.cyan(" waitServiceUp is up with ", serviceToString(service)));
111
+ // }
112
+ // if (isSameService(service, serviceConfig)) {
113
+ // browser.removeAllListeners("up");
114
+ // multicastDNS.destroy();
115
+ // callback();
116
+ // }
117
+ // };
118
+ // browser.on("up", onUp);
119
+ // }
90
120
 
91
- service.start();
92
- return service;
93
- }
121
+ // function waitServiceDown(serviceConfig: ServiceConfig, callback: () => void) {
122
+ // const multicastDNS = new Bonjour();
123
+ // const browser = multicastDNS.find({
124
+ // protocol: "tcp",
125
+ // type: "opcua-tcp"
126
+ // });
127
+ // const onDown = (service: Service) => {
128
+ // if (doDebug) {
129
+ // debugLog(chalk.cyan(" waitServiceDown down with ", serviceToString(service)));
130
+ // }
131
+ // if (isSameService(service, serviceConfig)) {
132
+ // browser.removeAllListeners("down");
133
+ // multicastDNS.destroy();
134
+ // callback();
135
+ // }
136
+ // };
137
+ // browser.on("down", onDown);
138
+ // }
94
139
 
95
- interface ServiceFixed extends NodeJS.EventEmitter {
96
- name: string;
97
- type: string;
98
- subtypes: string[];
99
- protocol: string;
100
- host: string;
101
- port: number;
102
- fqdn: string;
103
- txt: Object;
104
- published: boolean;
140
+ export async function _announceServerOnMulticastSubnet(multicastDNS: Bonjour, serviceConfig: ServiceConfig): Promise<Service> {
141
+ return new Promise((resolve, reject) => {
142
+ const port = serviceConfig.port;
143
+ assert(typeof port === "number");
144
+ assert(multicastDNS, "bonjour must have been initialized?");
145
+
146
+ debugLog(chalk.cyan(" announceServerOnMulticastSubnet", serviceToString(serviceConfig)));
105
147
 
106
- stop(callback: (err: Error | null) => void): void;
148
+ // waitServiceUp(serviceConfig, () => {
149
+ // // istanbul ignore next
150
+ // if (doDebug) {
151
+ // debugLog(chalk.cyan(" announcedOnMulticastSubnet done ", serviceToString(serviceConfig)));
152
+ // }
153
+ // // resolve(service);
154
+ // });
107
155
 
108
- start(): void;
156
+ const service: Service = multicastDNS.publish({ ...serviceConfig, probe: false });
157
+ service.on("error", (err: Error) => {
158
+ debugLog("bonjour ERROR received ! ", err.message);
159
+ debugLog("params = ", serviceConfig);
160
+ });
161
+ service.on("up", () => {
162
+ debugLog("_announceServerOnMulticastSubnet: bonjour UP received ! ", serviceToString(serviceConfig));
163
+ resolve(service);
164
+ });
165
+ service.start();
166
+ });
109
167
  }
110
168
 
111
169
  export class BonjourHolder {
112
- public announcement?: Announcement;
170
+ public serviceConfig?: ServiceConfig;
113
171
 
114
- private _multicastDNS?: bonjour.Bonjour;
115
- private _service?: bonjour.Service;
116
-
117
- public async _announcedOnMulticastSubnet(options: Announcement): Promise<boolean> {
118
- if (!options) {
119
- // ignored
120
- return false;
121
- }
122
- if (this._service && this.announcement && options) {
172
+ private _multicastDNS?: Bonjour;
173
+ private _service?: Service;
174
+ private pendingAnnouncement = false;
175
+ /**
176
+ *
177
+ * @param announcement
178
+ * @returns
179
+ */
180
+ public async announcedOnMulticastSubnet(announcement: Announcement): Promise<boolean> {
181
+ debugLog(chalk.yellow("\n\nentering announcedOnMulticastSubnet"));
182
+ const serviceConfig = announcementToServiceConfig(announcement);
183
+ if (this._service && this.serviceConfig) {
123
184
  // verify that Announcement has changed
124
- if (sameAnnouncement(options, this.announcement!)) {
125
- debugLog(" Announcement ignored as it has been already made", options.name);
185
+ if (isSameService(serviceConfig, this.serviceConfig!)) {
186
+ debugLog(" Announcement ignored as it has been already made", announcement.name);
187
+ debugLog("exiting announcedOnMulticastSubnet-2", false);
126
188
  return false; // nothing changed
127
189
  }
128
190
  }
129
191
  assert(!this._multicastDNS, "already called ?");
192
+
130
193
  this._multicastDNS = acquireBonjour();
131
- this._service = await _announceServerOnMulticastSubnet(this._multicastDNS, options);
132
- this.announcement = options;
194
+
195
+ this.pendingAnnouncement = true;
196
+ this.serviceConfig = serviceConfig;
197
+ this._service = await _announceServerOnMulticastSubnet(this._multicastDNS, serviceConfig);
198
+ this.pendingAnnouncement = false;
199
+ debugLog(chalk.yellow("exiting announcedOnMulticastSubnet-3", true));
133
200
  return true;
134
201
  }
135
202
 
@@ -137,40 +204,80 @@ export class BonjourHolder {
137
204
  return !!this._multicastDNS;
138
205
  }
139
206
 
140
- public _announcedOnMulticastSubnetWithCallback(options: Announcement, callback: (err: Error | null, result?: boolean) => void) {
207
+ /**
208
+ *
209
+ * @param announcement
210
+ * @param callback
211
+ * @private
212
+ */
213
+ public announcedOnMulticastSubnetWithCallback(
214
+ announcement: Announcement,
215
+ callback: (err: Error | null, result?: boolean) => void
216
+ ) {
141
217
  callback(new Error("Internal Error"));
142
218
  }
143
219
 
144
- public async _stop_announcedOnMulticastSubnet(): Promise<void> {
145
- debugLog("_stop_announcedOnMulticastSubnet = ");
146
-
147
- if (this._service) {
148
- // due to a wrong declaration of Service.stop in the d.ts file we
149
- // need to use a workaround here
150
- const this_service = this._service as any as ServiceFixed;
151
- this._service = undefined;
152
- this._multicastDNS = undefined;
153
- releaseBonjour();
154
-
155
- this.announcement = undefined;
156
- const proxy = (callback: (err?: Error) => void) => {
157
- this_service.stop(() => {
158
- callback();
159
- });
160
- };
161
- const stop = promisify(proxy);
162
- await stop.call(this);
163
- //xx await new Promise((resolve) => setTimeout(resolve, 20));
164
- debugLog("stop announcement completed");
220
+ /**
221
+ * @private
222
+ */
223
+ public async stopAnnnouncedOnMulticastSubnet(): Promise<void> {
224
+ if (this.pendingAnnouncement) {
225
+ debugLog(chalk.bgWhite.redBright("stopAnnnouncedOnMulticastSubnet is pending : let's wait a little bit and try again"));
226
+ // wait until announcement is done
227
+ await new Promise((resolve) => setTimeout(resolve, 500));
228
+ return this.stopAnnnouncedOnMulticastSubnet();
229
+ }
230
+
231
+ debugLog(
232
+ chalk.green(
233
+ "\n\nentering stop_announcedOnMulticastSubnet = ",
234
+ this.serviceConfig ? serviceToString(this.serviceConfig) : "<null>"
235
+ )
236
+ );
237
+
238
+ if (!this._service) {
239
+ debugLog(chalk.green("leaving stop_announcedOnMulticastSubnet = no service"));
240
+ return;
165
241
  }
242
+ // due to a wrong declaration of Service.stop in the d.ts file we
243
+ // need to use a workaround here
244
+ const that_service = this._service;
245
+ const that_multicastDNS = this._multicastDNS!;
246
+ this._service = undefined;
247
+ this._multicastDNS = undefined;
248
+
249
+ this.serviceConfig = undefined;
250
+ const proxy = (callback: (err?: Error) => void) => {
251
+ if (that_multicastDNS && that_service.stop) {
252
+ // waitServiceDown(that_service, () => {
253
+ // debugLog(chalk.green("stop_announcedOnMulticastSubnet, ", serviceToString(that_service)));
254
+ // });
255
+ that_service.stop((err?: Error) => {
256
+ debugLog(chalk.green("service stopped err=", err));
257
+ that_multicastDNS.unpublishAll(() => {
258
+ releaseBonjour(that_multicastDNS, () => {
259
+ callback();
260
+ });
261
+ });
262
+ });
263
+ return;
264
+ } else {
265
+ callback();
266
+ }
267
+ };
268
+ const stop = promisify(proxy);
269
+ await stop.call(this);
270
+
271
+ debugLog(chalk.green("leaving stop_announcedOnMulticastSubnet = done"));
272
+ debugLog(chalk.green("leaving stop_announcedOnMulticastSubnet stop announcement completed"));
166
273
  }
167
274
 
168
- public _stop_announcedOnMulticastSubnetWithCallback(callback: (err: Error | null) => void) {
275
+ public stopAnnouncedOnMulticastSubnetWithCallback(callback: (err: Error | null) => void) {
169
276
  callback(new Error("Internal Error"));
170
277
  }
171
278
  }
172
279
 
173
- BonjourHolder.prototype._announcedOnMulticastSubnetWithCallback = callbackify(BonjourHolder.prototype._announcedOnMulticastSubnet);
174
- BonjourHolder.prototype._stop_announcedOnMulticastSubnetWithCallback = callbackify(
175
- BonjourHolder.prototype._stop_announcedOnMulticastSubnet
280
+ BonjourHolder.prototype.announcedOnMulticastSubnetWithCallback = callbackify(BonjourHolder.prototype.announcedOnMulticastSubnet);
281
+ BonjourHolder.prototype.stopAnnouncedOnMulticastSubnetWithCallback = callbackify(
282
+ BonjourHolder.prototype.stopAnnnouncedOnMulticastSubnet
176
283
  );
package/source/index.ts CHANGED
@@ -26,10 +26,10 @@ export {
26
26
 
27
27
  export { serverCapabilities } from "./server_capabilities";
28
28
  export {
29
- acquireBonjour,
30
29
  Announcement,
31
- releaseBonjour,
32
30
  BonjourHolder,
33
- sameAnnouncement,
34
- _announceServerOnMulticastSubnet
31
+ isSameService as sameService,
32
+ _announceServerOnMulticastSubnet,
33
+ announcementToServiceConfig,
34
+ serviceToString,
35
35
  }from "./bonjour";