import AIClientFacade.Interface.AIClientApplicationCoreFactory; import AIClientFacade.Interface.IAIClientFacade; import AIRunner.Interface.AIRunnerEventType; import AIRunner.Interface.IAIRunnerEventHandler; import AgentSystemPluginAPI.Contract.TAgentSystemDescription; import EnvironmentPluginAPI.Exceptions.TechnicalException; import NetworkAdapter.Interface.Exceptions.HostUnreachableException; import PluginLoader.Interface.Exceptions.PluginNotReadableException; import ZeroTypes.Settings.SettingException; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class AIClientMain { private JPanel panel1; private JTable agentTable; private JButton connectButton; private JTextField serverPortTextField; private JTextField serverIPTextField; private JLabel connectionLabel; private JProgressBar progressBar1; private IAIClientFacade facade; private AgentTableModel agentTableModel; private static JFrame frame; public static void main(String[] args) { try { // UIManager.setLookAndFeel("com.seaglasslookandfeel.SeaGlassLookAndFeel"); } catch (Exception e) { e.printStackTrace(); } frame = new JFrame("AIClientMain"); frame.setContentPane(new AIClientMain().panel1); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack(); frame.setVisible(true); } public AIClientMain() { //retrieve AppCore facade = AIClientApplicationCoreFactory.getProductionApplicationCore(); /** * register an anonymous class as listener to network events, change GUI accordingly */ facade.addListener( new IAIRunnerEventHandler() { @Override public void onAIRunnerEvent(final AIRunnerEventType eventType) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { if(eventType == AIRunnerEventType.CycleEnded){ progressBar1.setValue(progressBar1.getValue()+1); } if(eventType == AIRunnerEventType.SessionEnded){ } if(eventType == AIRunnerEventType.Connected){ connectionLabel.setForeground(Color.green); connectionLabel.setText("Connected"); connectButton.setEnabled(false); } if(eventType == AIRunnerEventType.ConnectionLost || eventType == AIRunnerEventType.Disconnected){ connectionLabel.setForeground(Color.red); connectionLabel.setText("Not Connected"); connectButton.setEnabled(true); } } }); } @Override public void onSessionStart(int games) { progressBar1.setMinimum(0); progressBar1.setMaximum(games); progressBar1.setValue(0); } @Override public void onException(Exception exception) { JOptionPane.showMessageDialog(frame, exception.toString(), "Whoops, an Error occurred", JOptionPane.ERROR_MESSAGE); } }); // Create new TableModel and fill it with available Agentsystems agentTableModel = new AgentTableModel(); try { agentTableModel.addAgents(facade.getAvailableAgentSystems()); } catch (TechnicalException e) { e.printStackTrace(); } catch (PluginNotReadableException e) { e.printStackTrace(); } catch (SettingException e) { e.printStackTrace(); } agentTable.setModel(agentTableModel); /** * Connects the selected AgentSystem with the provided server */ connectButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if(agentTable.getSelectedRow() == -1){ JOptionPane.showMessageDialog(frame, "Please select an Agentsystem. If you don't have one...: Good luck!", "No Agentsystem selected", JOptionPane.ERROR_MESSAGE); } else if(serverIPTextField.getText().isEmpty()) { JOptionPane.showMessageDialog(frame, "Please provide a Server-IP", "No Server-IP entered", JOptionPane.ERROR_MESSAGE); } else if(serverPortTextField.getText().isEmpty()){ JOptionPane.showMessageDialog(frame, "Please provide a Server-Port", "No Server-Port entered", JOptionPane.ERROR_MESSAGE); } else { try { TAgentSystemDescription agentSystem = agentTableModel.getSelectedAgent(agentTable.getSelectedRow()); facade.connectToServer(agentSystem, serverIPTextField.getText(), Integer.parseInt(serverPortTextField.getText())); } catch (HostUnreachableException e1) { e1.printStackTrace(); } catch (TechnicalException e1) { e1.printStackTrace(); } catch (PluginNotReadableException e1) { e1.printStackTrace(); } } } }); } }