websocket.js 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. let ws = false
  2. let weboscket_callback = null
  3. import { generateUUID } from './util'
  4. import { showToast } from './feedback'
  5. // 手动关闭 websocket
  6. let closewebsocket = () => {
  7. // console.log("关闭")
  8. ws = false;
  9. dd.offSocketOpen();
  10. dd.offSocketMessage();
  11. dd.offSocketError();
  12. dd.closeSocket();
  13. dd.offSocketClose();
  14. }
  15. let initWebSocket = (callback,is) => {
  16. //初始化 websocket
  17. dd.onSocketClose((res) => {
  18. // console.log(res);
  19. });
  20. // 打开
  21. dd.onSocketOpen((res) => {
  22. // console.log("打开了",res)
  23. if(dd.globalData.token){
  24. let wsData = {
  25. type: 'auth',
  26. token: dd.globalData.token,
  27. machine: generateUUID()
  28. };
  29. sendSocketMessage(wsData)
  30. }
  31. ws = true;
  32. callback()
  33. },(err)=>{
  34. console.log("打开失败了",err)
  35. });
  36. // 监听信息
  37. dd.onSocketMessage((res) => {
  38. let data = JSON.parse(res.data)
  39. if (data.type == "ping") {
  40. if (ws) {
  41. sendSocketMessage('续命')
  42. }
  43. }
  44. return weboscket_callback(data);
  45. })
  46. // 报错
  47. dd.onSocketError((res) => {
  48. showToast('服务器繁忙,请稍后再试!');
  49. return weboscket_callback({ type: 'error' })
  50. // opneWebSocket();
  51. });
  52. // 创建
  53. let url=is? 'wss://' + dd.globalData.webScoketUrl + '/ws2/':'wss://' + dd.globalData.webScoketUrl + '/ws/'
  54. // url='wss://app55493.eapps.dingtalkcloud.com/ws2/'
  55. dd.connectSocket({
  56. url:url,
  57. success: (res) => {
  58. console.log("成功了",res)
  59. },
  60. fail: (res) => {
  61. console.log("失败了",res)
  62. },
  63. complete: () => {},
  64. });
  65. }
  66. // 发送消息
  67. let sendSocketMessage = (message) => {
  68. dd.sendSocketMessage({
  69. data: JSON.stringify(message), // 需要发送的内容
  70. success: (res) => { },
  71. });
  72. };
  73. // 发送数据
  74. let sendData = (data, callback,is) => {
  75. weboscket_callback = callback
  76. if (ws) {//周统计不需要验证
  77. sendSocketMessage(data);
  78. } else {
  79. initWebSocket(() => {
  80. sendData(data, callback);
  81. },is);
  82. }
  83. }
  84. // 导出
  85. export {
  86. initWebSocket,
  87. sendData,
  88. closewebsocket
  89. }