mqttclient.js 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268
  1. var clientId = new Date().getTime().toString();
  2. var client = new Paho.MQTT.Client(window.juli.MQTT,window.juli.MQTTPORT, clientId);
  3. // set callback handlers
  4. client.onConnectionLost = onConnectionLost;
  5. var onConnectCallback;
  6. function onConnect(){
  7. // Once a connection has been made, make a subscription and send a message.
  8. console.log("onConnect");
  9. //alert("onConnect");
  10. if(window.deviceId != ""){
  11. client.subscribe("storybox/"+window.deviceId+"/client");
  12. //client.subscribe("storybox/"+window.deviceId+"/server");
  13. }
  14. //询问设备是否在线
  15. //var objCmd = {cmd:"getOnlineStatus"};
  16. //clientPublish(objCmd);
  17. //alert(window.deviceId);
  18. if(onConnectCallback)
  19. onConnectCallback();
  20. //支持离线消息,clearSession=false外,还必须订阅时qos=1
  21. //client.subscribe('12345',{qos:1});
  22. }
  23. function onFailure(){
  24. var date = new Date();
  25. console.log(date+" failure,try to reclient");
  26. clientConnect();
  27. }
  28. function onConnectionLost(){
  29. clientConnect();
  30. }
  31. function onMessageDelivered(message){
  32. alert("发送成功");
  33. }
  34. //function onMessageArrived(message){
  35. // alert(message.payloadString);
  36. //}
  37. function clientCreate(onConnectCallback){
  38. if(WebSocketCheck()){
  39. client.onMessageArrived = onMessageArrived;
  40. onConnectCallback = onConnectCallback;
  41. clientConnect();
  42. }
  43. else{
  44. var html = "<div class=\"alert alert-danger notSupportWebSocket\"><span>抱歉,您的浏览器不支持某些重要特性,有些功能无法正常使用</span></div>";
  45. $("body").find("div").eq(0).before(html);
  46. }
  47. }
  48. function clientConnect(){
  49. // connect the client
  50. try{
  51. client.connect({
  52. cleanSession:false,
  53. onSuccess:onConnect,
  54. onFailure:onFailure
  55. });
  56. }
  57. catch(error){
  58. console.log(error);
  59. }
  60. }
  61. function clientPublish(obj){
  62. if(WebSocketCheck()){
  63. var s = JSON.stringify(obj); //message is object ,like {cmd:"download",track:{url:play_url_32,title:trackId}}
  64. console.log(s);
  65. //alert(s);
  66. if(window.deviceId != ""){
  67. //var bytes = str2ab(s);
  68. var message = new Paho.MQTT.Message(s);
  69. //message = new Paho.MQTT.Message("hello");
  70. var topic = "storybox/"+window.deviceId+"/server/page";
  71. //alert(topic);
  72. message.destinationName = topic;
  73. try{
  74. console.log()
  75. client.send(message);
  76. }
  77. catch(error){
  78. console.log(error);
  79. }
  80. }
  81. }
  82. }
  83. function WebSocketCheck()
  84. {
  85. if ("WebSocket" in window)
  86. return true;
  87. else
  88. return false;
  89. }
  90. function onMessageArrived(message){
  91. console.log("onMessageArrived:"+message.payloadString);
  92. try{
  93. var obj = JSON.parse(message.payloadString);
  94. console.log(obj);
  95. if(obj.hasOwnProperty("onlineStatus")){
  96. if(onlineStatus_change)
  97. onlineStatus_change(obj.onlineStatus);
  98. }
  99. else if(obj.hasOwnProperty("boxInfo")){
  100. if(showBoxInfo)
  101. showBoxInfo(obj.boxInfo);
  102. }
  103. else if(obj.hasOwnProperty("volume")){
  104. if(currentVolumeDisplay)
  105. currentVolumeDisplay(obj.volume);
  106. }
  107. else if(obj.hasOwnProperty("trackListId") && obj.hasOwnProperty("trackId") && obj.hasOwnProperty("type")){
  108. if(playTrack_change)
  109. playTrack_change(obj.trackListId,obj.trackId,obj.type);
  110. }
  111. else if(obj.hasOwnProperty("playStatus")){
  112. if(playStatus_change)
  113. playStatus_change(obj.playStatus);
  114. }
  115. else if(obj.hasOwnProperty("mode")){
  116. if(mode_change)
  117. mode_change(obj.mode);
  118. }
  119. else if(obj.hasOwnProperty("downloadStatus") && obj.hasOwnProperty("trackId")){
  120. if(after_download)
  121. if(after_download)
  122. after_download(obj.downloadStatus,obj.trackId);
  123. }
  124. else if(obj.hasOwnProperty("configWifi")){
  125. if(onConfigWifi)
  126. onConfigWifi(obj.configWifi);
  127. }
  128. else if(obj.hasOwnProperty("playSinVoiceUrl") && obj.hasOwnProperty("openId")){
  129. console.log("------------------------------------");
  130. if(playSinVoiceUrl)
  131. playSinVoiceUrl(obj.playSinVoiceUrl,obj.openId);
  132. }
  133. else if(obj.hasOwnProperty("cmd") && obj.hasOwnProperty("trackListId") && obj.hasOwnProperty("trackIds")){
  134. if(obj.cmd == "initialTrackList" && startInitialTrackList)
  135. startInitialTrackList(obj.trackListId,obj.trackIds);
  136. }
  137. }
  138. catch(e){
  139. console.log(e);
  140. }
  141. }
  142. /*********************************发消息*************************************/
  143. //播放当前歌曲
  144. function playTrack(trackListId,trackId,url,downloadUrl){
  145. var cmdObj = {cmd:"playTrack",trackListId:trackListId,trackId:trackId,url:url,downloadUrl:downloadUrl};
  146. clientPublish(cmdObj);
  147. }
  148. //下一首
  149. function forwardTrack(){
  150. var cmdObj = {cmd:"forward"};
  151. clientPublish(cmdObj);
  152. }
  153. //上一首
  154. function backwardTrack(){
  155. var cmdObj = {cmd:"backward"};
  156. clientPublish(cmdObj);
  157. }
  158. //暂停
  159. function pauseTrack(){
  160. var cmdObj = {cmd:"pause"};
  161. clientPublish(cmdObj);
  162. }
  163. //继续播放
  164. function resumeTrack(){
  165. var cmdObj = {cmd:"resume"};
  166. clientPublish(cmdObj);
  167. }
  168. //询问当前播放歌曲
  169. function queryTrack(){
  170. var cmdObj = {cmd:"getTrack"};
  171. clientPublish(cmdObj);
  172. }
  173. //询问当前播放状态
  174. function queryPlayStatus(){
  175. var cmdObj = {cmd:"getPlayStatus"};
  176. clientPublish(cmdObj);
  177. }
  178. //询问当前播放模式
  179. function queryMode(){
  180. var cmdObj = {cmd:"getMode"};
  181. clientPublish(cmdObj);
  182. }
  183. //设置列表循环
  184. function setRepeatall(){
  185. var cmdObj = {cmd:"setMode",value:"repeat all"};
  186. clientPublish(cmdObj);
  187. }
  188. //设置单曲循环
  189. function setRepeatone(){
  190. var cmdObj = {cmd:"setMode",value:"repeat one"};
  191. clientPublish(cmdObj);
  192. }
  193. //远程关机
  194. function cmd_poweroff(){
  195. var cmdObj = {cmd:"setPoweroff"};
  196. clientPublish(cmdObj);
  197. }
  198. //设置音量
  199. function cmd_setvolume(value){
  200. var cmdObj = {cmd:"setVolume",value:value};
  201. clientPublish(cmdObj);
  202. }
  203. //主动询问是否在线
  204. function getOnlineStatus(){
  205. var cmdObj = {cmd:"getOnlineStatus"};
  206. clientPublish(cmdObj);
  207. }
  208. //主动询问设备信息
  209. function getBoxInfo(){
  210. var cmdObj = {cmd:"getBoxInfo"};
  211. clientPublish(cmdObj);
  212. }
  213. //升级指令
  214. function boxUpgrade(versionName,firmwareUrl){
  215. var cmdObj = {cmd:"upgrade",versionName:versionName,firmwareUrl:firmwareUrl};
  216. clientPublish(cmdObj);
  217. }
  218. //询问设备初始列表内容
  219. function getInitialTrackList(trackListId){
  220. trackListId=parseInt(trackListId);
  221. var cmdObj = {cmd:"getInitialTrackList",trackListId:trackListId};
  222. clientPublish(cmdObj);
  223. }
  224. //播放一个trackId的数组,不含url
  225. function playTracks(trackIds){
  226. var cmdObj = {cmd:"playTracks",trackIds:trackIds};
  227. clientPublish(cmdObj);
  228. }