PageRenderTime 37ms CodeModel.GetById 22ms RepoModel.GetById 1ms app.codeStats 0ms

/.metadata/.plugins/org.eclipse.core.resources/.history/b5/c0b8e6a869a3001e1d98c762f0e1eac2

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