UNPKG

dm-web-react

Version:

The DM web client with React.

64 lines 2.7 kB
import { SocketIOService } from "./socketIoService"; import { PreloadingHeartbeatWorkerMessage } from "../models/workerMessage/preloadingHeartbeatWorkerMessage"; import { WorkerMessageType } from "../models/enum/workerMessageType"; import { plainToClass } from "class-transformer"; console.log("backgroundSharedWorker"); SocketIOService.Instance.connect(); var messagePortMap = new Map(); SocketIOService.Instance.register(handleSocketIoInnodealingMessage); onconnect = function (e) { console.log("connnect success"); var port = e.ports[0]; messagePortMap.set(port, new Date()); port.addEventListener("message", function (evt) { console.log("on message"); var data = evt.data; if (data.messageType === WorkerMessageType.PRELOADING_HEARTBEAT) { var msg = plainToClass(PreloadingHeartbeatWorkerMessage, data); transpondPreloadingHeartbeat(msg); } else if (data.messageType === WorkerMessageType.MESSAGE_PORT_HEART_BEAT) { console.log("messagePortHeartbeat: ", data.messageId); if (e.source instanceof MessagePort) { var matchedPortValue = messagePortMap.get(e.source); console.log("find matched port value: ", matchedPortValue); messagePortMap.set(e.source, new Date()); } } }, false); port.start(); self.setInterval(function () { checkMessagePortValid(); }, 30000); }; function handleSocketIoInnodealingMessage(data) { messagePortMap.forEach(function (value, key) { key.postMessage(data); }); } function transpondPreloadingHeartbeat(heartbeatMessage) { console.log("transpondPreloadingHeartbeat: ", heartbeatMessage.messageId); messagePortMap.forEach(function (value, key) { key.postMessage(heartbeatMessage); }); } // need check messageport disconnect from shared worker. function checkMessagePortValid() { // 用户休眠 逻辑会错误 // console.log("checkMessagePortValid start"); // const now = new Date(); // const needRemoveKeys: MessagePort[] = []; // messagePortMap.forEach((value, key) => { // if (now.getTime() - value.getTime() > 60000) { // needRemoveKeys.push(key); // } // }); // console.log("need remove message port length: ", needRemoveKeys.length); // for (const key of needRemoveKeys) { // messagePortMap.delete(key); // key.close(); // } // console.log("current messsage port count", messagePortMap.size); // console.log("checkMessagePortValid end"); } //# sourceMappingURL=backgroundSharedWorker.js.map