PageRenderTime 37ms CodeModel.GetById 19ms app.highlight 16ms RepoModel.GetById 0ms app.codeStats 0ms

/.metadata/.plugins/org.eclipse.core.resources/.history/ef/10e88af968a3001e1d98c762f0e1eac2

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