1 package nl.tudelft.goal.ut2004.visualizer.connection.client;
2
3 import java.net.URI;
4 import java.rmi.NotBoundException;
5 import java.rmi.RemoteException;
6 import java.rmi.registry.LocateRegistry;
7 import java.rmi.registry.Registry;
8
9 import nl.tudelft.goal.ut2004.visualizer.connection.VisualizerService;
10 import nl.tudelft.pogamut.base.server.ServerDefinition;
11
12 import cz.cuni.amis.utils.exception.PogamutException;
13 import cz.cuni.amis.utils.flag.FlagListener;
14
15 public class VisualizerServiceDefinition extends ServerDefinition<RemoteVisualizer> {
16
17 public static final String serviceName = "UnrealVisualizerService";
18
19 private final FlagListener<Boolean> connectionListener = new FlagListener<Boolean>() {
20
21 @Override
22 public void flagChanged(Boolean connected) {
23 if (!connected)
24 startServer();
25 }
26 };
27
28 private RemoteVisualizer visualizer;
29
30
31
32
33
34 @Override
35 public void startServer() {
36
37 try {
38 URI uri = getUri();
39
40 assert uri.getHost() != null;
41 assert uri.getPort() != -1;
42
43 Registry registry = LocateRegistry.getRegistry(uri.getHost(), uri.getPort());
44 VisualizerService service = (VisualizerService) registry.lookup(serviceName);
45 visualizer = new RemoteVisualizer();
46 visualizer.setVisualizerService(service);
47 visualizer.getConnectedFlag().addListener(connectionListener);
48 setNewServer(visualizer);
49
50 } catch (RemoteException e) {
51 throw new PogamutException("Problem marshalling remote visualizer.", e);
52 } catch (NotBoundException e) {
53 throw new PogamutException("UnrealVisualizer is not running", e);
54 }
55 }
56
57 @Override
58 public void stopServer() {
59 if (visualizer != null) {
60 visualizer.getConnectedFlag().removeListener(connectionListener);
61 visualizer.disconnect();
62 visualizer = null;
63 setNewServer(null);
64 }
65 }
66
67 }