function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); } function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } import { useMemo } from 'react'; import { throttle as loadshThrottle, noop } from '@zhst/func'; import { useDeepEffect, useLatest } from '@zhst/hooks'; import ws from "./ws"; var getSelf = function getSelf(v) { return v; }; export var SocketApi = { CameraTaskStatue: 'singer.DeviceService/SubScribeCameraTaskStatus', DeviceStatus: 'singer.TaskManagerService/SubscribeTaskStatus', SubscribeSolutionDeploy: 'singer.SolutionManagerService/SubscribeSolutionDeploy', SubscribeTasksSummary: 'singer.TaskManagerService/SubscribeTasksSummary', MonitorSubscribeResult: 'singer.MonitorService/MonitorSubscribeResult', MonitorSubscribeStatus: 'singer.MonitorService/MonitorSubscribeStatus', SubscribeArchiveGroupUpload: 'singer.ArchiveGroupService/CreateArchiveByImport', SubscribeJointTask: 'singer.JointTaskService/SubscribeJointTask', SubscribeGroupFragment: 'singer.VideoService/SubscribeVideoFragmentStatus', // 监听视频分片状态变化,包括新建、删除、变化 SubscribeGroup: 'singer.VideoService/SubscribeGroup', // 监听视频分组状态变化,列表变化也通知 SubscribeStreamEvent: 'singer.MediaManagerService/SubscribeStreamEvent' // 监听视频分组状态变化,列表变化也通知 }; export default (function (topic) { var iterator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop; var opt = arguments.length > 2 ? arguments[2] : undefined; var _ref = opt || {}, _ref$req = _ref.req, req = _ref$req === void 0 ? {} : _ref$req, _ref$throttle = _ref.throttle, throttle = _ref$throttle === void 0 ? 0 : _ref$throttle, _ref$beforeLoopTmp = _ref.beforeLoopTmp, beforeLoopTmp = _ref$beforeLoopTmp === void 0 ? getSelf : _ref$beforeLoopTmp, _ref$shouldBreak = _ref.shouldBreak, shouldBreak = _ref$shouldBreak === void 0 ? false : _ref$shouldBreak, forceRefresh = _ref.forceRefresh, close = _ref.close; // 带上token var reqstring = useMemo(function () { var newReq = _objectSpread(_objectSpread({}, req), {}, { extraHeaders: { authorization: localStorage.getItem('USER-TOKEN') } }); return JSON.stringify(newReq); }, [req]); var latestIterator = useLatest(iterator); useDeepEffect(function () { if (close) { return; } //控制socket 请求发送 if (shouldBreak) { return; } //去抖动 var tmpData = []; var throttleUpdate = loadshThrottle(function () { if (tmpData.length == 0) { return; } var _tmpData = beforeLoopTmp(tmpData); latestIterator.current(_tmpData); //加了throttle 数据就变成数组 tmpData = []; }, throttle); var unSubscribe = ws.subscribe(SocketApi[topic], reqstring, function (socketData) { try { if (!throttle) { latestIterator.current(socketData); } else { tmpData.push(socketData); throttleUpdate(); } } catch (error) { console.error('useSocke:', error); } }); return function () { try { unSubscribe(); throttleUpdate.cancel(); } catch (error) { console.error(error); throw error; } }; }, [topic, reqstring, shouldBreak, forceRefresh, close]); });