homebridge-smartsystem
Version:
SmartServer (Proxy TCP sockets to the cloud, Smappee MQTT, Duotecno IP Nodes, Homekit interface)
106 lines • 4.75 kB
JavaScript
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getSocket = void 0;
const net = require("net");
const kWebSocket = false;
function getSocket(address, port, data, end, log, err) {
return __awaiter(this, void 0, void 0, function* () {
if (kWebSocket)
return getWebSocket(address, port, data, end, log, err);
else
return getTCPSocket(address, port, data, end, log, err);
});
}
exports.getSocket = getSocket;
function getTCPSocket(address, port, data, end, log, err) {
return __awaiter(this, void 0, void 0, function* () {
return new Promise((resolve, reject) => {
////////////////////////////////
// try to open the connection //
try {
const socket = net.createConnection({ port: port, host: address }); // new net.Socket();
if (!socket)
throw (new Error("could create new socket"));
// disable Nagle
socket.setNoDelay();
//////////////////////////
// set connect listener //
socket.on("connect", (message) => {
log("starting connection to " + address + " on port " + port);
// resolve our promise with the opened socket
resolve(socket);
});
///////////////////////
// set data listener //
socket.on("data", (message) => {
// messages need to be buffered until "]" is received
data(message.toString());
});
////////////////////////////////////////////////////////////////
// set an error listener, if available reject pending promise //
socket.on('error', (e) => {
err("TCP Socket: " + JSON.stringify(e));
reject(e);
});
///////////////////////////////////////////
// set end: the server closed the socket //
socket.on("end", () => {
end();
});
}
catch (e) {
err("Failed to open a connection to : " + address + " on port " + port);
reject(e);
}
});
});
}
function getWebSocket(address, port, data, end, log, err) {
return __awaiter(this, void 0, void 0, function* () {
return new Promise((resolve, reject) => {
try {
////////////////////////////////
// try to open the connection //
log("opening connection to the SmartSocket Server");
const wsserver = this.system.config.socketserver + ":" + this.system.config.socketport;
const tcpserver = address + ":" + port;
const socket = new WebSocket("ws://" + wsserver + "/" + tcpserver);
if (!socket)
throw (new Error("could create new web socket"));
///////////////////////
// set data listener //
this.socket.onmessage = (message) => {
// messages need to be buffered until "]" is received
data(message.data);
};
///////////////////////////
// set an error listener //
this.socket.onerror = (e) => {
err("Socket: " + e);
};
///////////////////////////////////////////
// set end: the server closed the socket //
this.socket.onclose = () => {
end();
};
this.socket.onopen = () => {
resolve(this.socket);
};
}
catch (e) {
this.err("Failed to open a connection on port " + this.getPort());
reject(e);
}
});
});
}
//# sourceMappingURL=smartsocket.js.map