mirror of
https://github.com/tidys/cc-inspector-chrome
synced 2025-04-20 17:08:41 +00:00
70 lines
1.9 KiB
TypeScript
70 lines
1.9 KiB
TypeScript
import CCP from "cc-plugin/src/ccp/entry-render";
|
||
import { Msg, Page, PluginEvent } from "../../core/types";
|
||
import { TestClient, testServer, TestServer } from "./test/server";
|
||
import { Terminal } from "../../scripts/terminal";
|
||
export type BridgeCallback = (data: PluginEvent, sender: chrome.runtime.Port) => void;
|
||
if (chrome.devtools) {
|
||
console.log("chrome devtools")
|
||
}
|
||
class Bridge implements TestClient {
|
||
/**
|
||
* 把callback保存为变量,方便测试
|
||
*/
|
||
public onMessage: BridgeCallback | null = null;
|
||
|
||
/**
|
||
* 和background建立的链接
|
||
*/
|
||
private connect: chrome.runtime.Port | null = null;
|
||
private terminal = new Terminal(Page.Devtools);
|
||
constructor() {
|
||
this.init();
|
||
}
|
||
|
||
private init() {
|
||
if (CCP.Adaptation.Env.isChromeRuntime) {
|
||
this.connect = chrome.runtime.connect({ name: Page.Devtools });
|
||
this.connect.onDisconnect.addListener(() => {
|
||
console.log(...this.terminal.disconnect(""))
|
||
this.connect = null;
|
||
})
|
||
|
||
this.connect.onMessage.addListener((event, sender: chrome.runtime.Port) => {
|
||
console.log(...this.terminal.message(JSON.stringify(event)));
|
||
const data = PluginEvent.create(event);
|
||
if (this.onMessage) {
|
||
this.onMessage(data, sender);
|
||
}
|
||
});
|
||
|
||
} else {
|
||
testServer.add(this);
|
||
}
|
||
}
|
||
|
||
recv(event: PluginEvent): void {
|
||
this.doMessage(event);
|
||
}
|
||
doMessage(data: PluginEvent) {
|
||
if (this.onMessage) {
|
||
this.onMessage(data, null);
|
||
}
|
||
}
|
||
send(msg: Msg, data?: any) {
|
||
if (CCP.Adaptation.Env.isChromeDevtools) {
|
||
if (this.connect) {
|
||
let sendData = new PluginEvent(Page.Devtools, Page.Background, msg, data)
|
||
this.connect.postMessage(sendData)
|
||
} else {
|
||
console.warn(...this.terminal.log("重新和background建立链接"))
|
||
this.init();
|
||
this.send(msg, data)
|
||
}
|
||
} else {
|
||
testServer.recv(msg, data);
|
||
}
|
||
}
|
||
}
|
||
|
||
export const bridge = new Bridge();
|