0210
Some checks failed
test / Run tests (push) Failing after 13s
build / Build (push) Failing after 22s

This commit is contained in:
2025-02-10 18:10:50 +08:00
parent 1e8b5e6453
commit 36cf8ef5a7
11 changed files with 71 additions and 35 deletions

View File

@ -1,6 +1,5 @@
import LoggerCore from "@App/app/logger/core";
import { Message, MessageConnect, MessageSend } from "./server";
import { ExtensionMessageSend } from "./extension_message";
export async function sendMessage(msg: MessageSend, action: string, data?: any): Promise<any> {
const res = await msg.sendMessage({ action, data });

View File

@ -1,14 +1,16 @@
import { Message, MessageConnect, MessageSend } from "./server";
export class ExtensionMessageSend implements MessageSend {
constructor(private serverEnv: string) {
// 由于service_worker和offscren同时监听消息的话,都会同时收到,用serverEnv于区分不同的环墨
}
constructor(protected serverEnv: string) {}
connect(data: any): Promise<MessageConnect> {
return new Promise((resolve) => {
const con = chrome.runtime.connect();
con.postMessage(data);
con.postMessage(
Object.assign(data, {
serverEnv: this.serverEnv,
})
);
resolve(new ExtensionMessageConnect(con));
});
}
@ -33,6 +35,10 @@ export class ExtensionMessage extends ExtensionMessageSend implements Message {
chrome.runtime.onConnect.addListener((port) => {
const handler = (msg: any) => {
port.onMessage.removeListener(handler);
if (msg.serverEnv !== this.serverEnv) {
port.disconnect();
return false;
}
callback(msg, new ExtensionMessageConnect(port));
};
port.onMessage.addListener(handler);
@ -42,6 +48,9 @@ export class ExtensionMessage extends ExtensionMessageSend implements Message {
// 注意chrome.runtime.onMessage.addListener的回调函数需要返回true才能处理异步请求
onMessage(callback: (data: any, sendResponse: (data: any) => void) => void) {
chrome.runtime.onMessage.addListener((msg, sender, sendResponse) => {
if (msg.serverEnv !== this.serverEnv) {
return false;
}
return callback(msg, sendResponse);
});
}

View File

@ -11,8 +11,10 @@ export class Broker {
// 订阅
async subscribe(topic: string, handler: SubscribeCallback): Promise<MessageConnect> {
LoggerCore.getInstance().logger({ service: "messageQueue" }).debug("subscribe", { topic });
const con = await this.msg.connect({ action: "messageQueue", data: { action: "subscribe", topic } });
con.onMessage((msg: { action: string; topic: string; message: any }) => {
console.log(msg);
if (msg.action === "message") {
handler(msg.message);
}

View File

@ -1,5 +1,4 @@
import LoggerCore from "@App/app/logger/core";
import { ExtensionMessageSend } from "./extension_message";
export interface Message extends MessageSend {
onConnect(callback: (data: any, con: MessageConnect) => void): void;
@ -27,22 +26,16 @@ export type ApiFunction = (params: any, con: MessageConnect | null) => Promise<a
export class Server {
private apiFunctionMap: Map<string, ApiFunction> = new Map();
constructor(
private env: string,
message: Message
) {
private logger = LoggerCore.getInstance().logger({ service: "messageServer" });
constructor(message: Message) {
message.onConnect((msg: any, con: MessageConnect) => {
if (msg.serverEnv !== this.env) {
con.disconnect();
return;
}
this.logger.trace("server onConnect", { msg });
this.connectHandle(msg.action, msg.data, con);
});
message.onMessage((msg, sendResponse) => {
if (msg.serverEnv !== this.env) {
return;
}
this.logger.trace("server onMessage", { msg });
return this.messageHandle(msg.action, msg.data, sendResponse);
});
}
@ -63,8 +56,6 @@ export class Server {
}
private messageHandle(msg: string, params: any, sendResponse: (response: any) => void) {
const logger = LoggerCore.getInstance().logger({ env: this.env, msg });
logger.trace("messageHandle", { params });
const func = this.apiFunctionMap.get(msg);
if (func) {
try {
@ -82,7 +73,7 @@ export class Server {
}
} else {
sendResponse({ code: -1, message: "no such api" });
logger.error("no such api");
this.logger.error("no such api", { msg });
}
}
}

View File

@ -23,6 +23,7 @@ export class WindowMessage implements Message {
) {
// 监听消息
this.source.addEventListener("message", (e) => {
console.log(e);
if (e.source === this.target || e.source === this.source) {
this.messageHandle(e.data);
}
@ -35,6 +36,11 @@ export class WindowMessage implements Message {
// 接收到消息
this.EE.emit("message", data.data, (resp: any) => {
// 发送响应消息
// 无消息id则不发送响应消息
console.log("data", data, "resp", resp);
if (!data.messageId) {
return;
}
const body: WindowMessageBody = {
messageId: data.messageId,
type: "respMessage",