Repository navigation
Expand file tree
/
Copy pathtinyMQTT.min.js
More file actions
4 lines (4 loc) · 1.61 KB
/
Copy pathtinyMQTT.min.js
File metadata and controls
4 lines (4 loc) · 1.61 KB
1
2
3
4
var MQTT=function(a,b){b=b||{};this.srv=a;this.prt=b.port||1883;this.usr=b.username;this.pwd=b.password;this.conn=!1;this.rHF=null};function onData(a){var b=a.charCodeAt(0);if(3===b>>4){var c=a.charCodeAt(2)<<8|a.charCodeAt(3);a={topic:a.substr(4,c),message:a.substr(4+c,a.charCodeAt(1)-c),dup:(b&8)>>3,qos:(b&6)>>1,retain:b&1};this.emit("message",a)}}MQTT.prototype.mqStr=function(a){return String.fromCharCode(a.length>>8,a.length&255)+a};
MQTT.prototype.mqPkt=function(a,b,c){return String.fromCharCode(a,b.length+c.length)+b+c};MQTT.prototype.mqConn=function(a){var b=0;a=this.mqStr(a);this.usr&&this.pwd&&(b|=this.usr?128:0,b|=this.usr&&this.pwd?64:0,a+=this.mqStr(this.usr)+this.mqStr(this.pwd));b=String.fromCharCode(parseInt(b.toString(16),16));return this.mqPkt(16,this.mqStr("MQTT")+"\u0004"+b+"\u00ff\u00ff",a)};
MQTT.prototype.connect=function(){var a=this,b=function(){clearInterval(a.rHF);a.rHF=null;a.cli.write(a.mqConn(getSerial()));a.emit("connected");a.conn=!0;a.cli.on("data",onData.bind(a));a.cli.on("end",function(){delete a.cli;a.conn=!1;a.emit("disconnected")})};a.conn||null!==a.rHF||(a.cli=require("net").connect({host:a.srv,port:a.prt},b),a.rHF=setInterval(function(){a.cli=require("net").connect({host:a.srv,port:a.prt},b)},5E3))};
MQTT.prototype.subscribe=function(a){this.cli.write(this.mqPkt(130,String.fromCharCode(256,1),this.mqStr(a)+String.fromCharCode(1)))};MQTT.prototype.publish=function(a,b){this.conn&&(this.cli.write(this.mqPkt(49,this.mqStr(a),b)),this.emit("published"))};MQTT.prototype.disconnect=function(){this.cli.write(String.fromCharCode(224)+"\x00")};exports.create=function(a,b){return new MQTT(a,b)};