mirror of
https://gitee.com/BDWare/cp.git
synced 2025-01-09 17:34:08 +00:00
feat: sharable var integration
This commit is contained in:
parent
6dbb0e161c
commit
2a59f577fc
@ -107,10 +107,11 @@ public class SharableVarManager {
|
||||
return allVars.get(identifier);
|
||||
}
|
||||
StateInfoBase stateInfoBase = client.resolve(identifier);
|
||||
if (stateInfoBase.handleValues.has("bdwType") &&
|
||||
stateInfoBase.handleValues.get("bdwType").getAsString().equals("SharableVar")) {
|
||||
if (stateInfoBase.handleValues.has("bdwType") && stateInfoBase.handleValues
|
||||
.get("bdwType").getAsString().equals("SharableVar")) {
|
||||
SharableVarState.SharableVarConfiguration sharableVarConf =
|
||||
JsonUtil.fromJson(stateInfoBase.handleValues, SharableVarState.SharableVarConfiguration.class);
|
||||
JsonUtil.fromJson(stateInfoBase.handleValues,
|
||||
SharableVarState.SharableVarConfiguration.class);
|
||||
SharableVar sharableVar = createSharableVar(sharableVarConf, identifier, type);
|
||||
if (sharableVar != null) {
|
||||
allVars.put(identifier, sharableVar);
|
||||
@ -124,7 +125,8 @@ public class SharableVarManager {
|
||||
}
|
||||
}
|
||||
|
||||
private SharableVar createSharableVar(SharableVarState.SharableVarConfiguration conf, String identifier, String type) {
|
||||
private SharableVar createSharableVar(SharableVarState.SharableVarConfiguration conf,
|
||||
String identifier, String type) {
|
||||
switch (type) {
|
||||
case Constants.TypeName.G_COUNTER:
|
||||
return new GCounterProxy(identifier, cpId, conf);
|
||||
|
@ -55,7 +55,8 @@ public class SharableVarState {
|
||||
LinkedHashSet<String> result = new LinkedHashSet<>();
|
||||
int[] sendToIndexes = sharableVarConfiguration.sendTo[myIndex];
|
||||
for (int sendToIndex : sendToIndexes) {
|
||||
if (sendToIndex >= 0 && sendToIndex < sharableVarConfiguration.nodeIds.length && sendToIndex != myIndex) {
|
||||
if (sendToIndex >= 0 && sendToIndex < sharableVarConfiguration.nodeIds.length
|
||||
&& sendToIndex != myIndex) {
|
||||
result.add(sharableVarConfiguration.nodeIds[sendToIndex]);
|
||||
}
|
||||
}
|
||||
|
@ -5,7 +5,8 @@ import org.bdware.sc.crdt.SharableVarState;
|
||||
|
||||
public class GCounterProxy extends SharableVar<GCounter> {
|
||||
|
||||
public GCounterProxy(String varId, String cpId, SharableVarState.SharableVarConfiguration conf) {
|
||||
public GCounterProxy(String varId, String cpId,
|
||||
SharableVarState.SharableVarConfiguration conf) {
|
||||
super(varId, cpId, conf);
|
||||
self = new GCounter(cpId, varId);
|
||||
}
|
||||
|
@ -4,7 +4,8 @@ import org.bdware.crdt.register.LWWRegister;
|
||||
import org.bdware.sc.crdt.SharableVarState;
|
||||
|
||||
public class LWWRegisterProxy extends SharableVar<LWWRegister<Long, Object>> {
|
||||
public LWWRegisterProxy(String varId, String cpId, SharableVarState.SharableVarConfiguration conf) {
|
||||
public LWWRegisterProxy(String varId, String cpId,
|
||||
SharableVarState.SharableVarConfiguration conf) {
|
||||
super(varId, cpId, conf);
|
||||
self = new LWWRegister<>(cpId, varId);
|
||||
}
|
||||
|
@ -5,7 +5,8 @@ import org.bdware.sc.crdt.SharableVarState;
|
||||
|
||||
public class MVRegisterProxy extends SharableVar<MVRegister<Object>> {
|
||||
|
||||
public MVRegisterProxy(String varId, String cpId, SharableVarState.SharableVarConfiguration conf) {
|
||||
public MVRegisterProxy(String varId, String cpId,
|
||||
SharableVarState.SharableVarConfiguration conf) {
|
||||
super(varId, cpId, conf);
|
||||
self = new MVRegister<>(cpId, varId);
|
||||
}
|
||||
|
@ -4,7 +4,8 @@ import org.bdware.crdt.counter.PNCounter;
|
||||
import org.bdware.sc.crdt.SharableVarState;
|
||||
|
||||
public class PNCounterProxy extends SharableVar<PNCounter> {
|
||||
public PNCounterProxy(String varId, String cpId, SharableVarState.SharableVarConfiguration conf) {
|
||||
public PNCounterProxy(String varId, String cpId,
|
||||
SharableVarState.SharableVarConfiguration conf) {
|
||||
super(varId, cpId, conf);
|
||||
self = new PNCounter(cpId, varId);
|
||||
}
|
||||
|
@ -6,7 +6,8 @@ import org.bdware.sc.crdt.SharableVarState;
|
||||
import java.util.Set;
|
||||
|
||||
public class RWLWWSetProxy extends SharableVar<RWLWWSet<Long, Object>> {
|
||||
public RWLWWSetProxy(String varId, String cpId, SharableVarState.SharableVarConfiguration conf) {
|
||||
public RWLWWSetProxy(String varId, String cpId,
|
||||
SharableVarState.SharableVarConfiguration conf) {
|
||||
super(varId, cpId, conf);
|
||||
self = new RWLWWSet<>(cpId, varId);
|
||||
}
|
||||
|
@ -14,12 +14,11 @@ import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
public abstract class SharableVar<T extends JoinableCRDT> {
|
||||
public final HashedWheelTimer HASHED_WHEEL_TIMER =
|
||||
new HashedWheelTimer(r -> {
|
||||
Thread t = Executors.defaultThreadFactory().newThread(r);
|
||||
t.setDaemon(true);
|
||||
return t;
|
||||
}, 5, TimeUnit.MILLISECONDS, 2);
|
||||
public final HashedWheelTimer HASHED_WHEEL_TIMER = new HashedWheelTimer(r -> {
|
||||
Thread t = Executors.defaultThreadFactory().newThread(r);
|
||||
t.setDaemon(true);
|
||||
return t;
|
||||
}, 5, TimeUnit.MILLISECONDS, 2);
|
||||
|
||||
public final Queue<JoinableCRDT> localDeltaQueue = new LinkedList<>();
|
||||
public final Queue<JoinableCRDT> remoteDeltaQueue = new LinkedList<>();
|
||||
@ -28,12 +27,14 @@ public abstract class SharableVar<T extends JoinableCRDT> {
|
||||
private SyncTimerTask syncTimerTask;
|
||||
private SharableVarState sharableVarState;
|
||||
|
||||
public SharableVar(String varId, String cpId, SharableVarState.SharableVarConfiguration resolveResult) {
|
||||
public SharableVar(String varId, String cpId,
|
||||
SharableVarState.SharableVarConfiguration resolveResult) {
|
||||
this.varId = varId;
|
||||
this.sharableVarState = new SharableVarState(cpId, resolveResult);
|
||||
this.HASHED_WHEEL_TIMER.newTimeout(timeout -> {
|
||||
syncTimerTask = new SyncTimerTask();
|
||||
HASHED_WHEEL_TIMER.newTimeout(syncTimerTask, sharableVarState.getInterval(), TimeUnit.MILLISECONDS);
|
||||
HASHED_WHEEL_TIMER.newTimeout(syncTimerTask, sharableVarState.getInterval(),
|
||||
TimeUnit.MILLISECONDS);
|
||||
}, 0, TimeUnit.MILLISECONDS);
|
||||
}
|
||||
|
||||
@ -49,7 +50,8 @@ public abstract class SharableVar<T extends JoinableCRDT> {
|
||||
}
|
||||
}
|
||||
String content = JsonUtil.toJson(localDeltaQueue);
|
||||
SharableVarManager.instance.broadcastSyncMessage(varId, sharableVarState.getSendTo(), content);
|
||||
SharableVarManager.instance.broadcastSyncMessage(varId, sharableVarState.getSendTo(),
|
||||
content);
|
||||
}
|
||||
|
||||
abstract protected T newEmptyDelta();
|
||||
@ -62,7 +64,8 @@ public abstract class SharableVar<T extends JoinableCRDT> {
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
HASHED_WHEEL_TIMER.newTimeout(syncTimerTask, sharableVarState.getInterval(), TimeUnit.MILLISECONDS);
|
||||
HASHED_WHEEL_TIMER.newTimeout(syncTimerTask, sharableVarState.getInterval(),
|
||||
TimeUnit.MILLISECONDS);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -298,11 +298,8 @@ public class DesktopEngine extends JSEngine {
|
||||
|
||||
private void compileSharable(SharableNode sharable, String variableStatement) {
|
||||
try {
|
||||
engine.getContext()
|
||||
.setAttribute(
|
||||
ScriptEngine.FILENAME,
|
||||
sharable.getFileName(),
|
||||
ScriptContext.ENGINE_SCOPE);
|
||||
engine.getContext().setAttribute(ScriptEngine.FILENAME, sharable.getFileName(),
|
||||
ScriptContext.ENGINE_SCOPE);
|
||||
engine.eval("var " + variableStatement);
|
||||
LOGGER.info("load sharable: " + variableStatement);
|
||||
} catch (ScriptException e) {
|
||||
|
Loading…
Reference in New Issue
Block a user