Skip to content

Commit c1d8dd8

Browse files
committed
Add process modes
1 parent 0b4931e commit c1d8dd8

12 files changed

Lines changed: 60 additions & 77 deletions

File tree

snap-agent/src/main/java/org/snapscript/agent/ProcessAgent.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,11 @@ public ProcessAgent(URI root, String process, String level, int port, int thread
4141
this.port = port;
4242
}
4343

44-
public void start() throws Exception {
45-
start(model);
44+
public void start(ProcessMode mode) throws Exception {
45+
start(mode, model);
4646
}
4747

48-
public void start(Model model) throws Exception {
48+
public void start(ProcessMode mode, Model model) throws Exception {
4949
BreakpointMatcher matcher = context.getMatcher();
5050
SuspendController controller = context.getController();
5151
TraceInterceptor interceptor = context.getInterceptor();
@@ -57,7 +57,7 @@ public void start(Model model) throws Exception {
5757
ConsoleLogger logger = new ConsoleLogger(level);
5858
SystemValidator validator = new SystemValidator(context);
5959
ConnectionChecker checker = new ConnectionChecker(process, system);
60-
ProcessEventReceiver listener = new ProcessEventReceiver(context, checker, model);
60+
ProcessEventReceiver listener = new ProcessEventReceiver(context, mode, checker, model);
6161
ProcessEventTimer timer = new ProcessEventTimer(listener, logger);
6262
SocketEventClient client = new SocketEventClient(timer, logger);
6363
ProcessEventChannel channel = client.connect(host, port);

snap-agent/src/main/java/org/snapscript/agent/ProcessEventReceiver.java

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,25 @@
11
package org.snapscript.agent;
22

3-
import java.util.Map;
4-
import java.util.Set;
5-
import java.util.concurrent.atomic.AtomicReference;
6-
73
import org.snapscript.agent.debug.BreakpointMatcher;
84
import org.snapscript.agent.debug.ResumeType;
95
import org.snapscript.agent.debug.SuspendController;
10-
import org.snapscript.agent.event.BreakpointsEvent;
11-
import org.snapscript.agent.event.BrowseEvent;
12-
import org.snapscript.agent.event.EvaluateEvent;
13-
import org.snapscript.agent.event.ExecuteData;
14-
import org.snapscript.agent.event.ExecuteEvent;
15-
import org.snapscript.agent.event.PingEvent;
16-
import org.snapscript.agent.event.ProcessEventAdapter;
17-
import org.snapscript.agent.event.ProcessEventChannel;
18-
import org.snapscript.agent.event.StepEvent;
6+
import org.snapscript.agent.event.*;
197
import org.snapscript.core.Model;
208

9+
import java.util.Map;
10+
import java.util.Set;
11+
import java.util.concurrent.atomic.AtomicReference;
12+
2113
public class ProcessEventReceiver extends ProcessEventAdapter {
2214

2315
private final AtomicReference<ExecuteData> reference;
2416
private final ConnectionChecker checker;
2517
private final ResourceExecutor executor;
2618
private final ProcessContext context;
2719

28-
public ProcessEventReceiver(ProcessContext context, ConnectionChecker checker, Model model) throws Exception {
20+
public ProcessEventReceiver(ProcessContext context, ProcessMode mode, ConnectionChecker checker, Model model) throws Exception {
2921
this.reference = new AtomicReference<ExecuteData>();
30-
this.executor = new ResourceExecutor(context, model);
22+
this.executor = new ResourceExecutor(context, mode, model);
3123
this.checker = checker;
3224
this.context = context;
3325
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package org.snapscript.agent;
2+
3+
public enum ProcessMode {
4+
DETACHED(true),
5+
ATTACHED(false);
6+
7+
private final boolean async;
8+
9+
private ProcessMode(boolean async) {
10+
this.async = async;
11+
}
12+
13+
public boolean isAsync(){
14+
return async;
15+
}
16+
}

snap-agent/src/main/java/org/snapscript/agent/ProcessTask.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,18 @@ public class ProcessTask implements Runnable {
1818

1919
private final ProcessEventChannel client;
2020
private final ProcessContext context;
21+
private final ProcessMode mode;
2122
private final String resource;
2223
private final String project;
2324
private final Model model;
2425

25-
public ProcessTask(ProcessEventChannel client, ProcessContext context, Model model, String project, String resource) {
26+
public ProcessTask(ProcessEventChannel client, ProcessContext context, ProcessMode mode, Model model, String project, String resource) {
2627
this.client = client;
2728
this.resource = resource;
2829
this.project = project;
2930
this.context = context;
3031
this.model = model;
32+
this.mode = mode;
3133
}
3234

3335
@Override
@@ -85,13 +87,17 @@ public void run() {
8587
} catch(Exception e) {
8688
e.printStackTrace();
8789
} finally {
88-
System.exit(0); // shutdown when finished
90+
if(!mode.isAsync()) {
91+
System.exit(0); // shutdown when finished
92+
}
8993
}
9094
}
9195
} catch (Exception e) {
9296
System.err.println(ExceptionBuilder.build(e));
9397
} finally {
94-
System.exit(0); // shutdown when finished
98+
if(!mode.isAsync()) {
99+
System.exit(0); // shutdown when finished
100+
}
95101
}
96102
}
97103
}

snap-agent/src/main/java/org/snapscript/agent/ResourceExecutor.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,19 @@
99
public class ResourceExecutor {
1010

1111
private final ProcessContext context;
12+
private final ProcessMode mode;
1213
private final ThreadFactory factory;
1314
private final Model model;
1415

15-
public ResourceExecutor(ProcessContext context, Model model) throws Exception {
16+
public ResourceExecutor(ProcessContext context, ProcessMode mode, Model model) throws Exception {
1617
this.factory = new ThreadBuilder();
1718
this.context = context;
1819
this.model = model;
20+
this.mode = mode;
1921
}
2022

2123
public void execute(ProcessEventChannel channel, String project, String resource) throws Exception {
22-
ProcessTask task = new ProcessTask(channel, context, model, project, resource);
24+
ProcessTask task = new ProcessTask(channel, context, mode, model, project, resource);
2325

2426
if(resource != null) {
2527
Thread thread = factory.newThread(task);

snap-agent/src/main/java/org/snapscript/agent/event/ProcessEventConnection.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,20 @@ public class ProcessEventConnection {
88

99
private final MessageEnvelopReader consumer;
1010
private final MessageEnvelopeWriter producer;
11+
private final ProcessEventExecutor executor;
1112

12-
public ProcessEventConnection(InputStream input, OutputStream output) {
13+
public ProcessEventConnection(ProcessEventExecutor executor, InputStream input, OutputStream output) {
1314
this.consumer = new MessageEnvelopReader(input);
1415
this.producer = new MessageEnvelopeWriter(output);
16+
this.executor = executor;
1517
}
1618

1719
public ProcessEventConsumer getConsumer() throws IOException {
1820
return new ProcessEventConsumer(consumer);
1921
}
2022

2123
public ProcessEventProducer getProducer() throws IOException {
22-
return new ProcessEventProducer(producer);
24+
return new ProcessEventProducer(executor, producer);
2325

2426
}
2527
}

snap-agent/src/main/java/org/snapscript/agent/event/ProcessEventProducer.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,10 @@ public class ProcessEventProducer {
1414
private final CountDownLatch latch;
1515
private final Executor executor;
1616

17-
public ProcessEventProducer(MessageEnvelopeWriter writer) {
17+
public ProcessEventProducer(ProcessEventExecutor executor, MessageEnvelopeWriter writer) {
1818
this.marshallers = new ConcurrentHashMap<Class, ProcessEventMarshaller>();
19-
this.executor = new ProcessEventExecutor();
2019
this.latch = new CountDownLatch(1);
20+
this.executor = executor;
2121
this.writer = writer;
2222
}
2323

snap-agent/src/main/java/org/snapscript/agent/event/socket/SocketEventClient.java

Lines changed: 4 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -7,35 +7,16 @@
77
import java.util.concurrent.atomic.AtomicBoolean;
88

99
import org.snapscript.agent.ConsoleLogger;
10-
import org.snapscript.agent.event.BeginEvent;
11-
import org.snapscript.agent.event.BreakpointsEvent;
12-
import org.snapscript.agent.event.BrowseEvent;
13-
import org.snapscript.agent.event.EvaluateEvent;
14-
import org.snapscript.agent.event.ExecuteEvent;
15-
import org.snapscript.agent.event.ExitEvent;
16-
import org.snapscript.agent.event.FaultEvent;
17-
import org.snapscript.agent.event.PingEvent;
18-
import org.snapscript.agent.event.PongEvent;
19-
import org.snapscript.agent.event.ProcessEvent;
20-
import org.snapscript.agent.event.ProcessEventChannel;
21-
import org.snapscript.agent.event.ProcessEventConnection;
22-
import org.snapscript.agent.event.ProcessEventConsumer;
23-
import org.snapscript.agent.event.ProcessEventListener;
24-
import org.snapscript.agent.event.ProcessEventProducer;
25-
import org.snapscript.agent.event.ProfileEvent;
26-
import org.snapscript.agent.event.RegisterEvent;
27-
import org.snapscript.agent.event.ScopeEvent;
28-
import org.snapscript.agent.event.StepEvent;
29-
import org.snapscript.agent.event.SyntaxErrorEvent;
30-
import org.snapscript.agent.event.WriteErrorEvent;
31-
import org.snapscript.agent.event.WriteOutputEvent;
10+
import org.snapscript.agent.event.*;
3211

3312
public class SocketEventClient {
3413

3514
private final ProcessEventListener listener;
15+
private final ProcessEventExecutor executor;
3616
private final ConsoleLogger logger;
3717

3818
public SocketEventClient(ProcessEventListener listener, ConsoleLogger logger) throws IOException {
19+
this.executor = new ProcessEventExecutor();
3920
this.listener = listener;
4021
this.logger = logger;
4122
}
@@ -58,7 +39,7 @@ private class SocketConnection extends Thread implements ProcessEventChannel {
5839
private final Socket socket;
5940

6041
public SocketConnection(Socket socket, InputStream input, OutputStream output) throws IOException {
61-
this.connection = new ProcessEventConnection(input, output);
42+
this.connection = new ProcessEventConnection(executor, input, output);
6243
this.open = new AtomicBoolean(true);
6344
this.socket = socket;
6445
}

snap-agent/src/main/java/org/snapscript/agent/event/socket/SocketEventServer.java

Lines changed: 4 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -11,40 +11,21 @@
1111
import java.util.concurrent.atomic.AtomicBoolean;
1212

1313
import org.snapscript.agent.ConsoleLogger;
14-
import org.snapscript.agent.event.BeginEvent;
15-
import org.snapscript.agent.event.BreakpointsEvent;
16-
import org.snapscript.agent.event.BrowseEvent;
17-
import org.snapscript.agent.event.EvaluateEvent;
18-
import org.snapscript.agent.event.ExecuteEvent;
19-
import org.snapscript.agent.event.ExitEvent;
20-
import org.snapscript.agent.event.FaultEvent;
21-
import org.snapscript.agent.event.PingEvent;
22-
import org.snapscript.agent.event.PongEvent;
23-
import org.snapscript.agent.event.ProcessEvent;
24-
import org.snapscript.agent.event.ProcessEventChannel;
25-
import org.snapscript.agent.event.ProcessEventConnection;
26-
import org.snapscript.agent.event.ProcessEventConsumer;
27-
import org.snapscript.agent.event.ProcessEventListener;
28-
import org.snapscript.agent.event.ProcessEventProducer;
29-
import org.snapscript.agent.event.ProfileEvent;
30-
import org.snapscript.agent.event.RegisterEvent;
31-
import org.snapscript.agent.event.ScopeEvent;
32-
import org.snapscript.agent.event.StepEvent;
33-
import org.snapscript.agent.event.SyntaxErrorEvent;
34-
import org.snapscript.agent.event.WriteErrorEvent;
35-
import org.snapscript.agent.event.WriteOutputEvent;
14+
import org.snapscript.agent.event.*;
3615
import org.snapscript.common.ThreadBuilder;
3716

3817
public class SocketEventServer implements ProcessEventChannel {
3918

4019
private final Map<String, ProcessEventChannel> receivers;
4120
private final ProcessEventListener listener;
21+
private final ProcessEventExecutor executor;
4222
private final SocketAcceptor acceptor;
4323
private final ConsoleLogger logger;
4424
private final ThreadFactory factory;
4525

4626
public SocketEventServer(ProcessEventListener listener, ConsoleLogger logger, int port) throws IOException {
4727
this.receivers = new ConcurrentHashMap<String, ProcessEventChannel>();
28+
this.executor = new ProcessEventExecutor();
4829
this.acceptor = new SocketAcceptor(port);
4930
this.factory = new ThreadBuilder();
5031
this.listener = listener;
@@ -140,7 +121,7 @@ private class SocketConnection implements ProcessEventChannel, Runnable {
140121
private final Socket socket;
141122

142123
public SocketConnection(Socket socket, InputStream input, OutputStream output) throws IOException {
143-
this.connection = new ProcessEventConnection(input, output);
124+
this.connection = new ProcessEventConnection(executor, input, output);
144125
this.open = new AtomicBoolean(true);
145126
this.active = new AtomicBoolean();
146127
this.socket = socket;

snap-develop/src/main/java/org/snapscript/develop/ProcessRunner.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33
import java.net.URI;
44

55
import org.snapscript.agent.ProcessAgent;
6+
import org.snapscript.agent.ProcessMode;
7+
8+
import static org.snapscript.agent.ProcessMode.ATTACHED;
69

710
public class ProcessRunner {
811

@@ -17,6 +20,6 @@ public static void main(String[] list) throws Exception {
1720

1821
public static void start(URI resources, String process, String level, int port) throws Exception {
1922
ProcessAgent agent = new ProcessAgent(resources, process, level, port);
20-
agent.start();
23+
agent.start(ATTACHED);
2124
}
2225
}

0 commit comments

Comments
 (0)