/.metadata/.plugins/org.eclipse.core.resources/.history/b5/c0b8e6a869a3001e1d98c762f0e1eac2
#! | 209 lines | 171 code | 38 blank | 0 comment | 0 complexity | adc300f40bcc80721aeb270ab2052a3a MD5 | raw file
- package info.reflectionsofmind.connexion.platform.gui.join;
-
- import info.reflectionsofmind.connexion.platform.control.ClientParticipant;
- import info.reflectionsofmind.connexion.platform.control.IGameControlFactory;
- import info.reflectionsofmind.connexion.platform.control.IRoot;
- import info.reflectionsofmind.connexion.platform.control.control.IGameControl;
- import info.reflectionsofmind.connexion.platform.control.control.IJoinControl;
- import info.reflectionsofmind.connexion.platform.control.cts.CTSMessageCoder;
- import info.reflectionsofmind.connexion.platform.control.cts.message.MsgDisconnectNotice;
- import info.reflectionsofmind.connexion.platform.control.stc.IServerToClientMessageDispatchTarget;
- import info.reflectionsofmind.connexion.platform.control.stc.STCMessageDispatcher;
- import info.reflectionsofmind.connexion.platform.control.stc.message.MsgChangeNotice;
- import info.reflectionsofmind.connexion.platform.control.stc.message.MsgGameStarted;
- import info.reflectionsofmind.connexion.platform.control.stc.message.MsgKickNotice;
- import info.reflectionsofmind.connexion.platform.control.stc.message.MsgParticipantConnected;
- import info.reflectionsofmind.connexion.platform.control.stc.message.MsgParticipationAccepted;
- import info.reflectionsofmind.connexion.platform.game.IGame;
- import info.reflectionsofmind.connexion.platform.game.client.IClientGameParameters;
- import info.reflectionsofmind.connexion.platform.gui.ConnexionGUI;
- import info.reflectionsofmind.connexion.platform.gui.MessagePanel;
- import info.reflectionsofmind.connexion.platform.gui.TransportEventLogger;
- import info.reflectionsofmind.connexion.transport.ITransport.INode;
- import info.reflectionsofmind.connexion.util.convert.EncodingException;
-
- import java.awt.event.ActionEvent;
- import java.awt.event.WindowAdapter;
- import java.awt.event.WindowEvent;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.concurrent.Callable;
- import java.util.concurrent.Executors;
- import java.util.concurrent.Future;
- import java.util.concurrent.SynchronousQueue;
- import java.util.concurrent.locks.ReentrantLock;
-
- import javax.swing.AbstractAction;
- import javax.swing.JButton;
- import javax.swing.JFrame;
-
- import net.miginfocom.swing.MigLayout;
-
- public class JoinGameFrame extends JFrame implements IServerToClientMessageDispatchTarget, IJoinControl
- {
- private final IGame game;
- private final IRoot root;
- private final INode server;
-
- private MessagePanel messagePanel;
- private ParticipantsPanel participantsPanel;
- private AbstractJoinGamePanel gamePanel;
-
- private final List<ClientParticipant> participants = new ArrayList<ClientParticipant>();
-
- private final Callable<IGameControl> gameWaiter = new Callable<IGameControl>()
- {
- public final SynchronousQueue<IGameControl> queue = new SynchronousQueue<IGameControl>();
-
- public IGameControl call() throws Exception
- {
- }
- };
-
- private final Future<IGameControl> futureGame = Executors.newSingleThreadExecutor().submit(
- new Callable<IGameControl>()
- {
- public IGameControl call() throws Exception
- {
- }
- }
- );
-
- public JoinGameFrame(final IRoot root, final IGame game, final INode server, final List<String> participantNames)
- {
- super("Connexion :: Join game");
-
- this.game = game;
-
- setDefaultCloseOperation(DISPOSE_ON_CLOSE);
- setLayout(new MigLayout("", "[240!, fill][max]", "[][max, fill][]"));
-
- addWindowListener(new WindowAdapter()
- {
- @Override
- public void windowClosed(final WindowEvent e)
- {
- disconnect();
- }
- });
-
- this.root = root;
- this.server = server;
-
- add(this.gamePanel = ((ConnexionGUI) root).getJoinPanelFactories().get(game).createGamePanel(this), "wrap");
- add(this.participantsPanel = new ParticipantsPanel(), "wrap");
- add(new JButton(new DisconnectAction()), "wrap");
- add(this.messagePanel = new MessagePanel(), "cell 1 0, spany");
-
- for (final String name : participantNames)
- {
- final ClientParticipant participant = new ClientParticipant(name);
- this.participants.add(participant);
- this.participantsPanel.addParticipant(participant);
- }
-
- this.server.getTransport().addListener(new STCMessageDispatcher(this));
- this.server.getTransport().addListener(new TransportEventLogger(this.messagePanel));
-
- pack();
- setSize(800, 600);
- setLocationRelativeTo(null);
- }
-
- public void onKickNotice(final MsgKickNotice message, final INode sender)
- {
- }
-
- public void onParticipantConnected(final MsgParticipantConnected message, final INode sender)
- {
- final ClientParticipant participant = new ClientParticipant(message.getName());
- this.participants.add(participant);
- JoinGameFrame.this.participantsPanel.addParticipant(participant);
- }
-
- public void onChangeNotice(final MsgChangeNotice message, final INode sender)
- {
- // This is processed by game control
- }
-
- public void onParticipationAccepted(final MsgParticipationAccepted message, final INode sender)
- {
- // This is processed by ConnectFrame.
- }
-
- public void onGameStarted(final MsgGameStarted message, final INode sender)
- {
- dispose();
-
- final IGameControlFactory gameControlFactory = getRoot().getConfiguration().getGameControlFactories().get(getGame());
- gameControlFactory.createGameControl(getGame(), getParameters(), getParticipants());
- }
-
- // ====================================================================================================
- // === JOIN CONTROL IMPLEMENTATION
- // ====================================================================================================
-
- public INode getServer()
- {
- return this.server;
- }
-
- public IGame getGame()
- {
- return this.game;
- }
-
- public IRoot getRoot()
- {
- return this.root;
- }
-
- public List<ClientParticipant> getParticipants()
- {
- return this.participants;
- }
-
- public IClientGameParameters getParameters()
- {
- return this.gamePanel.getGameParameters();
- }
-
- public Future<IGameControl> waitForGame()
- {
- return null;
- }
-
- public void disconnect()
- {
- try
- {
- JoinGameFrame.this.server.send(CTSMessageCoder.INSTANCE.encode(new MsgDisconnectNotice()));
- }
- catch (final EncodingException exception)
- {
- throw new RuntimeException(exception);
- }
-
- JoinGameFrame.this.server.getTransport().stop();
-
- getRoot().restart();
- }
-
- public void sendMessage(final String message)
- {
- throw new UnsupportedOperationException();
- }
-
- private final class DisconnectAction extends AbstractAction
- {
- public DisconnectAction()
- {
- super("Disconnect");
- }
-
- public void actionPerformed(final ActionEvent arg0)
- {
- disconnect();
- }
- }
- }