UNPKG

domotz-remote-pawn

Version:

Domotz Agent

115 lines (95 loc) 3.12 kB
/** * * Created by Andrea Azzarà <a.azzara@domotz.com> on 17/10/16. */ 'use strict'; var MODULE = 'WS: '; function wsServer(ws) { var webSocket = ws; var port = null; var server = null; function onDataReceived(data, conn) { var message; try { message = JSON.parse(data); } catch(err) { console.alert(MODULE + "error parsing command" + err); return; } var id = message.id || null; if (id == 'speed-test') { try { console.silly(MODULE + "Received " + data); var size = message.payload.size; var chunks = message.payload.chunks; var chunk = new Buffer(size / chunks); var mod = new Buffer(size % chunks); } catch (err) { console.error(MODULE + "data parsing error" + JSON.stringify(err)); return; } var left = JSON.parse(JSON.stringify(size)); var sendData = function () { try { if (left > 0) { console.info(MODULE + "left " + left); if (left >= chunk.length) { left -= chunk.length; conn.sendBinary(chunk, sendData); } else { left = 0; conn.sendBinary(new Buffer(mod), sendData); } } } catch (err) { console.alert(MODULE + "error sending data: " + JSON.stringify(err)); } }; sendData(); } else { console.info(MODULE + "unknown command id"); } } function create() { server = webSocket.createServer(function (conn) { conn.on("text", function (data) { onDataReceived(data, conn); }); conn.on("close", function (code, reason) { console.info(MODULE + "Connection closed"); }); conn.on("connect", function () { console.info(MODULE + "on connect"); }); conn.on("error", function () { console.info(MODULE + "on error"); }); }); var socketErrorHandler = function (error) { console.alert(MODULE + "socket error: " + error); }; server.listen(0, function () { /* listen on a random port */ port = server.socket.address().port; server.socket.on('error', socketErrorHandler) }); } function getPort() { return port; } function close() { if (!server) { console.info(MODULE + "unable to close connection: server not available"); return; } server.close(function () { server = null; }); } return { create: create, getPort: getPort, close: close } } module.exports.wsServer = wsServer;