package net;
import gui.Driver;
import gui.NetLoadingPanel;
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import utility.GuiUtility;
public final class NetworkPlayManager
{
private NetworkPlayManager()
{
}
public static NetworkPlayManager getInstance()
{
if (sInstance == null)
sInstance = new NetworkPlayManager();
return sInstance;
}
public boolean networkPlayIsAvailable()
{
// try
// {
// return InetAddress.getLocalHost().getHostName().contains("cslab");
// }
// catch (Exception e)
// {
// e.printStackTrace();
// }
// TODO: This is only false because we don't have network play right now
return false;
}
public ActionListener createNetworkPlayActionListener()
{
return new ActionListener()
{
@Override
public void actionPerformed(ActionEvent event)
{
final JFrame popupFrame = new JFrame(Messages.getString("NetworkPlayManager.newGame")); //$NON-NLS-1$
popupFrame.setLayout(new FlowLayout());
popupFrame.setSize(350, 150);
popupFrame.setResizable(false);
popupFrame.setLocationRelativeTo(Driver.getInstance());
JPanel optionsPanel = new JPanel();
final JLabel hostOrConnectLabel = new JLabel(Messages.getString("NetworkPlayManager.hostOrConnect")); //$NON-NLS-1$
final JButton clientButton = new JButton(Messages.getString("NetworkPlayManager.connect")); //$NON-NLS-1$
clientButton.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent event)
{
final JFrame poppedFrame = new JFrame(Messages.getString("NetworkPlayManager.newGame")); //$NON-NLS-1$
poppedFrame.setLayout(new GridBagLayout());
poppedFrame.setSize(370, 150);
poppedFrame.setResizable(false);
poppedFrame.setLocationRelativeTo(Driver.getInstance());
GridBagConstraints netGameConstraints = new GridBagConstraints();
final JLabel connectToLabel = new JLabel(Messages.getString("NetworkPlayManager.whichComputer")); //$NON-NLS-1$
final JTextField connectToField = new JTextField("", 2); //$NON-NLS-1$
final JButton nextButton = new JButton(Messages.getString("NetworkPlayManager.next")); //$NON-NLS-1$
nextButton.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent event)
{
if (connectToField.getText().equals("")) //$NON-NLS-1$
{
JOptionPane.showMessageDialog(
Driver.getInstance(),
Messages.getString("NetworkPlayManager.enterNumber"), Messages.getString("NetworkPlayManager.numberNeeded"), //$NON-NLS-1$ //$NON-NLS-2$
JOptionPane.PLAIN_MESSAGE);
return;
}
else if (connectToField.getText().length() < 2)
{
try
{
int hostNumber = Integer.parseInt(connectToField.getText());
if (hostNumber > 25 || hostNumber < 1)
throw new Exception();
mHostName = "cslab0" + hostNumber; //$NON-NLS-1$
}
catch (Exception e)
{
JOptionPane.showMessageDialog(Driver.getInstance(),
Messages.getString("NetworkPlayManager.enterNumberBetween"), //$NON-NLS-1$
Messages.getString("NetworkPlayManager.numberNeeded"), JOptionPane.PLAIN_MESSAGE); //$NON-NLS-1$
return;
}
}
else
{
try
{
int hostNumber = Integer.parseInt(connectToField.getText());
if (hostNumber > 25 || hostNumber < 1)
throw new Exception();
mHostName = "cslab" + hostNumber; //$NON-NLS-1$
}
catch (Exception e)
{
JOptionPane.showMessageDialog(Driver.getInstance(),
Messages.getString("NetworkPlayManager.enterNumberBetween"), //$NON-NLS-1$
Messages.getString("NetworkPlayManager.numberNeeded"), JOptionPane.PLAIN_MESSAGE); //$NON-NLS-1$
return;
}
}
// NewGameMenu.mIsCancelled = false;
try
{
Thread clientThread = new Thread(new Runnable()
{
@Override
public void run()
{
try
{
new NetworkClient().join(mHostName);
}
catch (Exception e)
{
e.printStackTrace();
}
}
});
clientThread.start();
Driver.getInstance().pushPanel(new NetLoadingPanel());
}
catch (Exception e)
{
e.printStackTrace();
}
poppedFrame.dispose();
popupFrame.dispose();
}
});
final JButton cancelButton = new JButton(Messages.getString("NetworkPlayManager.cancel")); //$NON-NLS-1$
GuiUtility.setupDoneButton(cancelButton, popupFrame);
JPanel topLevelPanel = new JPanel();
topLevelPanel.setLayout(new GridBagLayout());
netGameConstraints.gridx = 0;
netGameConstraints.gridy = 0;
netGameConstraints.gridwidth = 2;
netGameConstraints.insets = new Insets(3, 3, 3, 3);
poppedFrame.add(connectToLabel, netGameConstraints);
netGameConstraints.gridx = 0;
netGameConstraints.gridy = 1;
netGameConstraints.gridwidth = 1;
topLevelPanel.add(new JLabel("cslab: "), netGameConstraints); //$NON-NLS-1$
netGameConstraints.gridx = 1;
netGameConstraints.gridy = 1;
netGameConstraints.gridwidth = 1;
topLevelPanel.add(connectToField, netGameConstraints);
netGameConstraints.gridx = 0;
netGameConstraints.gridy = 2;
netGameConstraints.gridwidth = 1;
topLevelPanel.add(nextButton, netGameConstraints);
netGameConstraints.gridx = 1;
netGameConstraints.gridy = 2;
netGameConstraints.gridwidth = 1;
topLevelPanel.add(cancelButton, netGameConstraints);
netGameConstraints.gridx = 0;
netGameConstraints.gridy = 1;
netGameConstraints.gridwidth = 2;
poppedFrame.add(topLevelPanel, netGameConstraints);
poppedFrame.setVisible(true);
}
});
final JButton hostButton = new JButton(Messages.getString("NetworkPlayManager.host")); //$NON-NLS-1$
hostButton.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent event)
{
// TODO: Need to do something here...
// here's what we used to do in
// NewGameMenu.createNewGamePopup
// if (isNetworkPlay)
// {
// List<String> filteredList = Lists.newArrayList();
// for (String variant : variantTypes)
// {
// Game game = Builder.newGame(variant);
// if (game.getWhiteRules().rulesAreNetworkable() &&
// game.getBlackRules().rulesAreNetworkable())
// filteredList.add(variant);
// }
// variantTypes = new String[filteredList.size()];
// int i = 0;
// for (String variantName : filteredList)
// variantTypes[i++] = variantName;
// }
// Game gameToPlay = Builder.newGame((String)
// dropdown.getSelectedItem());
// gameToPlay.setTimers(whiteTimer, blackTimer);
// final PlayNetGame game;
// // TODO: this if statement can't be right...
// if (mHostName.equals(event.toString()))
// {
// try
// {
// game = new PlayNetGame(gameToPlay, false, true);
// }
// catch (Exception e)
// {
// return;
// }
// }
// else
// {
// try
// {
// game = new PlayNetGame(gameToPlay, false, false);
// }
// catch (Exception e)
// {
// return;
// }
// }
// try
// {
// NewGameMenu.mIsCancelled = false;
// Thread host = new Thread(new Runnable()
// {
// @Override
// public void run()
// {
// try
// {
// new NetworkServer().host(game);
// }
// catch (Exception e)
// {
// e.printStackTrace();
// }
// }
// });
// Driver.getInstance().setPanel(new NetLoading());
// host.start();
// }
// catch (Exception e)
// {
// System.out.println("Host");
// e.printStackTrace();
// }
popupFrame.dispose();
}
});
optionsPanel.add(hostOrConnectLabel);
popupFrame.add(optionsPanel);
popupFrame.add(hostButton);
popupFrame.add(clientButton);
popupFrame.setVisible(true);
}
};
}
private static NetworkPlayManager sInstance;
private String mHostName = ""; //$NON-NLS-1$
}