/.metadata/.plugins/org.eclipse.core.resources/.history/7d/808eadd869a3001e1d98c762f0e1eac2

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