UNPKG

uno-ws-client

Version:
175 lines (151 loc) 4.72 kB
import _extends from "@babel/runtime/helpers/extends"; import { Ws } from './websocket'; import { merge, isNil, omitBy } from 'lodash-es'; var defaultParser = function defaultParser(data) { return data; }; var defaultOptions = { extraWs: {} }; var defEventList = {}; export var SDKBase = /*#__PURE__*/function () { function SDKBase(options) { this.eventList = defEventList; this.listenedEvents = {}; this.checkSdk = true; this.options = void 0; this.wsClient = void 0; this.options = _extends({}, defaultOptions, options); this.options.checkSdk && (this.checkSdk = this.options.checkSdk); this.init(); } /** * 有效的message转化为事件 * @param eventName 事件/sdk名称 * @param callback 回调函数,如果校验通过返回通信数据,校验不通过返回错误信息 */ var _proto = SDKBase.prototype; _proto.listener = function listener(eventName, callback) { if (Object.keys(this.eventList).indexOf(eventName) > -1) { var parser = this.eventList[eventName]; if (this.listenedEvents[eventName]) { window.removeEventListener(eventName, this.listenedEvents[eventName]); } this.listenedEvents[eventName] = function (e) { var obj = parser(e.detail); if (obj.error) { callback && callback(false, obj.data, obj.error); } else { callback && callback(true, obj.data); } }; window.addEventListener(eventName, this.listenedEvents[eventName]); } } /** * 注册自定义事件(备注:目前可以替换初始事件的parser) * @param eventName 事件名称 * @param parser 数据处理方法 */ ; _proto.registerEvent = function registerEvent(eventName, parser) { this.eventList[eventName] = parser || defaultParser; } /** * 发送消息 * @param event * @param data */ ; _proto.send = function send(_ref) { var _this$wsClient; var event = _ref.event, data = _ref.data, entity = _ref.entity, sdk = _ref.sdk; (_this$wsClient = this.wsClient) === null || _this$wsClient === void 0 ? void 0 : _this$wsClient.send(_extends({}, this.options.customData ? this.options.customData : {}, { type: event, // 兼容原高速数据结构字段,后面看是否可以删除, entity: entity, event: event }, sdk ? { sdk: sdk } : {}, this.options.source ? { source: this.options.source } : {}, this.options.target ? { target: this.options.target } : {}, this.options.roomExclude ? { roomExclude: this.options.roomExclude } : {}, { data: omitBy(data, isNil) })); } /** * 更新配置后重新初始化 * @param opts 配置 */ ; _proto.updateOptRetry = function updateOptRetry(opts) { this.options = merge(this.options, opts); this.init(); } /** * sdk检查过滤 */ ; _proto.sdkParser = function sdkParser(msg) { return new CustomEvent(msg.event, { detail: { error: false, data: msg.data } }); } /** * 销毁 */ ; _proto.destroy = function destroy() { var _this$wsClient2; (_this$wsClient2 = this.wsClient) === null || _this$wsClient2 === void 0 ? void 0 : _this$wsClient2.destroy(); this.wsClient = undefined; for (var _key in this.listenedEvents) { if (Object.prototype.hasOwnProperty.call(this.listenedEvents, _key)) { window.removeEventListener(_key, this.listenedEvents[_key]); } } this.listenedEvents = {}; this.eventList = defEventList; }; _proto.init = function init() { var _this = this; if (this.wsClient) { this.destroy(); } if (this.options.service && this.options.registerData.group) { this.wsClient = new Ws(this.options.service, _extends({ registerData: { source: this.options.source, target: this.options.target, roomExclude: this.options.roomExclude, data: this.options.registerData, event: 'register' }, callback: function callback(msg) { if (msg.event && msg.data) { var newEvent = _this.sdkParser(msg); window.dispatchEvent(newEvent); } // TODO 这块逻辑先不需要,还没想清楚 // if (data.action) { // const actionEventName = `${eventName}.${data.action}`; // const actionEvent = new CustomEvent(actionEventName, { // detail: omit(verifiedData, ['action']), // }); // window.dispatchEvent(actionEvent); // } } }, this.options.extraWs)); } }; return SDKBase; }();