dm-web-react
Version:
The DM web client with React.
64 lines • 2.7 kB
JavaScript
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