import mqtt from '../../common/mqtt.js' //import mqtt from 'mqtt/dist/mqtt.js' const options = { clientId: "mqtt_" + parseInt(Math.random() * 100 + 800, 10), keepalive: 20, connectTimeout: 30 * 1000, }; // #ifdef H5 //let url = 'wss://test.mosquitto.org' //let url = 'ws://60.205.190.38' let url = 'wss://mqtt.test.radio1964.com' // #endif // #ifdef MP-WEIXIN||APP-PLUS //let url = 'wxs://test.mosquitto.org' //let url = 'wx://60.205.190.38' let url = 'wxs://mqtt.test.radio1964.com' // #endif export default { namespaced: true, state:{ mqttClient: undefined, msgList:[], }, getters:{ //mqtt连接状态 connected:state =>{ return state.mqttClient !== undefined && state.mqttClient.connected }, //最新的一个消息 newMessage:state =>{ return msgList[msgList.length-1] } }, mutations:{ connect(state,getters) { console.log('connect') if (state.mqttClient === undefined) { state.mqttClient = mqtt.connect(url, options) //连接成功回调 state.mqttClient.on("connect", function() { console.log("connect success!"); }); //异常回调 state.mqttClient.on("error", function(err) { console.log(err); }); state.mqttClient.on('offline', function() { //console.log(`offline callback connected = ${state.mqttClient.connected}`); console.log(`offline callback`); }) state.mqttClient.on('end', function() { //console.log(`end callback connected = ${state.mqttClient.connected}`); console.log(`end callback`); }) state.mqttClient.on('close', function() { //console.log(`close callback connected = ${state.mqttClient.connected}`); console.log(`close callback`); }) state.mqttClient.on('message',function(topic,message){ console.log(`message = ${message.toString()}`); state.msgList.push({ topic: topic.toString(), msg: message.toString(), }); }) } else { //console.log(`reconnect connected = ${state.mqttClient.connected}`) //console.log(`reconnect111 connected = ${getters.connected}`) if (state.mqttClient !== undefined && !state.mqttClient.connected) { console.log('reconnect') state.mqttClient.reconnect() //重连成功的回调 state.mqttClient.on("reconnect", function() { state.isConnect = true; console.log("reconnect success!"); }); } } }, disconnect(state) { console.log('disconnect') if (state.mqttClient !== undefined) { //mqtt.js在小程序运行有问题,调用end 不会回调close,而且state.mqttClient.connected一直是true state.mqttClient.end(false,() =>{ console.log(`state.mqttClient.connected = ${state.mqttClient.connected}`); }) //state.mqttClient = undefined } } }, actions:{ //发布消息 publish({state,commit,getters},message){ console.log('publish'); console.log(message); return new Promise((resolve,reject) =>{ if(getters.connected){ //发布消息 state.mqttClient.publish(message.topic,message.payload,(err) =>{ if(err){ console.log(err); reject(err) }else{ resolve() } }) }else{ reject("mqttClient is not connected") } }) }, //订阅消息 subscribe({state,commit,getters},topic){ console.log(`subscribe topic = ${topic}`); return new Promise((resolve,reject) =>{ if(getters.connected){ //发布消息 state.mqttClient.subscribe(topic,(err) =>{ if(err){ console.log(err); reject(err) }else{ resolve() } }) }else{ reject("mqttClient is not connected") } }) } } }