bodyposeWs.ts 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. import io from 'socket.io-client';
  2. import { ref, onMounted, onUnmounted, onBeforeUnmount } from 'vue';
  3. export function useWebSocket() {
  4. const address: any = import.meta.env.VITE_APP_BASE_API;
  5. const token: any = localStorage.getItem('token');
  6. const myToken: any = 'JWT ' + token;
  7. let socketBodypose: any = null; //ws实例对象
  8. function bodyposeWs(callback: any) {
  9. if (socketBodypose == null) {
  10. socketBodypose = io(address + '/', { transports: ['websocket', 'polling'], query: { type: 'bodypose', Authorization: token ? myToken : '' } });
  11. }
  12. socketBodypose.on('my_response', (e: any) => {
  13. callback(e);
  14. });
  15. socketBodypose.on('fe_device_init_result', (e: any) => {
  16. e.type = "fe_device_init_result";
  17. if (e.device_info == undefined) {
  18. closeWS();
  19. }
  20. callback(e);
  21. });
  22. socketBodypose.on('bodyposecontroller_ack', (e: any) => {
  23. callback(e);
  24. });
  25. socketBodypose.on('bodyposecontroller_result', (e: any) => {
  26. e.type = "bodyposecontroller_result";
  27. callback(e);
  28. });
  29. socketBodypose.on('disconnect', (e: any) => {
  30. callback(e);
  31. });
  32. }
  33. /**
  34. * 发送消息
  35. */
  36. function sendMessage(type: string, data: any, callback?: () => void) {
  37. if (socketBodypose == null) {
  38. return false;
  39. }
  40. if (socketBodypose.connected) {
  41. callback = callback || function () { };
  42. socketBodypose.emit(type, data, callback);
  43. }
  44. }
  45. /**
  46. * 开始连接设备信息
  47. */
  48. function startDevice(data?: any, callback?: any) {
  49. sendMessage(
  50. 'fe_device_init',
  51. {
  52. data: data
  53. },
  54. () => { }
  55. );
  56. }
  57. /**
  58. * 查看姿态识别模块是否可用
  59. */
  60. function checkBodypose(data?: any, callback?: any) {
  61. sendMessage(
  62. 'bodyposecontroller',
  63. {
  64. cmd: 'check_bodyposecontroller_available',
  65. ctrl_name: `bodyposecontroller_${data}`
  66. },
  67. () => { }
  68. );
  69. }
  70. /**
  71. * 开启姿态识别模块
  72. */
  73. function openBodypose(data?: any, callback?: any) {
  74. sendMessage(
  75. 'bodyposecontroller',
  76. {
  77. cmd: 'open_bodyposecontroller',
  78. ctrl_name: `bodyposecontroller_${data}`
  79. },
  80. () => { }
  81. );
  82. }
  83. /**
  84. * 关闭姿态识别模块
  85. */
  86. function terminateBodypose(data?: any, callback?: any) {
  87. sendMessage(
  88. 'bodyposecontroller',
  89. {
  90. cmd: 'terminate_bodyposecontroller',
  91. ctrl_name: `bodyposecontroller_${data}`
  92. },
  93. () => {
  94. }
  95. );
  96. }
  97. /**
  98. * 暂停姿态识别模块
  99. */
  100. function suspendBodypose(data?: any, callback?: any) {
  101. sendMessage(
  102. 'bodyposecontroller',
  103. {
  104. cmd: 'suspend_bodyposecontroller',
  105. ctrl_name: `bodyposecontroller_${data}`
  106. },
  107. () => { }
  108. );
  109. }
  110. /**
  111. * 重启姿态识别模块
  112. */
  113. function resumeBodypose(data?: any, callback?: any) {
  114. sendMessage(
  115. 'bodyposecontroller',
  116. {
  117. cmd: 'resume_bodyposecontroller',
  118. ctrl_name: `bodyposecontroller_${data}`
  119. },
  120. () => { }
  121. );
  122. }
  123. /**
  124. * 获取姿态识别模块状态
  125. */
  126. function getBodyposeState(data?: any, callback?: any) {
  127. sendMessage(
  128. 'bodyposecontroller',
  129. {
  130. cmd: 'get_bodyposecontroller_state',
  131. ctrl_name: `bodyposecontroller_${data}`
  132. },
  133. () => { }
  134. );
  135. }
  136. /**
  137. * 关闭WS
  138. */
  139. function closeWS() {
  140. if (socketBodypose) {
  141. socketBodypose.close();
  142. socketBodypose = null;
  143. }
  144. }
  145. onBeforeUnmount(() => {
  146. closeWS();
  147. });
  148. return { bodyposeWs, startDevice, sendMessage, checkBodypose, openBodypose, terminateBodypose, suspendBodypose, resumeBodypose, getBodyposeState, closeWS };
  149. }