package grafikchat.controller; import grafikchat.model.ChatModel; import grafikchat.ohmlogger.OhmLogger; import grafikchat.view.ChatView; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.logging.Logger; import javax.swing.JOptionPane; /** * Handle events emitted from connect button * * @author marian */ public class ConnectController implements ActionListener { private ChatModel model; private ChatView view; private static Logger logger = OhmLogger.getLogger(); /** * Constructor, initialize variables * @param model ChatModel * @param view ChatView */ public ConnectController(ChatModel model, ChatView view) { this.model = model; this.view = view; } /** * Register events for connect button and radio button to select between server and client mode. */ public void registerEvents() { this.view.getBtConnect().addActionListener(this); this.view.getRbClient().addActionListener(this); this.view.getRbServer().addActionListener(this); } /** * Event handler to take care of registered events * @param ae occurred event */ @Override public void actionPerformed(ActionEvent ae) { Object object = ae.getSource(); if (object == view.getBtConnect()) { int port = -1; try { port = Integer.parseInt(view.getTfPort().getText()); } catch (NumberFormatException e) { JOptionPane.showMessageDialog(view, "Port entspricht keiner Zahl!"); logger.severe(e.toString()); return; } if (view.getRbClient().isSelected() && (validIP(view.getTfIP().getText()) == false)) { JOptionPane.showMessageDialog(view, "Ungültige IP-Adresse!"); logger.severe("IP-Adresse ungültig"); return; } model.connectToPeer(view.getRbServer().isSelected(), view.getTfIP().getText(), port); view.getRbClient().setEnabled(false); view.getRbServer().setEnabled(false); view.getTfIP().setEnabled(false); view.getTfPort().setEnabled(false); } else { view.getTfIP().setEnabled(view.getRbClient().isSelected()); } } /** * Primitive check if the ip is valid (only IPv4) * @param ip IP to check * @return true if valid, false otherwise */ private boolean validIP (String ip) { try { if ( ip == null || ip.isEmpty() ) { return false; } String[] parts = ip.split( "\\." ); if ( parts.length != 4 ) { return false; } for ( String s : parts ) { int i = Integer.parseInt( s ); if ( (i < 0) || (i > 255) ) { return false; } } if ( ip.endsWith(".") ) { return false; } return true; } catch (NumberFormatException e) { logger.severe(e.toString()); return false; } } }