source: java/main/src/main/java/com/framsticks/experiment/SimulatorConnector.java @ 193

Last change on this file since 193 was 193, checked in by Maciej Komosinski, 10 years ago

Set svn:eol-style native for all textual files

  • Property svn:eol-style set to native
File size: 3.0 KB
Line 
1package com.framsticks.experiment;
2
3import org.apache.logging.log4j.Level;
4import org.apache.logging.log4j.Logger;
5import org.apache.logging.log4j.LogManager;
6
7import com.framsticks.communication.Address;
8import com.framsticks.params.annotations.FramsClassAnnotation;
9import com.framsticks.remote.RemoteTree;
10import com.framsticks.structure.Path;
11import com.framsticks.util.Misc;
12import com.framsticks.util.dispatching.Dispatcher;
13import com.framsticks.util.dispatching.Dispatching;
14import com.framsticks.util.dispatching.Future;
15import com.framsticks.util.dispatching.FutureHandler;
16import com.framsticks.util.dispatching.Joinable;
17import com.framsticks.util.dispatching.JoinableParent;
18import com.framsticks.util.dispatching.JoinableState;
19
20import static com.framsticks.structure.TreeOperations.*;
21
22@FramsClassAnnotation
23public class SimulatorConnector extends SingleSimulatorProvider implements JoinableParent {
24        private static final Logger log = LogManager.getLogger(SimulatorConnector.class);
25
26        protected Experiment experiment;
27        protected RemoteTree remoteTree;
28        protected Simulator simulator;
29        protected Address address;
30        protected boolean provided = false;
31
32        public boolean hasProvided() {
33                return provided;
34        }
35
36        public void setAddress(Address address) {
37                this.address = address;
38        }
39
40        public Address getAddress() {
41                return address;
42        }
43
44
45        @Override
46        public String getName() {
47                return "simulator connector";
48        }
49
50        @Override
51        protected void joinableStart() {
52
53        }
54
55        @Override
56        protected void joinableInterrupt() {
57                Dispatching.drop(remoteTree, this);
58                finishJoinable();
59        }
60
61        @Override
62        protected void joinableFinish() {
63
64        }
65
66        @Override
67        protected void joinableJoin() throws InterruptedException {
68                Dispatching.join(remoteTree);
69        }
70
71        @SuppressWarnings({ "rawtypes", "unchecked" })
72        @Override
73        public void provideSimulator(final SimulatorSpecification specification, final FutureHandler<Simulator> future) {
74                if (hasProvided()) {
75                        future.pass(null);
76                        return;
77                }
78                provided = true;
79                experiment = specification.getExperiment();
80
81                Misc.throwIfNull(address);
82                log.debug("connecting to simulator at {}", address);
83                // experiment
84                remoteTree = new RemoteTree();
85                remoteTree.setAddress(address);
86                remoteTree.setDispatcher((Dispatcher) experiment.getDispatcher());
87
88                experiment.getSimulatorCandidates().add(remoteTree);
89                Dispatching.use(remoteTree, this);
90
91                Dispatching.dispatchLog(remoteTree, log, Level.DEBUG, "first task in remote tree");
92
93                tryGet(remoteTree, "/simulator", new Future<Path>(experiment) {
94
95                        @Override
96                        protected void result(Path result) {
97                                log.debug("resolved simulator path: {}", result);
98                                Misc.checkEquals(specification.getDefinition(), bindAccess(result).get("expdef", String.class), "expdef mismatch in connected simulator", SimulatorConnector.this);
99
100                                simulator = experiment.createSimulator(remoteTree, result);
101
102                                future.pass(simulator);
103                        }
104                });
105        }
106
107        @Override
108        public void childChangedState(Joinable joinable, JoinableState state) {
109                log.debug("child {} changed state to {}", joinable, state);
110        }
111}
Note: See TracBrowser for help on using the repository browser.