Skip to content

Commit

Permalink
simplifying ScriptTask
Browse files Browse the repository at this point in the history
  • Loading branch information
heinousjay committed Nov 27, 2014
1 parent 09cfa17 commit b2033fb
Show file tree
Hide file tree
Showing 13 changed files with 55 additions and 79 deletions.
Expand Up @@ -105,15 +105,15 @@ public String baseName() {
}

public void process() {
taskRunner.execute(new DocumentRequestProcessTask(documentScriptEnvironment, continuationCoordinator));
taskRunner.execute(new DocumentRequestProcessTask(documentScriptEnvironment));
}

private final class DocumentRequestProcessTask extends ScriptTask<DocumentScriptEnvironment> {

private boolean run = false;

protected DocumentRequestProcessTask(DocumentScriptEnvironment scriptEnvironment, ContinuationCoordinator continuationCoordinator) {
super("processing document request at " + scriptEnvironment.name(), scriptEnvironment, continuationCoordinator);
protected DocumentRequestProcessTask(DocumentScriptEnvironment scriptEnvironment) {
super("processing document request at " + scriptEnvironment.name(), scriptEnvironment);
}

@Override
Expand Down
Expand Up @@ -56,7 +56,6 @@ public void submit(final WebSocketConnection connection, final String event, fin
new ConnectionEventTask(
"host event " + event + " on WebSocket connection",
connection,
continuationCoordinator,
args,
event
)
Expand All @@ -74,11 +73,10 @@ private final class ConnectionEventTask extends ScriptTask<WebSocketConnectionHo
private ConnectionEventTask(
String name,
WebSocketConnection connection,
ContinuationCoordinator continuationCoordinator,
Object[] args,
String event
) {
super(name, connection.webSocketConnectionHost(), continuationCoordinator);
super(name, connection.webSocketConnectionHost());
this.args = args;
this.connection = connection;
this.event = event;
Expand Down
27 changes: 9 additions & 18 deletions kernel/src/main/java/jj/jasmine/SpecCoordinator.java
Expand Up @@ -61,17 +61,14 @@ class SpecCoordinator {
void scriptInitialized(final ScriptEnvironmentInitialized event) {
// right now, checking this way for testing purposes, to let mocks in
if (JasmineScriptEnvironment.class.isAssignableFrom(event.scriptEnvironment().getClass())) {
taskRunner.execute(new SpecEvaluationTask((JasmineScriptEnvironment)event.scriptEnvironment(), continuationCoordinator));
taskRunner.execute(new SpecEvaluationTask((JasmineScriptEnvironment)event.scriptEnvironment()));
}
}

private final class SpecEvaluationTask extends ScriptTask<JasmineScriptEnvironment> {

SpecEvaluationTask(
final JasmineScriptEnvironment scriptEnvironment,
final ContinuationCoordinator continuationCoordinator
) {
super("spec execution for " + scriptEnvironment, scriptEnvironment, continuationCoordinator);
SpecEvaluationTask(final JasmineScriptEnvironment scriptEnvironment) {
super("spec execution for " + scriptEnvironment, scriptEnvironment);
}

@Override
Expand All @@ -87,17 +84,14 @@ protected boolean errored(Throwable cause) {

@Override
protected void complete() throws Exception {
taskRunner.execute(new TargetEvaluationTask(scriptEnvironment, continuationCoordinator));
taskRunner.execute(new TargetEvaluationTask(scriptEnvironment));
}
}

private final class TargetEvaluationTask extends ScriptTask<JasmineScriptEnvironment> {

TargetEvaluationTask(
final JasmineScriptEnvironment scriptEnvironment,
final ContinuationCoordinator continuationCoordinator
) {
super("target execution for " + scriptEnvironment, scriptEnvironment, continuationCoordinator);
TargetEvaluationTask(final JasmineScriptEnvironment scriptEnvironment) {
super("target execution for " + scriptEnvironment, scriptEnvironment);
}

@Override
Expand All @@ -113,17 +107,14 @@ protected boolean errored(Throwable cause) {

@Override
protected void complete() throws Exception {
taskRunner.execute(new RunnerEvaluationTask(scriptEnvironment, continuationCoordinator));
taskRunner.execute(new RunnerEvaluationTask(scriptEnvironment));
}
}

private final class RunnerEvaluationTask extends ScriptTask<JasmineScriptEnvironment> {

RunnerEvaluationTask(
final JasmineScriptEnvironment scriptEnvironment,
final ContinuationCoordinator continuationCoordinator
) {
super("runner execution for " + scriptEnvironment, scriptEnvironment, continuationCoordinator);
RunnerEvaluationTask(final JasmineScriptEnvironment scriptEnvironment) {
super("runner execution for " + scriptEnvironment, scriptEnvironment);
}

@Override
Expand Down
2 changes: 1 addition & 1 deletion kernel/src/main/java/jj/repl/ReplHandler.java
Expand Up @@ -106,7 +106,7 @@ protected void messageReceived(final ChannelHandlerContext ctx, final String msg
"repl-console"
);

taskRunner.execute(new ScriptTask<ReplScriptEnvironment>("repl execution:\n" + msg, rse, continuationCoordinator) {
taskRunner.execute(new ScriptTask<ReplScriptEnvironment>("repl execution:\n" + msg, rse) {

@Override
protected void begin() throws Exception {
Expand Down
7 changes: 7 additions & 0 deletions kernel/src/main/java/jj/script/AbstractScriptEnvironment.java
Expand Up @@ -105,6 +105,8 @@ protected Dependencies(

private final ContinuationCoordinator continuationCoordinator;

private final ContinuationPendingCache continuationPendingCache;

private final Dependencies dependencies;

private volatile ScriptExecutionState state = Unitialized;
Expand All @@ -114,6 +116,7 @@ protected Dependencies(
protected AbstractScriptEnvironment(Dependencies dependencies) {
super(dependencies);
this.contextProvider = dependencies.scriptEnvironmentDependencies.contextProvider;
this.continuationPendingCache = dependencies.scriptEnvironmentDependencies.continuationPendingCache;
this.continuationCoordinator = dependencies.scriptEnvironmentDependencies.continuationCoordinator;
this.dependencies = dependencies;
}
Expand Down Expand Up @@ -148,6 +151,10 @@ public boolean initializationDidError() {
ContinuationPendingKey resumeContinuation(ContinuationPendingKey pendingKey, Object result) {
return continuationCoordinator.resumeContinuation(this, pendingKey, result);
}

<T extends ScriptEnvironment> void awaitContinuation(ScriptTask<T> task) {
continuationPendingCache.storeForContinuation(task);
}

/**
* mark this environment as being initialized
Expand Down
6 changes: 0 additions & 6 deletions kernel/src/main/java/jj/script/ContinuationCoordinator.java
Expand Up @@ -59,11 +59,5 @@ public interface ContinuationCoordinator {
* @param result
*/
void resume(ContinuationPendingKey pendingKey, Object result);

/**
* Pass a task instance in to await a continuation
* @param task
*/
void awaitContinuation(ScriptTask<? extends ScriptEnvironment> task);

}
Expand Up @@ -126,11 +126,6 @@ public ContinuationPendingKey execute(final ScriptEnvironment scriptEnvironment,
return null;
}

@Override
public void awaitContinuation(ScriptTask<? extends ScriptEnvironment> task) {
cache.storeForContinuation(task);
}

/**
* Resumes a continuation that was previously saved from an execution in this class
* @param pendingKey
Expand Down
4 changes: 2 additions & 2 deletions kernel/src/main/java/jj/script/ContinuationPendingCache.java
Expand Up @@ -44,7 +44,7 @@ class ContinuationPendingCache {
}

private final ScriptTask<ScriptEnvironment> reserved =
new ScriptTask<ScriptEnvironment>("", null, null) {
new ScriptTask<ScriptEnvironment>("", null) {

@Override
protected void begin() throws Exception {
Expand All @@ -53,7 +53,7 @@ protected void begin() throws Exception {
};

private final ScriptTask<ScriptEnvironment> alreadyResumed =
new ScriptTask<ScriptEnvironment>("", null, null) {
new ScriptTask<ScriptEnvironment>("", null) {

@Override
protected void begin() throws Exception {
Expand Down
Expand Up @@ -80,7 +80,7 @@ protected HashMap<ScriptEnvironment, List<TaskOrKey>> initialValue() {
}

void initializeScript(AbstractScriptEnvironment se) {
taskRunner.execute(new InitializerTask("initializing " + se, se, continuationCoordinator));
taskRunner.execute(new InitializerTask("initializing " + se, se));
}

void scriptEnvironmentInitialized(ScriptEnvironment scriptEnvironment) {
Expand Down Expand Up @@ -132,8 +132,8 @@ private class InitializerTask extends ScriptTask<AbstractScriptEnvironment> {
* @param name
* @param scriptEnvironment
*/
protected InitializerTask(String name, AbstractScriptEnvironment scriptEnvironment, ContinuationCoordinator continuationCoordinator) {
super(name, scriptEnvironment, continuationCoordinator);
protected InitializerTask(String name, AbstractScriptEnvironment scriptEnvironment) {
super(name, scriptEnvironment);
}

protected void begin() throws Exception {
Expand Down
7 changes: 2 additions & 5 deletions kernel/src/main/java/jj/script/ScriptTask.java
Expand Up @@ -29,8 +29,6 @@ public abstract class ScriptTask<T extends ScriptEnvironment> extends DelayedTas

protected final T scriptEnvironment;

protected final ContinuationCoordinator continuationCoordinator;

/** assign the result of any operation against the ContinuationCoordinator to this field */
protected ContinuationPendingKey pendingKey;

Expand All @@ -45,10 +43,9 @@ public abstract class ScriptTask<T extends ScriptEnvironment> extends DelayedTas
*/
protected Object result;

protected ScriptTask(final String name, final T scriptEnvironment, final ContinuationCoordinator continuationCoordinator) {
protected ScriptTask(final String name, final T scriptEnvironment) {
super(name);
this.scriptEnvironment = scriptEnvironment;
this.continuationCoordinator = continuationCoordinator;
}

@Override
Expand All @@ -65,7 +62,7 @@ protected final void run() throws Exception {
if (pendingKey == null) {
complete();
} else {
continuationCoordinator.awaitContinuation(this);
((AbstractScriptEnvironment)scriptEnvironment).awaitContinuation(this);
}
}

Expand Down
51 changes: 24 additions & 27 deletions kernel/src/main/java/jj/script/Timers.java
Expand Up @@ -100,36 +100,33 @@ private String setTimer(final Callable function, final int delay, final boolean
final String key = "jj-timer-" + cancelIds.next();
final ScriptEnvironment rootEnvironment = env.currentRootScriptEnvironment();

ScriptTask<ScriptEnvironment> task = new ScriptTask<ScriptEnvironment>(
repeat ? "setInterval" : "setTimeout",
env.current(),
continuationCoordinator
) {
@Override
protected void begin() throws Exception {
// if this is setTimeout, kill the cancelation structure
if (!repeat) {
killTimerCancelKey(rootEnvironment, key);
ScriptTask<ScriptEnvironment> task =
new ScriptTask<ScriptEnvironment>(repeat ? "setInterval" : "setTimeout", env.current()) {
@Override
protected void begin() throws Exception {
// if this is setTimeout, kill the cancelation structure
if (!repeat) {
killTimerCancelKey(rootEnvironment, key);
}
pendingKey = continuationCoordinator.execute(scriptEnvironment, function, args);
}

pendingKey = continuationCoordinator.execute(scriptEnvironment, function, args);
}

@Override
protected void complete() throws Exception {
// we need to repeat once the task is complete, as an artifact of the resumable structure
// to do otherwise would require a way to clone tasks, which should actually be doable?
// but for now, repeat on complete
if (repeat) {
repeat();
@Override
protected void complete() throws Exception {
// we need to repeat once the task is complete, as an artifact of the resumable structure
// to do otherwise would require a way to clone tasks, which should actually be doable?
// but for now, repeat on complete
if (repeat) {
repeat();
}
}
}

@Override
protected long delay() {
return delay;
}
};

@Override
protected long delay() {
return delay;
}
};

taskRunner.execute(task);

Expand Down
Expand Up @@ -60,11 +60,8 @@ protected void invoke(final Object event) {
assert callable != null : "invoker invoked without set callable";

if (alive) {
taskRunner.execute(new ScriptTask<ScriptEnvironment>(
"invoking " + target.name() + " function with server event " + event.getClass().getName(),
target,
continuationCoordinator
) {
String name = "invoking " + target.name() + " function with server event " + event.getClass().getName();
taskRunner.execute(new ScriptTask<ScriptEnvironment>(name, target) {
@Override
protected void begin() throws Exception {
if (alive) {
Expand Down
Expand Up @@ -54,7 +54,7 @@ private static final class HelperTask extends ScriptTask<ScriptEnvironment> {
/** it will never run so nulls are cool!
*/
protected HelperTask(ContinuationPendingKey pendingKey) {
super("", null, null);
super("", null);
this.pendingKey = pendingKey;
}

Expand Down

0 comments on commit b2033fb

Please sign in to comment.