/.metadata/.plugins/org.eclipse.core.resources/.history/51/0024724e83a3001e1dff9ae635b3e1ee
#! | 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}