js:add notification plugin

This commit is contained in:
pengfei.zhou
2020-01-08 19:44:24 +08:00
committed by osborn
parent b4018abe9f
commit b520ffb5df
10 changed files with 119 additions and 1 deletions

View File

@@ -0,0 +1,16 @@
import { BridgeContext } from "../runtime/global";
export declare function notification(context: BridgeContext): {
publish: (args: {
biz: string;
name: string;
data?: object | undefined;
androidSystem?: boolean | undefined;
}) => Promise<any>;
subscribe: (args: {
biz: string;
name: string;
callback: (data?: object | undefined) => void;
androidSystem?: boolean | undefined;
}) => Promise<string>;
unsubscribe: (subscribeId: string) => Promise<any>;
};

View File

@@ -0,0 +1,18 @@
export function notification(context) {
return {
publish: (args) => {
if (args.data !== undefined) {
args.data = JSON.stringify(args.data);
}
return context.notification.publish(args);
},
subscribe: (args) => {
args.callback = context.function2Id(args.callback);
return context.notification.subscribe(args);
},
unsubscribe: (subscribeId) => {
context.removeFuncById(subscribeId);
return context.notification.unsubscribe({ subscribeId });
}
};
}

View File

@@ -13,6 +13,8 @@ export declare class Context {
constructor(id: string);
callNative(namespace: string, method: string, args?: any): Promise<any>;
register(instance: Object): void;
function2Id(func: Function): string;
removeFuncById(funcId: string): void;
}
export declare function jsObtainContext(id: string): Context | undefined;
export declare function jsReleaseContext(id: string): void;

View File

@@ -128,6 +128,17 @@ export class Context {
register(instance) {
this.entity = instance;
}
function2Id(func) {
const functionId = uniqueId('function');
this.callbacks.set(functionId, {
resolve: func,
reject: () => { loge("This should not be called"); }
});
return functionId;
}
removeFuncById(funcId) {
this.callbacks.delete(funcId);
}
}
const gContexts = new Map;
const gModules = new Map;