node-opcua-transport
Version:
pure nodejs OPCUA SDK - module transport
70 lines • 2.29 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.FakeServer = void 0;
const node_events_1 = require("node:events");
const node_net_1 = __importDefault(require("node:net"));
const node_opcua_assert_1 = require("node-opcua-assert");
class FakeServer extends node_events_1.EventEmitter {
port;
url;
tcpServer;
_serverSocket;
_responses;
constructor({ port }) {
super();
this.port = port;
this.url = `opc.tcp://localhost:${port}`;
this.tcpServer = new node_net_1.default.Server();
this._serverSocket = undefined;
this.tcpServer.on("connection", (socket) => {
(0, node_opcua_assert_1.assert)(!this._serverSocket, " already connected");
this._serverSocket = socket;
this._serverSocket.on("data", (data) => {
const func = this.popResponse();
if (func && this._serverSocket) {
func(this._serverSocket, data);
}
});
this._serverSocket.on("err", (_err) => {
// console.log(" @@@@ socket err ",err);
});
this._serverSocket.on("close", (_err) => {
// console.log(" @@@@ socket closed ",err);
});
this._serverSocket.on("end", (err) => {
// console.log(" @@@@ socket end ",err);
this.emit("end", err);
});
});
}
getSocket() {
// c8 ignore next
if (!this._serverSocket) {
throw new Error("No socket available");
}
return this._serverSocket;
}
initialize(done) {
this.tcpServer.listen(this.port, () => {
done();
});
}
shutdown(callback) {
this.tcpServer.close(callback);
}
popResponse() {
if (!this._responses) {
return null;
}
return this._responses.shift();
}
pushResponse(func) {
this._responses = this._responses || [];
this._responses.push(func);
}
}
exports.FakeServer = FakeServer;
//# sourceMappingURL=fake_server.js.map