|
|
@@ -1,64 +0,0 @@
|
|
|
-class Bridge extends EventTarget {
|
|
|
- #pool = new Map();
|
|
|
-
|
|
|
- static getInstance() {
|
|
|
- return Bridge._instance ?? (Bridge._instance = new Bridge());
|
|
|
- }
|
|
|
-
|
|
|
- static get Platform() {
|
|
|
- return window['AndroidBridge'];
|
|
|
- }
|
|
|
-
|
|
|
- static get UUID() {
|
|
|
- return crypto.randomUUID();
|
|
|
- }
|
|
|
-
|
|
|
- static pulse(userId) {
|
|
|
- const { promise, ...resolvers } = Promise.withResolvers();
|
|
|
- this.getInstance().#postMessage('pulse', { userId }, resolvers);
|
|
|
- return promise;
|
|
|
- }
|
|
|
-
|
|
|
- static print(payload) {
|
|
|
- const { promise, ...resolvers } = Promise.withResolvers();
|
|
|
- this.getInstance().#postMessage('print', payload, resolvers);
|
|
|
- return promise;
|
|
|
- }
|
|
|
-
|
|
|
- dispatch(message) {
|
|
|
- console.log('log:bridge:js', `[dispatch] 接收消息: ${message}`);
|
|
|
- try {
|
|
|
- const { type, callbackId, payload } = JSON.parse(message);
|
|
|
- if (callbackId) {
|
|
|
- const { resolve, reject } = this.#pool.get(callbackId) ?? {};
|
|
|
- this.#pool.delete(callbackId);
|
|
|
- if (payload.code === 0) resolve(payload.data)
|
|
|
- else reject(payload.message)
|
|
|
- } else {
|
|
|
- event = new CustomEvent(type, { detail: payload });
|
|
|
- super.dispatchEvent(event);
|
|
|
- }
|
|
|
- } catch (e) {
|
|
|
- console.log('log:bridge:js', `[analysis] 解析消息错误: ${e.message}`);
|
|
|
- throw e;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- addEventListener(type, callback, options) {
|
|
|
- super.addEventListener(type, callback, options);
|
|
|
- return () => super.removeEventListener(type, callback);
|
|
|
- }
|
|
|
-
|
|
|
- #postMessage(type, payload, resolvers) {
|
|
|
- const callbackId = `${type}:${Bridge.UUID}`;
|
|
|
- this.#pool.set(callbackId, resolvers);
|
|
|
- const message = JSON.stringify({ type, payload, callbackId })
|
|
|
- Bridge.Platform.postMessage(message);
|
|
|
- console.log('log:bridge:js', `[dispatch] 发送消息: ${message}`);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-window['Bridge'] = Bridge;
|
|
|
-window['bridge'] = Bridge.getInstance();
|
|
|
-
|
|
|
-window.print = Bridge.print.bind(Bridge);
|