28//4.订阅主题,接收指令
29const subTopic = `/${deviceConfig.productKey}/${deviceConfig.deviceName}/user/get`;
30client.subscribe(subTopic)
31client.on('message', function(topic, message) { 32 console.log("topic " + topic) 33 console.log("message " + message) 34}) 35
36//IoT平台mqtt连接参数初始化
37function initMqttOptions(deviceConfig) {
20
21//3.属性数据上报
22const topic = `/${deviceConfig.productKey}/${deviceConfig.deviceName}/user/update`;
23setInterval(function() { 24 //发布数据到topic 25 client.publish(topic, reportScanData()); 26}, 5 * 1000); 27
28//4.订阅主题,接收指令
29const subTopic = `/${deviceConfig.productKey}/${deviceConfig.deviceName}/user/get`;
22console.log("AMQP Connection");
23
24//接收云端推送消息的回调函数。
25container.on('message', function (context) {26 let msg = context.message;27 let messageId = msg.message_id;28 let topic = msg.application_properties.topic;29 let content =JSON.parse(Buffer.from(msg.body.content).toString().replace(/\'/g, '"'));30 if (topic.indexOf('/user/update') !== -1) {31 console.log("\nTopic: " + topic)32 if (content.subType === "SCAN") {33 // 网关持续上传周围的跳绳清单和状态、配置信息34 console.dir(content, { depth: null });35 } else if (content.subType === "JUMPING") {36 // 网关上传周围的跳绳的进度37 console.dir(content, { depth: null });38 } else if (content.subType === "GROUPING") {39 // 网关汇报分组结果40 console.dir(content, { depth: null });41 } else if (content.subType === "START_JUMP") {42 // 网关汇报跳绳即将开始43 console.dir(content, { depth: null });44 }45 } else {46 console.warn("Unsupported topics", topic)47 }48 //发送ACK,注意不要在回调函数有耗时逻辑。49 context.delivery.accept();50});51
52//计算password签名。
53function hmacSha1(key, context) {
It is recommended to use arrow functions as callbacks.
Arrow functions can be an attractive alternative to function expressions for callbacks or function arguments.
For example, arrow functions are automatically bound to their surrounding scope/context. This provides an alternative to the pre-ES6 standard of explicitly binding function expressions to achieve similar behavior.
Additionally, arrow functions are:
less verbose, and easier to reason about.
bound lexically regardless of where or when they are invoked.
func(function(a) { return a; }); // ERROR
// prefer: func(a => a)
func(function() { return this.a; }.bind(this)); // ERROR
// prefer: func(() => this.a)
// arrow function callback
func(a => a); // OK
// generator as callback
func(function*() { yield; }); // OK
// function expression not used as callback or function argument
var funcVar = function func(a) { return a; }; // OK
// unbound function expression callback
func(function() { return this.a; }); // OK
// recursive named function callback
func(function recursiveFunc(n) { return n && n + recursiveFunc(n - 1); }); // OK