package player;
import java.awt.Cursor;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.jdesktop.application.Action;
import org.jdesktop.application.ResourceMap;
import org.jdesktop.application.SingleFrameApplication;
import org.jdesktop.application.FrameView;
import org.jdesktop.application.TaskMonitor;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Timer;
import javax.swing.Icon;
import javax.swing.JDialog;
import javax.swing.JFrame;
import java.io.*;
import java.net.*;
import java.sql.PreparedStatement;
import java.util.*;
import javax.swing.JButton;
import javax.swing.JTable;
import javax.swing.JTextArea;
/**
* The application's main frame.
*/
public class PlayerView extends FrameView {
public static Vector<robots> playerList = new Vector<robots>();
public void setPlayerList(Vector<robots> pList) {
playerList = pList;
}
public Vector<robots> getPlayerList() {
return playerList;
}
int refereePort;
String refereeIP;
public static String playerName;
public static boolean gameStart = false;
public PlayerView(SingleFrameApplication app) {
super(app);
initComponents();
// status bar initialization - message timeout, idle icon and busy animation, etc
ResourceMap resourceMap = getResourceMap();
int messageTimeout = resourceMap.getInteger("StatusBar.messageTimeout");
messageTimer = new Timer(messageTimeout, new ActionListener() {
public void actionPerformed(ActionEvent e) {
statusMessageLabel.setText("");
}
});
messageTimer.setRepeats(false);
int busyAnimationRate = resourceMap.getInteger("StatusBar.busyAnimationRate");
for (int i = 0; i < busyIcons.length; i++) {
busyIcons[i] = resourceMap.getIcon("StatusBar.busyIcons[" + i + "]");
}
busyIconTimer = new Timer(busyAnimationRate, new ActionListener() {
public void actionPerformed(ActionEvent e) {
busyIconIndex = (busyIconIndex + 1) % busyIcons.length;
statusAnimationLabel.setIcon(busyIcons[busyIconIndex]);
}
});
idleIcon = resourceMap.getIcon("StatusBar.idleIcon");
statusAnimationLabel.setIcon(idleIcon);
progressBar.setVisible(false);
// connecting action tasks to status bar via TaskMonitor
TaskMonitor taskMonitor = new TaskMonitor(getApplication().getContext());
taskMonitor.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
public void propertyChange(java.beans.PropertyChangeEvent evt) {
String propertyName = evt.getPropertyName();
if ("started".equals(propertyName)) {
if (!busyIconTimer.isRunning()) {
statusAnimationLabel.setIcon(busyIcons[0]);
busyIconIndex = 0;
busyIconTimer.start();
}
progressBar.setVisible(true);
progressBar.setIndeterminate(true);
} else if ("done".equals(propertyName)) {
busyIconTimer.stop();
statusAnimationLabel.setIcon(idleIcon);
progressBar.setVisible(false);
progressBar.setValue(0);
} else if ("message".equals(propertyName)) {
String text = (String)(evt.getNewValue());
statusMessageLabel.setText((text == null) ? "" : text);
messageTimer.restart();
} else if ("progress".equals(propertyName)) {
int value = (Integer)(evt.getNewValue());
progressBar.setVisible(true);
progressBar.setIndeterminate(false);
progressBar.setValue(value);
}
}
});
}
@Action
public void showAboutBox() {
if (aboutBox == null) {
JFrame mainFrame = PlayerApp.getApplication().getMainFrame();
aboutBox = new PlayerAboutBox(mainFrame);
aboutBox.setLocationRelativeTo(mainFrame);
}
PlayerApp.getApplication().show(aboutBox);
}
private void buttonRegisterActionPerformed(java.awt.event.ActionEvent evt) {
refereeIP = ipField.getText();
refereePort = Integer.parseInt(portField.getText());
playerName = nameField.getText();
textArea.append("Registering" + "\n" );
textArea.setCaretPosition(textArea.getDocument().getLength());
Cursor hourglass = new Cursor(Cursor.WAIT_CURSOR);
mainPanel.setCursor(hourglass);
buttonRegister.setEnabled(false);
//Register
boolean registerDone = true;
try {
register.sendRegister(refereeIP, refereePort, playerName);
} catch (Exception ex) {
//registerDone = false;
String error = "Error: Registering failed, check IP address and port are correct";
textArea.append(error + "\n" );
textArea.setCaretPosition(textArea.getDocument().getLength());
buttonRegister.setEnabled(true);
}
Cursor normalCursor = new Cursor(Cursor.DEFAULT_CURSOR);
mainPanel.setCursor(normalCursor);
if (registerDone){
buttonRegister.setVisible(false);
//Player Table Test
//playerTable.setValueAt("In", 1, 0);
//playerTable.setValueAt("Twice", 0, 0);
//Remove button & labels
//Start new thread for sending broadcast
//Start new thread to listen to broadcast
//Start progress bar
jProgressBar.setIndeterminate(true);
BroadcastListen();
}
}
private void jProgressBarStateChanged(javax.swing.event.ChangeEvent evt) {
// TODO add your handling code here:
}
public void BroadcastListen(){
JTextArea jTA = textArea;
broadcast broadcastStart = new broadcast(jTA);
Thread bcThread = new Thread(broadcastStart);
bcThread.start();
JTable jT = playerTable;
discover listenStart = new discover(textArea, playerTable);
Thread lThread = new Thread(listenStart);
lThread.start();
}
public void goGame(){
System.out.println("It's working");
}
// Variables declaration - do not modify
private javax.swing.JButton buttonRegister;
private javax.swing.JTextField ipField;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JProgressBar jProgressBar;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JPanel mainPanel;
private javax.swing.JMenuBar menuBar;
private javax.swing.JTextField nameField;
private javax.swing.JTable playerTable;
private javax.swing.JTextField portField;
private javax.swing.JProgressBar progressBar;
private javax.swing.JLabel statusAnimationLabel;
private javax.swing.JLabel statusMessageLabel;
private javax.swing.JPanel statusPanel;
private javax.swing.JTextArea textArea;
// End of variables declaration
private final Timer messageTimer;
private final Timer busyIconTimer;
private final Icon idleIcon;
private final Icon[] busyIcons = new Icon[15];
private int busyIconIndex = 0;
private JDialog aboutBox;
}