1function ArrayToString(fileData) { 2 var dataString = ""; 3 for (var i = 0; i < fileData.length; i++) { 4 dataString += String.fromCharCode(fileData[i]); 5 } 6 7 return dataString; 8} 9 10console.log('mqtt: testing mqtt...'); 11 12var mqtt = require('mqtt'); 13if (!(mqtt && mqtt.createClient)) { 14 throw new Error("mqtt: [failed] require(\'mqtt\')"); 15} 16 17console.log('mqtt: [success] require(\'mqtt\')'); 18 19function testUnsubscribe() { 20 return new Promise(function (resolve, reject) { 21 mqttClient.subscribe({ 22 topic: '/amp-test', 23 success: function () { 24 console.log('mqtt: [success] mqtt subscribe'); 25 mqttClient.unsubscribe({ 26 topic: '/amp-test', 27 success: function () { 28 console.log('mqtt: [success] mqtt unsubscribe'); 29 resolve(); 30 }, 31 fail: function () { 32 console.log('mqtt: [failed] mqtt unsubscribe'); 33 reject(); 34 } 35 }); 36 }, 37 fail: function () { 38 console.log('mqtt: [failed] mqtt subscribe'); 39 reject(); 40 } 41 }); 42 }); 43} 44 45function testOnMessage() { 46 return new Promise(function (resolve, reject) { 47 var testTopic = '/amp-hello'; 48 var recvCnt = 0, sendCnt = 0; 49 var defaultMessage = 'AMP mqtt reply'; 50 mqttClient.subscribe({ 51 topic: testTopic 52 }); 53 mqttClient.on('message', function (topic, payload) { 54 recvCnt++; 55 console.log('mqtt: [debug] mqtt on message, topic[' + topic + ']: ' + ArrayToString(payload) + ', cnt: ' + recvCnt); 56 57 if (!topic || typeof topic !== 'string' || !payload || typeof payload !== 'object') { 58 console.log("mqtt: [failed] mqtt on(\'message\')"); 59 reject(); 60 } 61 62 if (topic !== testTopic || ArrayToString(payload) !== defaultMessage) { 63 console.log("mqtt: [failed] mqtt on(\'message\')"); 64 reject(); 65 } 66 if (recvCnt >= 10) { 67 mqttClient.close(); 68 console.log('mqtt: [success] mqtt.on(\'message\')'); 69 console.log('mqtt: testing mqtt success'); 70 resolve(); 71 } 72 }); 73 74 setTimeout(function () { 75 if (recvCnt != 10) { 76 console.log('mqtt: [failed] mqtt on message'); 77 reject(); 78 } 79 }, 12000); 80 81 var intervalHandle = setInterval(function () { 82 mqttClient.publish({ 83 topic: testTopic, 84 message: defaultMessage, 85 success: function () { 86 sendCnt++; 87 console.log("mqtt: [debug] publish success, cnt: ", sendCnt); 88 if (sendCnt >= 10) { 89 clearInterval(intervalHandle); 90 console.log('mqtt: [success] mqtt.publish()'); 91 resolve(); 92 } 93 }, 94 fail: function () { 95 console.log("mqtt: [failed] mqtt.publish()"); 96 reject(); 97 } 98 }); 99 }, 1000); 100 }); 101} 102 103function onConnect() { 104 testUnsubscribe().then(function () { 105 return testOnMessage().then(function () { 106 console.log('mqtt: testing mqtt success'); 107 }); 108 }).catch(function () { 109 console.log('mqtt: testing mqtt failed'); 110 }); 111} 112 113var mqttClient = mqtt.createClient({ 114 host: 'mqtt.eclipse.org', 115 port: 1883, 116 username: 'aiot', 117 password: '123', 118 success: function () { 119 console.log('mqtt: [debug] mqtt connected'); 120 }, 121 fail: function () { 122 console.log('mqtt: [debug] mqtt connect failed'); 123 } 124}); 125 126mqttClient.on('connect', function () { 127 console.log('mqtt: [success] mqtt.on(\'connect\')'); 128 onConnect(); 129}); 130 131mqttClient.on('disconnect', function () { 132 console.log('mqtt: [success] mqtt.on(\'disconnect\')'); 133}); 134 135mqttClient.on('close', function () { 136 console.log('mqtt: [success] mqtt.on(\'close\')'); 137});