UNPKG

uno-info-sdk

Version:
1,130 lines (1,024 loc) 27.7 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports.IndustrySDK = void 0; var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose")); var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _tsRunning = require("ts-running"); var _cloneDeep = _interopRequireDefault(require("lodash/cloneDeep")); var _unoWsClient = require("uno-ws-client"); var defaultParser = function defaultParser(data) { return data; }; var protocol = [{ "name": "对象查看镜头", "desc": "调用系统镜头对单一指定对象或指定位置进行查看", "entity": "camera", "category": "sequence", "actionCode": "focus", "params": [{ "name": "camera", "type": "[number, number, number]", "require": true, "desc": "镜头的相机参数" }, { "name": "lookat", "type": "[number, number, number]", "require": true, "desc": "镜头的视点参数" }, { "name": "layer", "type": "string", "require": false, "desc": "对象的图层名" }, { "name": "target", "type": "string", "require": false, "desc": "对象ID" }], "children": { "toTarget": { "name": "对象特写", "fields": ["camera", "lookat", { "target": true }, { "layer": true }], "desc": "调用镜头实现对任意位置的定点特写。如:对隧道口、匝道口做特写" }, "fixed": { "name": "定点特写", "fields": ["camera", "lookat"], "desc": "调用系统镜头实现对一个指定静态对象ID的定点特写,被特写对象会有外轮廓高亮。如:实现对某个杆子或路侧设备的特写" } } }, { "name": "多对象查看镜头", "desc": "调用系统镜头对多个指定对象进行查看", "entity": "camera", "category": "sequence", "actionCode": "show", "params": [{ "name": "layer", "type": "string", "require": true, "desc": "对象的图层名" }, { "name": "target", "type": "[string]", "require": true, "desc": "对象ID数组" }] }, { "name": "跟踪镜头", "desc": "调用系统镜头实现对一个指定动态对象或不指定ID的任一对象实施动态跟踪,被跟踪对象会有外轮廓高亮", "entity": "camera", "category": "sequence", "actionCode": "track", "params": [{ "name": "layer", "type": "string", "require": true, "desc": "对象的图层名" }, { "name": "target", "type": "string", "require": false, "desc": "对象ID" }, { "name": "target_type", "type": "string", "require": false, "desc": "对象类型" }, { "name": "continuously", "type": "boolean", "require": false, "desc": "是否连续跟踪,即跟丢了再选同类的下一个对象" }, { "name": "location", "type": "[number,number,number]", "require": false, "desc": "被跟踪对象的位置: 三维场景只加载当前范围内的车辆,如果被跟踪对象不在当前范围就找不到该对象,需要先让三维场景跳转到被跟踪对象的位置(location参数),加载新范围内的车辆再进行跟踪" }, { "name": "cameraMode", "type": "string", "require": false, "desc": "跟踪视角(\"Car\"(车内), \"Drone\"(无人机跟车), \"Flight\"(高空俯视))" }, { "name": "cameraDistance", "type": "[number,number]", "require": false, "desc": "镜头相对被跟踪对象的位置,默认值[3,2]" }], "children": { "toTarget": { "name": "指定对象(ID)跟踪", "fields": ["layer", { "target": true }, { "continuously": true }, { "location": true }, { "cameraMode": true }, { "cameraDistance": true }], "desc": "调用系统镜头实现对一个指定动态对象实施动态跟踪" }, "noTarget": { "name": "不指定对象(ID)跟踪", "fields": ["layer", { "continuously": true }, { "target_type": true }, { "cameraMode": true }, { "cameraDistance": true }], "desc": "调用系统镜头实现对不指定ID的任一对象实施动态跟踪" }, "release": { "name": "释放跟踪镜头", "fields": ["layer", { "target": true }], "desc": "取消跟踪" } } }, { "name": "预设镜头", "desc": "调用预先编排好的一个镜头序列", "entity": "camera", "category": "sequence", "actionCode": "call", "params": [{ "name": "sequence", "type": "[string]", "require": true, "desc": "预设镜头的数组" }] }, { "name": "释放镜头", "desc": "解锁原来的任何镜头", "entity": "camera", "category": "sequence", "actionCode": "release", "params": [{ "name": "cameraOffset", "type": "[number,number,number]", "require": true, "desc": "释放后镜头相对最后位置的位移" }] }, { "name": "切换跟踪视角", "desc": "在对象跟踪镜头下切换跟踪视角", "entity": "camera", "category": "sequence", "actionCode": "switchMode", "params": [{ "name": "cameraMode", "type": "string", "require": true, "desc": "跟踪视角(\"Car\"(车内), \"Drone\"(无人机跟车), \"Flight\"(高空俯视))" }] }, { "name": "隐藏三维图层", "desc": "隐藏三维图层", "entity": "layer", "category": "control", "actionCode": "hide", "params": [{ "name": "layer", "type": "string", "require": true, "desc": "图层名" }] }, { "name": "显示三维图层", "desc": "显示三维图层", "entity": "layer", "category": "control", "actionCode": "show", "params": [{ "name": "layer", "type": "string", "require": true, "desc": "图层名" }] }, { "name": "隐藏面板图层", "desc": "隐藏面板图层", "entity": "billboard", "category": "control", "actionCode": "hide", "params": [{ "name": "layer", "type": "string", "require": true, "desc": "图层名" }] }, { "name": "显示面板图层", "desc": "显示面板图层", "entity": "billboard", "category": "control", "actionCode": "show", "params": [{ "name": "layer", "type": "string", "require": true, "desc": "图层名" }] }, { "name": "切换气象", "desc": "切换场景中的天气、日照等状态", "entity": "climate", "category": "control", "actionCode": "setup", "params": [{ "name": "weather", "type": "[string]", "require": true, "desc": "气象状态数组(foggy、rainy、snowy),数组为空即为晴天" }, { "name": "sunlight", "type": "string", "require": true, "desc": "日夜切换,day/night" }] }, { "name": "恢复气象", "desc": "恢复场景中的天气和日照状态", "entity": "climate", "category": "control", "actionCode": "reset", "params": [] }, { "name": "切换数据环境", "desc": "切换场景中的数据环境,即车辆、事件等数据来源从实时模式切换为历史模式或仿真模式", "entity": "env", "category": "control", "actionCode": "changeEnv", "params": [{ "name": "env", "type": "string", "require": true, "desc": "数据环境名称" }, { "name": "isPlaying", "type": "boolean", "require": true, "desc": "是否播放" }] }, { "name": "指定时间播放", "desc": "在非实时环境下实现从指定日期指定时间开始播放", "entity": "env", "category": "control", "actionCode": "play", "params": [{ "name": "playTime", "type": "string", "require": true, "desc": "开始播放的时间" }, { "name": "isPlaying", "type": "true", "require": true, "desc": "播放" }, { "name": "uniqueId", "type": "string", "require": true, "desc": "一次播放的ID" }, { "name": "env", "type": "string", "require": true, "desc": "数据环境名称(playback历史数据, simulation仿真数据, release实时数据)" }] }, { "name": "暂停播放", "desc": "在非实时环境下实现暂停播放", "entity": "env", "category": "control", "actionCode": "pause", "params": [{ "name": "playTime", "type": "string", "require": true, "desc": "停止播放的时间" }, { "name": "isPlaying", "type": "false", "require": true, "desc": "暂停播放" }, { "name": "uniqueId", "type": "string", "require": true, "desc": "一次播放的ID" }, { "name": "env", "type": "string", "require": true, "desc": "数据环境名称(playback历史数据, simulation仿真数据, release实时数据)" }] }, { "name": "请求地图同步", "desc": "web端请求UE端发送地图位置信息,用于一些需要三维场景跳转到新位置之后再响应的web消息", "entity": "map", "category": "sync", "actionCode": "request", "params": [{ "name": "entity", "type": "string", "require": true, "desc": "被同步对象为地图参数" }] }, { "name": "监听地图同状态", "desc": "UE端返回web端请求的地图位置信息(响应web的请求地图同步)", "entity": "camera", "category": "sequence", "actionCode": "update", "params": [{ "name": "position", "type": "[number, number, number]", "require": true, "desc": "三维场景当前的位置" }] }, { "name": "呼出web的跟车控制面板", "desc": "UE找到车辆开始跟踪之后,控制web端打开/关闭web的跟车控制面板", "entity": "layer", "category": "control", "actionCode": "switchCameraUI", "params": [{ "name": "enable", "type": "boolean", "require": true, "desc": "打开/关闭面板" }] }, { "name": "孪生设备同步", "desc": "UE端返回视频接力中当前设备视频流和下一路设备的视频流地址", "entity": "layer", "category": "control", "actionCode": "update", "params": [{ "name": "value", "type": "{ this: string; next: string; }", "require": true, "desc": "视频接力中的当前视频流和下一个视频流" }, { "name": "entity", "type": "string", "require": true, "desc": "被操作对象为图层" }] }, { "name": "对象悬浮选择", "desc": "UE端返回当前鼠标悬浮的对象", "entity": "layer", "category": "control", "actionCode": "hover", "params": [{ "name": "layer", "type": "string", "require": true, "desc": "被高亮对象的图层名" }, { "name": "target", "type": "string", "require": true, "desc": "被高亮对象的ID" }] }, { "name": "对象双击选择", "desc": "UE端返回当前鼠标点击的对象", "entity": "layer", "category": "control", "actionCode": "dclick", "params": [{ "name": "layer", "type": "string", "require": true, "desc": "被高亮对象的图层名" }, { "name": "target", "type": "string", "require": true, "desc": "被高亮对象的ID" }] }]; var checkFun = function checkFun(msg) { var data = msg.data || {}; var groupProto = protocol.find(function (o) { return o.entity === msg.entity && o.actionCode === (data === null || data === void 0 ? void 0 : data.action); }); var error = ''; if (groupProto) { var params = (0, _cloneDeep["default"])(groupProto.params); if (msg.sdk) { var _groupProto$children, _sdkProto$fields; var sdkProto = (_groupProto$children = groupProto.children) === null || _groupProto$children === void 0 ? void 0 : _groupProto$children[msg.sdk]; if (!sdkProto) return groupProto.entity + "." + groupProto.actionCode + "\u63A5\u6536\u7684\u6570\u636E\u7ED3\u6784\u9519\u8BEF\uFF0C\u534F\u8BAE\u4E2D\u4E0D\u5B58\u5728\u7684sdk\uFF1A" + msg.sdk; params = (_sdkProto$fields = sdkProto.fields) === null || _sdkProto$fields === void 0 ? void 0 : _sdkProto$fields.map(function (o) { var key = o; var value; if (typeof o === 'object') { key = Object.keys(o)[0]; value = o[key]; } var param = groupProto.params.find(function (c) { return c.name === key; }); if (!param) return null; return (0, _extends2["default"])({}, param, typeof value === 'boolean' ? { require: value } : {}); }).filter(function (o) { return o; }); } params.forEach(function (o) { var msgItem = data[o.name]; // 必填校验 if (o.require && msgItem === undefined) { error = groupProto.entity + "." + groupProto.actionCode + (msg.sdk ? "." + msg.sdk : '') + "\u63A5\u6536\u7684\u6570\u636E\u7ED3\u6784\u9519\u8BEF\uFF1A\u7F3A\u5C11" + o.name + "\u7684\u5185\u5BB9"; } // 内容类型校验 if (!error && msgItem && !(0, _tsRunning.check)(o.type || 'any', msgItem)) { error = groupProto.entity + "." + groupProto.actionCode + (msg.sdk ? "." + msg.sdk : '') + "\u63A5\u6536\u7684\u6570\u636E\u7ED3\u6784\u9519\u8BEF\uFF1A" + JSON.stringify(data[o.name]) + "\uFF0C\u9700\u8981\u7B26\u5408\u6570\u636E\u7C7B\u578B" + (o.type || 'any'); } }); } else { return "\u534F\u8BAE\u4E2D\u4E0D\u5B58\u5728\u7684\u6D88\u606F\u7ED3\u6784\uFF1A\u65E0\u6CD5\u89E3\u6790" + groupProto.entity + "." + groupProto.actionCode; } return error; }; var IndustrySDK = /*#__PURE__*/function (_SDKBase) { (0, _inheritsLoose2["default"])(IndustrySDK, _SDKBase); function IndustrySDK(props) { var _this; _this = _SDKBase.call(this, props) || this; _this.types = ['UE']; _this["camera"] = { focus: function focus(params) { var msg = { event: 'sequence', entity: 'camera', data: { action: 'focus', camera: params['camera'], lookat: params['lookat'], layer: params['layer'], target: params['target'] } }; if (_this.checkSdk) { var error = checkFun(msg); if (error) { console.error(error); return; } } _this.send(msg); }, show: function show(params) { var msg = { event: 'sequence', entity: 'camera', data: { action: 'show', layer: params['layer'], target: params['target'] } }; if (_this.checkSdk) { var error = checkFun(msg); if (error) { console.error(error); return; } } _this.send(msg); }, track: function track(params) { var msg = { event: 'sequence', entity: 'camera', data: { action: 'track', layer: params['layer'], target: params['target'], target_type: params['target_type'], continuously: params['continuously'], location: params['location'], cameraMode: params['cameraMode'], cameraDistance: params['cameraDistance'] } }; if (_this.checkSdk) { var error = checkFun(msg); if (error) { console.error(error); return; } } _this.send(msg); }, call: function call(params) { var msg = { event: 'sequence', entity: 'camera', data: { action: 'call', sequence: params['sequence'] } }; if (_this.checkSdk) { var error = checkFun(msg); if (error) { console.error(error); return; } } _this.send(msg); }, release: function release(params) { var msg = { event: 'sequence', entity: 'camera', data: { action: 'release', cameraOffset: params['cameraOffset'] } }; if (_this.checkSdk) { var error = checkFun(msg); if (error) { console.error(error); return; } } _this.send(msg); }, switchMode: function switchMode(params) { var msg = { event: 'sequence', entity: 'camera', data: { action: 'switchMode', cameraMode: params['cameraMode'] } }; if (_this.checkSdk) { var error = checkFun(msg); if (error) { console.error(error); return; } } _this.send(msg); }, update: function update(params) { var msg = { event: 'sequence', entity: 'camera', data: { action: 'update', position: params['position'] } }; if (_this.checkSdk) { var error = checkFun(msg); if (error) { console.error(error); return; } } _this.send(msg); } }; _this["layer"] = { hide: function hide(params) { var msg = { event: 'control', entity: 'layer', data: { action: 'hide', layer: params['layer'] } }; if (_this.checkSdk) { var error = checkFun(msg); if (error) { console.error(error); return; } } _this.send(msg); }, show: function show(params) { var msg = { event: 'control', entity: 'layer', data: { action: 'show', layer: params['layer'] } }; if (_this.checkSdk) { var error = checkFun(msg); if (error) { console.error(error); return; } } _this.send(msg); }, switchCameraUI: function switchCameraUI(params) { var msg = { event: 'control', entity: 'layer', data: { action: 'switchCameraUI', enable: params['enable'] } }; if (_this.checkSdk) { var error = checkFun(msg); if (error) { console.error(error); return; } } _this.send(msg); }, update: function update(params) { var msg = { event: 'control', entity: 'layer', data: { action: 'update', value: params['value'], entity: params['entity'] } }; if (_this.checkSdk) { var error = checkFun(msg); if (error) { console.error(error); return; } } _this.send(msg); }, hover: function hover(params) { var msg = { event: 'control', entity: 'layer', data: { action: 'hover', layer: params['layer'], target: params['target'] } }; if (_this.checkSdk) { var error = checkFun(msg); if (error) { console.error(error); return; } } _this.send(msg); }, dclick: function dclick(params) { var msg = { event: 'control', entity: 'layer', data: { action: 'dclick', layer: params['layer'], target: params['target'] } }; if (_this.checkSdk) { var error = checkFun(msg); if (error) { console.error(error); return; } } _this.send(msg); } }; _this["billboard"] = { hide: function hide(params) { var msg = { event: 'control', entity: 'billboard', data: { action: 'hide', layer: params['layer'] } }; if (_this.checkSdk) { var error = checkFun(msg); if (error) { console.error(error); return; } } _this.send(msg); }, show: function show(params) { var msg = { event: 'control', entity: 'billboard', data: { action: 'show', layer: params['layer'] } }; if (_this.checkSdk) { var error = checkFun(msg); if (error) { console.error(error); return; } } _this.send(msg); } }; _this["climate"] = { setup: function setup(params) { var msg = { event: 'control', entity: 'climate', data: { action: 'setup', weather: params['weather'], sunlight: params['sunlight'] } }; if (_this.checkSdk) { var error = checkFun(msg); if (error) { console.error(error); return; } } _this.send(msg); }, reset: function reset() { var msg = { event: 'control', entity: 'climate', data: { action: 'reset' } }; if (_this.checkSdk) { var error = checkFun(msg); if (error) { console.error(error); return; } } _this.send(msg); } }; _this["env"] = { changeEnv: function changeEnv(params) { var msg = { event: 'control', entity: 'env', data: { action: 'changeEnv', "production": params['env'], isPlaying: params['isPlaying'] } }; if (_this.checkSdk) { var error = checkFun(msg); if (error) { console.error(error); return; } } _this.send(msg); }, play: function play(params) { var msg = { event: 'control', entity: 'env', data: { action: 'play', playTime: params['playTime'], isPlaying: params['isPlaying'], uniqueId: params['uniqueId'], "production": params['env'] } }; if (_this.checkSdk) { var error = checkFun(msg); if (error) { console.error(error); return; } } _this.send(msg); }, pause: function pause(params) { var msg = { event: 'control', entity: 'env', data: { action: 'pause', playTime: params['playTime'], isPlaying: params['isPlaying'], uniqueId: params['uniqueId'], "production": params['env'] } }; if (_this.checkSdk) { var error = checkFun(msg); if (error) { console.error(error); return; } } _this.send(msg); } }; _this["map"] = { request: function request(params) { var msg = { event: 'sync', entity: 'map', data: { action: 'request', entity: params['entity'] } }; if (_this.checkSdk) { var error = checkFun(msg); if (error) { console.error(error); return; } } _this.send(msg); } }; _this.types = typeof props.type === 'string' ? [props.type] : props.type; var eventList = {}; protocol.forEach(function (o) { var group = o.entity + "." + o.actionCode; eventList[group] = defaultParser; Object.keys(o.children || {}).forEach(function (sdkName) { var sdk = o.entity + "." + o.actionCode + "." + sdkName; eventList[sdk] = defaultParser; }); }); _this.eventList = eventList; _this.camera.focus && (_this.camera.focus.toTarget = function (params) { var msg = { event: 'sequence', entity: 'camera', sdk: 'toTarget', data: { action: 'focus', camera: params['camera'], lookat: params['lookat'], target: params['target'], layer: params['layer'] } }; if (_this.checkSdk) { var error = checkFun(msg); if (error) { console.error(error); return; } } _this.send(msg); }); _this.camera.focus && (_this.camera.focus.fixed = function (params) { var msg = { event: 'sequence', entity: 'camera', sdk: 'fixed', data: { action: 'focus', camera: params['camera'], lookat: params['lookat'] } }; if (_this.checkSdk) { var error = checkFun(msg); if (error) { console.error(error); return; } } _this.send(msg); }); _this.camera.track && (_this.camera.track.toTarget = function (params) { var msg = { event: 'sequence', entity: 'camera', sdk: 'toTarget', data: { action: 'track', layer: params['layer'], target: params['target'], continuously: params['continuously'], location: params['location'], cameraMode: params['cameraMode'], cameraDistance: params['cameraDistance'] } }; if (_this.checkSdk) { var error = checkFun(msg); if (error) { console.error(error); return; } } _this.send(msg); }); _this.camera.track && (_this.camera.track.noTarget = function (params) { var msg = { event: 'sequence', entity: 'camera', sdk: 'noTarget', data: { action: 'track', layer: params['layer'], continuously: params['continuously'], target_type: params['target_type'], cameraMode: params['cameraMode'], cameraDistance: params['cameraDistance'] } }; if (_this.checkSdk) { var error = checkFun(msg); if (error) { console.error(error); return; } } _this.send(msg); }); _this.camera.track && (_this.camera.track.release = function (params) { var msg = { event: 'sequence', entity: 'camera', sdk: 'release', data: { action: 'track', layer: params['layer'], target: params['target'] } }; if (_this.checkSdk) { var error = checkFun(msg); if (error) { console.error(error); return; } } _this.send(msg); }); return _this; } var _proto = IndustrySDK.prototype; _proto.sdkParser = function sdkParser(msg) { var error = checkFun(msg); var data = msg.data; var sdk = msg.entity + "." + data.action + (msg.sdk ? "." + msg.sdk : ''); if (error) { return new CustomEvent(sdk, { detail: { error: error, data: msg } }); } else { return new CustomEvent(sdk, { detail: { error: false, data: msg } }); } }; return IndustrySDK; }(_unoWsClient.SDKBase); exports.IndustrySDK = IndustrySDK;