/.metadata/.plugins/org.eclipse.core.resources/.history/37/10efc42682a3001e1dff9ae635b3e1ee
#! | 87 lines | 75 code | 12 blank | 0 comment | 0 complexity | fa1fcc50af5034d16a6f68291a75943c 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.IServerToClientMessage;
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.Future;
18
19public class ConnectInterpreter implements IConnectControl, IInterpreter
20{
21 private final IGame game;
22 private final IRoot root;
23
24 public ConnectInterpreter(final IRoot root, final IGame game)
25 {
26 this.game = game;
27 this.root = root;
28 }
29
30 public Future<IJoinControl> connect(final String name, final INode server)
31 {
32 try
33 {
34 server.getTransport().addListener(new ParticipationAcceptedWaiter()
35 {
36 @Override
37 protected void onParticipationAccepted(final IServerToClientMessage message)
38 {
39 super.onParticipationAccepted(message);
40 }
41 });
42
43 server.send(CTSMessageCoder.INSTANCE.encode(new MsgParticipationRequest(name)));
44 }
45 catch (final EncodingException exception)
46 {
47 exception.printStackTrace();
48 }
49 }
50
51 public IGame getGame()
52 {
53 return this.game;
54 }
55
56 public IRoot getRoot()
57 {
58 return this.root;
59 }
60
61 public void interpret(final String command)
62 {
63 if (command.equals("connect"))
64 {
65 final ServerInfo info = this.root.getConfiguration().getServers().get(0);
66 final ITransport transport = info.getFactory().createTransport(info.getParameters());
67
68 final ITransport.IListener listener = new AbstractTransport.Listener()
69 {
70 @Override
71 public void onTrace(final ITransport transport, final String trace)
72 {
73 System.out.println(trace);
74 }
75 };
76
77 transport.addListener(listener);
78 transport.start();
79
80 connect("Player", transport.createNode(info.getAddress()));
81 }
82 else if ("exit".equals(command))
83 {
84 getRoot().restart();
85 }
86 }
87}