add doric context map
This commit is contained in:
parent
ac8d111f7b
commit
15b5bebcf0
@ -14,20 +14,23 @@ public class DoricContext {
|
||||
private static AtomicInteger sCounter = new AtomicInteger();
|
||||
private final String mContextId;
|
||||
|
||||
private DoricContext(String contextId) {
|
||||
DoricContext(String contextId) {
|
||||
this.mContextId = contextId;
|
||||
}
|
||||
|
||||
public static DoricContext createContext(String script, String alias) {
|
||||
String contextId = String.valueOf(sCounter.incrementAndGet());
|
||||
DoricDriver.getInstance().createContext(contextId, script, alias);
|
||||
return new DoricContext(contextId);
|
||||
return DoricDriver.getInstance().createContext(script, alias);
|
||||
}
|
||||
|
||||
public DoricSettableFuture<JSDecoder> callEntity(String methodName, Object... args) {
|
||||
return DoricDriver.getInstance().invokeContextMethod(mContextId, methodName, args);
|
||||
}
|
||||
|
||||
|
||||
public String getContextId() {
|
||||
return mContextId;
|
||||
}
|
||||
|
||||
public void teardown() {
|
||||
DoricDriver.getInstance().destroyContext(mContextId);
|
||||
}
|
||||
|
@ -4,6 +4,10 @@ import com.github.pengfeizhou.doric.engine.DoricJSEngine;
|
||||
import com.github.pengfeizhou.doric.utils.DoricSettableFuture;
|
||||
import com.github.pengfeizhou.jscore.JSDecoder;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
/**
|
||||
* @Description: Doric
|
||||
* @Author: pengfei.zhou
|
||||
@ -11,6 +15,8 @@ import com.github.pengfeizhou.jscore.JSDecoder;
|
||||
*/
|
||||
public class DoricDriver {
|
||||
private final DoricJSEngine doricJSEngine;
|
||||
private final AtomicInteger counter = new AtomicInteger();
|
||||
private final Map<String, DoricContext> doricContextMap = new ConcurrentHashMap<>();
|
||||
|
||||
public DoricSettableFuture<JSDecoder> invokeContextMethod(final String contextId, final String method, final Object... args) {
|
||||
return doricJSEngine.invokeContextEntityMethod(contextId, method, args);
|
||||
@ -28,13 +34,21 @@ public class DoricDriver {
|
||||
return Inner.sInstance;
|
||||
}
|
||||
|
||||
public void createContext(final String contextId, final String script, final String source) {
|
||||
DoricContext createContext(final String script, final String source) {
|
||||
String contextId = String.valueOf(counter.incrementAndGet());
|
||||
doricJSEngine.prepareContext(contextId, script, source);
|
||||
DoricContext doricContext = new DoricContext(contextId);
|
||||
doricContextMap.put(contextId, doricContext);
|
||||
return doricContext;
|
||||
}
|
||||
|
||||
public void destroyContext(String contextId) {
|
||||
void destroyContext(String contextId) {
|
||||
doricContextMap.remove(contextId);
|
||||
doricJSEngine.destroyContext(contextId);
|
||||
}
|
||||
|
||||
public DoricContext getContext(String contextId) {
|
||||
return doricContextMap.get(contextId);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,5 +1,7 @@
|
||||
package com.github.pengfeizhou.doric.extension;
|
||||
|
||||
import com.github.pengfeizhou.doric.DoricContext;
|
||||
import com.github.pengfeizhou.doric.DoricDriver;
|
||||
import com.github.pengfeizhou.jscore.JSDecoder;
|
||||
import com.github.pengfeizhou.jscore.JavaValue;
|
||||
|
||||
@ -14,6 +16,8 @@ public class DoricBridgeExtension {
|
||||
}
|
||||
|
||||
public JavaValue callNative(String contextId, String module, String method, String callbackId, JSDecoder jsDecoder) {
|
||||
DoricContext doricContext = DoricDriver.getInstance().getContext(contextId);
|
||||
|
||||
|
||||
return null;
|
||||
}
|
||||
|
Reference in New Issue
Block a user