PageRenderTime 81ms CodeModel.GetById 17ms RepoModel.GetById 2ms app.codeStats 1ms

/.metadata/.plugins/org.eclipse.core.resources/.history/20/a0ef9c4569a3001e1d98c762f0e1eac2

https://bitbucket.org/fixpoint/connexion
#! | 204 lines | 168 code | 36 blank | 0 comment | 0 complexity | 44de6f42cf7828c3ca1a45c97db10a63 MD5 | raw file
  1. package info.reflectionsofmind.connexion.platform.gui.join;
  2. import info.reflectionsofmind.connexion.platform.control.ClientParticipant;
  3. import info.reflectionsofmind.connexion.platform.control.IGameControlFactory;
  4. import info.reflectionsofmind.connexion.platform.control.IRoot;
  5. import info.reflectionsofmind.connexion.platform.control.control.IGameControl;
  6. import info.reflectionsofmind.connexion.platform.control.control.IJoinControl;
  7. import info.reflectionsofmind.connexion.platform.control.cts.CTSMessageCoder;
  8. import info.reflectionsofmind.connexion.platform.control.cts.message.MsgDisconnectNotice;
  9. import info.reflectionsofmind.connexion.platform.control.stc.IServerToClientMessageDispatchTarget;
  10. import info.reflectionsofmind.connexion.platform.control.stc.STCMessageDispatcher;
  11. import info.reflectionsofmind.connexion.platform.control.stc.message.MsgChangeNotice;
  12. import info.reflectionsofmind.connexion.platform.control.stc.message.MsgGameStarted;
  13. import info.reflectionsofmind.connexion.platform.control.stc.message.MsgKickNotice;
  14. import info.reflectionsofmind.connexion.platform.control.stc.message.MsgParticipantConnected;
  15. import info.reflectionsofmind.connexion.platform.control.stc.message.MsgParticipationAccepted;
  16. import info.reflectionsofmind.connexion.platform.game.IGame;
  17. import info.reflectionsofmind.connexion.platform.game.client.IClientGameParameters;
  18. import info.reflectionsofmind.connexion.platform.gui.ConnexionGUI;
  19. import info.reflectionsofmind.connexion.platform.gui.MessagePanel;
  20. import info.reflectionsofmind.connexion.platform.gui.TransportEventLogger;
  21. import info.reflectionsofmind.connexion.transport.ITransport.INode;
  22. import info.reflectionsofmind.connexion.util.convert.EncodingException;
  23. import java.awt.event.ActionEvent;
  24. import java.awt.event.WindowAdapter;
  25. import java.awt.event.WindowEvent;
  26. import java.util.ArrayList;
  27. import java.util.List;
  28. import java.util.concurrent.Callable;
  29. import java.util.concurrent.Executors;
  30. import java.util.concurrent.Future;
  31. import javax.swing.AbstractAction;
  32. import javax.swing.JButton;
  33. import javax.swing.JFrame;
  34. import net.miginfocom.swing.MigLayout;
  35. public class JoinGameFrame extends JFrame implements IServerToClientMessageDispatchTarget, IJoinControl
  36. {
  37. private final IGame game;
  38. private final IRoot root;
  39. private final INode server;
  40. private MessagePanel messagePanel;
  41. private ParticipantsPanel participantsPanel;
  42. private AbstractJoinGamePanel gamePanel;
  43. private final List<ClientParticipant> participants = new ArrayList<ClientParticipant>();
  44. private final Callable<IGameControl> gameWaiter = new Callable<IGameControl>()
  45. {
  46. public IGameControl call() throws Exception
  47. {
  48. }
  49. };
  50. private final Future<IGameControl> futureGame = Executors.newSingleThreadExecutor().submit(
  51. new Callable<IGameControl>()
  52. {
  53. public IGameControl call() throws Exception
  54. {
  55. }
  56. }
  57. );
  58. public JoinGameFrame(final IRoot root, final IGame game, final INode server, final List<String> participantNames)
  59. {
  60. super("Connexion :: Join game");
  61. this.game = game;
  62. setDefaultCloseOperation(DISPOSE_ON_CLOSE);
  63. setLayout(new MigLayout("", "[240!, fill][max]", "[][max, fill][]"));
  64. addWindowListener(new WindowAdapter()
  65. {
  66. @Override
  67. public void windowClosed(final WindowEvent e)
  68. {
  69. disconnect();
  70. }
  71. });
  72. this.root = root;
  73. this.server = server;
  74. add(this.gamePanel = ((ConnexionGUI) root).getJoinPanelFactories().get(game).createGamePanel(this), "wrap");
  75. add(this.participantsPanel = new ParticipantsPanel(), "wrap");
  76. add(new JButton(new DisconnectAction()), "wrap");
  77. add(this.messagePanel = new MessagePanel(), "cell 1 0, spany");
  78. for (final String name : participantNames)
  79. {
  80. final ClientParticipant participant = new ClientParticipant(name);
  81. this.participants.add(participant);
  82. this.participantsPanel.addParticipant(participant);
  83. }
  84. this.server.getTransport().addListener(new STCMessageDispatcher(this));
  85. this.server.getTransport().addListener(new TransportEventLogger(this.messagePanel));
  86. pack();
  87. setSize(800, 600);
  88. setLocationRelativeTo(null);
  89. }
  90. public void onKickNotice(final MsgKickNotice message, final INode sender)
  91. {
  92. }
  93. public void onParticipantConnected(final MsgParticipantConnected message, final INode sender)
  94. {
  95. final ClientParticipant participant = new ClientParticipant(message.getName());
  96. this.participants.add(participant);
  97. JoinGameFrame.this.participantsPanel.addParticipant(participant);
  98. }
  99. public void onChangeNotice(final MsgChangeNotice message, final INode sender)
  100. {
  101. // This is processed by game control
  102. }
  103. public void onParticipationAccepted(final MsgParticipationAccepted message, final INode sender)
  104. {
  105. // This is processed by ConnectFrame.
  106. }
  107. public void onGameStarted(final MsgGameStarted message, final INode sender)
  108. {
  109. dispose();
  110. final IGameControlFactory gameControlFactory = getRoot().getConfiguration().getGameControlFactories().get(getGame());
  111. gameControlFactory.createGameControl(getGame(), getParameters(), getParticipants());
  112. }
  113. // ====================================================================================================
  114. // === JOIN CONTROL IMPLEMENTATION
  115. // ====================================================================================================
  116. public INode getServer()
  117. {
  118. return this.server;
  119. }
  120. public IGame getGame()
  121. {
  122. return this.game;
  123. }
  124. public IRoot getRoot()
  125. {
  126. return this.root;
  127. }
  128. public List<ClientParticipant> getParticipants()
  129. {
  130. return this.participants;
  131. }
  132. public IClientGameParameters getParameters()
  133. {
  134. return this.gamePanel.getGameParameters();
  135. }
  136. public Future<IGameControl> waitForGame()
  137. {
  138. return null;
  139. }
  140. public void disconnect()
  141. {
  142. try
  143. {
  144. JoinGameFrame.this.server.send(CTSMessageCoder.INSTANCE.encode(new MsgDisconnectNotice()));
  145. }
  146. catch (final EncodingException exception)
  147. {
  148. throw new RuntimeException(exception);
  149. }
  150. JoinGameFrame.this.server.getTransport().stop();
  151. getRoot().restart();
  152. }
  153. public void sendMessage(final String message)
  154. {
  155. throw new UnsupportedOperationException();
  156. }
  157. private final class DisconnectAction extends AbstractAction
  158. {
  159. public DisconnectAction()
  160. {
  161. super("Disconnect");
  162. }
  163. public void actionPerformed(final ActionEvent arg0)
  164. {
  165. disconnect();
  166. }
  167. }
  168. }