PageRenderTime 10ms CodeModel.GetById 1ms app.highlight 8ms RepoModel.GetById 0ms app.codeStats 0ms

/.metadata/.plugins/org.eclipse.core.resources/.history/51/0024724e83a3001e1dff9ae635b3e1ee

https://bitbucket.org/fixpoint/connexion
#! | 91 lines | 79 code | 12 blank | 0 comment | 0 complexity | 542aec8406fb2acb373282a0f28b92a5 MD5 | raw file
 1package info.reflectionsofmind.connexion.platform.cli;
 2
 3import info.reflectionsofmind.connexion.platform.control.IRoot;
 4import info.reflectionsofmind.connexion.platform.control.ServerInfo;
 5import info.reflectionsofmind.connexion.platform.control.control.IConnectControl;
 6import info.reflectionsofmind.connexion.platform.control.control.IJoinControl;
 7import info.reflectionsofmind.connexion.platform.control.cts.CTSMessageCoder;
 8import info.reflectionsofmind.connexion.platform.control.cts.message.MsgParticipationRequest;
 9import info.reflectionsofmind.connexion.platform.control.stc.message.MsgParticipationAccepted;
10import info.reflectionsofmind.connexion.platform.control.util.ParticipationAcceptedWaiter;
11import info.reflectionsofmind.connexion.platform.game.IGame;
12import info.reflectionsofmind.connexion.transport.AbstractTransport;
13import info.reflectionsofmind.connexion.transport.ITransport;
14import info.reflectionsofmind.connexion.transport.ITransport.INode;
15import info.reflectionsofmind.connexion.util.convert.EncodingException;
16
17import java.util.concurrent.Callable;
18import java.util.concurrent.Executors;
19import java.util.concurrent.Future;
20
21public class ConnectInterpreter implements IConnectControl, IInterpreter
22{
23	private final IGame game;
24	private final IRoot root;
25	
26	public ConnectInterpreter(final IRoot root, final IGame game)
27	{
28		this.game = game;
29		this.root = root;
30	}
31	
32	public Future<IJoinControl> connect(final String name, final INode server)
33	{
34		try
35		{
36			final ParticipationAcceptedWaiter waiter = new ParticipationAcceptedWaiter();
37			server.getTransport().addListener(waiter);
38			server.send(CTSMessageCoder.INSTANCE.encode(new MsgParticipationRequest(name)));
39			final Future<MsgParticipationAccepted> message = waiter.get();
40			
41			return Executors.newSingleThreadExecutor().submit(new Callable<IJoinControl>()
42					{
43				public IJoinControl call() throws Exception
44				{
45					return new JoinInterpreter(getRoot(), getGame(), message.get().getNames());
46				}
47					});
48		}
49		catch (final EncodingException exception)
50		{
51			exception.printStackTrace();
52		}
53	}
54	
55	public IGame getGame()
56	{
57		return this.game;
58	}
59	
60	public IRoot getRoot()
61	{
62		return this.root;
63	}
64	
65	public void interpret(final String command)
66	{
67		if (command.equals("connect"))
68		{
69			final ServerInfo info = this.root.getConfiguration().getServers().get(0);
70			final ITransport transport = info.getFactory().createTransport(info.getParameters());
71			
72			final ITransport.IListener listener = new AbstractTransport.Listener()
73			{
74				@Override
75				public void onTrace(final ITransport transport, final String trace)
76				{
77					System.out.println(trace);
78				}
79			};
80			
81			transport.addListener(listener);
82			transport.start();
83			
84			connect("Player", transport.createNode(info.getAddress()));
85		}
86		else if ("exit".equals(command))
87		{
88			getRoot().restart();
89		}
90	}
91}