Browse Source

feat: add `websocket.ts`

hechang27-sprt 6 months ago
parent
commit
9fcd457c62
  1. 4
      package.json
  2. 1
      plugs/index.ts
  3. 52
      plugs/websocket.ts
  4. 3
      tsconfig.json

4
package.json

@ -46,6 +46,10 @@ @@ -46,6 +46,10 @@
"types": "./dist/plugs/http/index.d.ts",
"default": "./dist/plugs/http/index.js"
},
"./ws": {
"types": "./dist/plugs/websocket.d.ts",
"default": "./dist/plugs/websocket.js"
},
"./i18n": {
"types": "./dist/plugs/i18n/index.d.ts",
"default": "./dist/plugs/i18n/index.js"

1
plugs/index.ts

@ -4,6 +4,7 @@ export * as Store from "./store"; @@ -4,6 +4,7 @@ export * as Store from "./store";
export * as Http from "./http";
export * as Lang from "./i18n";
export * as Api from "./api";
export * as WebSocket from "./websocket";
export * from "./constant";
export * from "./util/asyncUtil";
export * from "./util/objectUtil";

52
plugs/websocket.ts

@ -0,0 +1,52 @@ @@ -0,0 +1,52 @@
let websocket: WebSocket;
const msgHandlersMap = {};
let lastUrl;
let closeFlag = false;
export const closeWebSocket = () => {
closeFlag = false;
websocket?.close();
};
export const sendSocketMsg = (msg) => {
websocket?.send(JSON.stringify(msg));
};
export const openWebSocket = (url) => {
if (websocket && websocket.readyState === WebSocket.OPEN) {
if (lastUrl == url) {
return;
}
closeWebSocket();
}
websocket = new WebSocket(url);
lastUrl = url;
websocket.onopen = () => {
console.log("websocket已连接");
closeFlag = true;
};
websocket.onmessage = (msg) => {
const event = JSON.parse(msg.data);
const handlers = msgHandlersMap[event.type];
if (!handlers) {
return;
}
Object.values(handlers).forEach((handler: any) => {
handler(event.data);
});
};
websocket.onclose = () => {
console.log("websocket已断开");
if (closeFlag) {
setTimeout(() => {
openWebSocket(url);
}, 2000);
}
};
};
export const registerHandler = (type, key, handler) => {
const handlers = msgHandlersMap[type] || {};
handlers[key] = handler;
msgHandlersMap[type] = handlers;
};

3
tsconfig.json

@ -42,6 +42,9 @@ @@ -42,6 +42,9 @@
"noob-mengyxu/http": [
"./plugs/http/index.ts"
],
"noob-mengyxu/ws": [
"./plugs/websockets.ts"
],
"noob-mengyxu/i18n": [
"./plugs/i18n/index.ts"
],

Loading…
Cancel
Save