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

Last change on this file since 107 was 107, checked in by psniegowski, 11 years ago

HIGHLIGHTS:

  • add SimultorProviders? hierarchy
  • start Framsticks server over SSH
  • FJF compatible with Framsticks 4.0rc3
  • reading and writing of standard.expt
  • a proof-of-concept implementation of StandardExperiment?

CHANGELOG:
Optionally return FreeAccess? from registry.

Add SimulatorRange?.

StandardExperiment? with genotypes circulation.

Automate registration around StandardState?.

More improvements to StandardExperiment?.

Skeleton version of StandardExperiment?.

Test saving of StandardState?.

Standard experiment state is being loaded.

More development towards StandardState? reading.

Work on reading standard experiment state.

Add classes for standard experiment.

Update example standard.expt

Add FreeAccess? and FreeObject?.

Made compatible with version 4.0rc3

Change deserialization policy.

Improve SSH support.

Working running simulator over SSH.

Fix joining bug in Experiment.

Working version of SimulatorRunner?.

Add more SimulatorProviders?.

Working PrimeExperimentTest? with 4.0rc3

Add references to deserialization.

Add OpaqueObject? and it's serialization.

Add deserialization of dictionaries.

Partial implementation of deserialization.

Add more tests for deserialization.

Prepare tests for deserialization.

Add proper result to prime experiment test.

Minor fixes to simulators providers.

Draft version of SimulatorProvider?.

Add SimulatorProvider? interface.

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.