View Javadoc

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  	 * Starts a connection to the Visualizer server. Throws a Pogamut exception if the connection fails.
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  }