nicecode-v2/packages/biz/es/useSocket/index.js

95 lines
4.8 KiB
JavaScript

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]);
});