UNPKG

devir-mbclient

Version:

MB client

137 lines (99 loc) 3.04 kB
/** * Created by mac on 17.09.15. */ var net = require("net"); module.exports = function(remoteAddress, remotePort, onData,onConnected){ var _delimiterBegin = String.fromCharCode(191); var _delimiterEnd = String.fromCharCode(161); var _writeBuffer = []; var _remoteAddress = remoteAddress; var _remotePort = remotePort; var _onData = onData; var _onConnected = onConnected; var parentclient = new net.Socket(); var connected = false; var isReconecting = false; var _readBuffer = ""; var _sending = false; var getMessage = function(){ var startIndex = _readBuffer.indexOf(_delimiterBegin); var endIndex = _readBuffer.indexOf(_delimiterEnd); if(startIndex>-1 && endIndex>-1){ var message = _readBuffer.substring(startIndex+1, endIndex); _readBuffer = _readBuffer.substr(endIndex+1); return message; }else{ return null; } }; var connect = function(){ var client = new net.Socket(); parentclient = client; connected = false; client.connect(_remotePort, _remoteAddress); client.on('data', function(data){ var s = data.toString(); if(s.charCodeAt(0)==191 && s.charCodeAt(s.length-1)==161 && s.lastIndexOf(191)==0){ if (onData) { onData(s.substring(1, s.length-1)); } } else{ _readBuffer += data; var message = getMessage(); while (message) { if (_onData) { _onData(message); } message = getMessage(); } } }); client.on('close', function(had_error) { connected = false; console.log('Timeout for 5 seconds before trying MessageBroker at:'+_remoteAddress+ ":" + _remotePort + ' again'); client.destroy(); client = null; setTimeout(function() { isReconecting = true; connect(_remoteAddress, _remotePort, _onData, _onConnected); }, 4000); }); client.on("connect", function(){ console.log("connected"); connected = true; if(_onConnected) _onConnected(isReconecting); }) client.on('error', function(e) { }); parentclient.on('drain', function(){ isSendingFalse(); doSend(); }); } var isSendingFalse = function(){ _sending = false; } var doSend = function(){ if(_writeBuffer.length>0){ if(connected){ _sending = !parentclient.write(_writeBuffer.pop()); } else{ setTimeout(function(){ doSend(); }, 1000); } } } var send = function(object){ _writeBuffer.push(_delimiterBegin+JSON.stringify(object)+_delimiterEnd); if(!_sending){ doSend(); } } return { send: send, connect: connect } }