moduleMqtt.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. import mqtt from '../../common/mqtt.js'
  2. //import mqtt from 'mqtt/dist/mqtt.js'
  3. const options = {
  4. clientId: "mqtt_" + parseInt(Math.random() * 100 + 800, 10),
  5. keepalive: 20,
  6. connectTimeout: 30 * 1000,
  7. };
  8. // #ifdef H5
  9. //let url = 'wss://test.mosquitto.org'
  10. //let url = 'ws://60.205.190.38'
  11. let url = 'wss://mqtt.test.radio1964.com'
  12. // #endif
  13. // #ifdef MP-WEIXIN||APP-PLUS
  14. //let url = 'wxs://test.mosquitto.org'
  15. //let url = 'wx://60.205.190.38'
  16. let url = 'wxs://mqtt.test.radio1964.com'
  17. // #endif
  18. export default {
  19. namespaced: true,
  20. state:{
  21. mqttClient: undefined,
  22. msgList:[],
  23. },
  24. getters:{
  25. //mqtt连接状态
  26. connected:state =>{
  27. return state.mqttClient !== undefined && state.mqttClient.connected
  28. },
  29. //最新的一个消息
  30. newMessage:state =>{
  31. return msgList[msgList.length-1]
  32. }
  33. },
  34. mutations:{
  35. connect(state,getters) {
  36. console.log('connect')
  37. if (state.mqttClient === undefined) {
  38. state.mqttClient = mqtt.connect(url, options)
  39. //连接成功回调
  40. state.mqttClient.on("connect", function() {
  41. console.log("connect success!");
  42. });
  43. //异常回调
  44. state.mqttClient.on("error", function(err) {
  45. console.log(err);
  46. });
  47. state.mqttClient.on('offline', function() {
  48. //console.log(`offline callback connected = ${state.mqttClient.connected}`);
  49. console.log(`offline callback`);
  50. })
  51. state.mqttClient.on('end', function() {
  52. //console.log(`end callback connected = ${state.mqttClient.connected}`);
  53. console.log(`end callback`);
  54. })
  55. state.mqttClient.on('close', function() {
  56. //console.log(`close callback connected = ${state.mqttClient.connected}`);
  57. console.log(`close callback`);
  58. })
  59. state.mqttClient.on('message',function(topic,message){
  60. console.log(`message = ${message.toString()}`);
  61. state.msgList.push({
  62. topic: topic.toString(),
  63. msg: message.toString(),
  64. });
  65. })
  66. } else {
  67. //console.log(`reconnect connected = ${state.mqttClient.connected}`)
  68. //console.log(`reconnect111 connected = ${getters.connected}`)
  69. if (state.mqttClient !== undefined && !state.mqttClient.connected) {
  70. console.log('reconnect')
  71. state.mqttClient.reconnect()
  72. //重连成功的回调
  73. state.mqttClient.on("reconnect", function() {
  74. state.isConnect = true;
  75. console.log("reconnect success!");
  76. });
  77. }
  78. }
  79. },
  80. disconnect(state) {
  81. console.log('disconnect')
  82. if (state.mqttClient !== undefined) {
  83. //mqtt.js在小程序运行有问题,调用end 不会回调close,而且state.mqttClient.connected一直是true
  84. state.mqttClient.end(false,() =>{
  85. console.log(`state.mqttClient.connected = ${state.mqttClient.connected}`);
  86. })
  87. //state.mqttClient = undefined
  88. }
  89. }
  90. },
  91. actions:{
  92. //发布消息
  93. publish({state,commit,getters},message){
  94. console.log('publish');
  95. console.log(message);
  96. return new Promise((resolve,reject) =>{
  97. if(getters.connected){
  98. //发布消息
  99. state.mqttClient.publish(message.topic,message.payload,(err) =>{
  100. if(err){
  101. console.log(err);
  102. reject(err)
  103. }else{
  104. resolve()
  105. }
  106. })
  107. }else{
  108. reject("mqttClient is not connected")
  109. }
  110. })
  111. },
  112. //订阅消息
  113. subscribe({state,commit,getters},topic){
  114. console.log(`subscribe topic = ${topic}`);
  115. return new Promise((resolve,reject) =>{
  116. if(getters.connected){
  117. //发布消息
  118. state.mqttClient.subscribe(topic,(err) =>{
  119. if(err){
  120. console.log(err);
  121. reject(err)
  122. }else{
  123. resolve()
  124. }
  125. })
  126. }else{
  127. reject("mqttClient is not connected")
  128. }
  129. })
  130. }
  131. }
  132. }