/** * Constructor. Initializes the controller, but does not log on to the network. * * @param ui The active user interface object. * @param settings The settings to use. */ public Controller(final UserInterface ui, final Settings settings) { Validate.notNull(ui, "User interface can not be null"); Validate.notNull(settings, "Settings can not be null"); this.ui = ui; this.settings = settings; Runtime.getRuntime() .addShutdownHook( new Thread("ControllerShutdownHook") { @Override public void run() { logOff(false); shutdown(); } }); me = settings.getMe(); userListController = new UserListController(settings); chatState = new ChatState(); tList = new TransferList(); wList = new WaitingList(); idleThread = new IdleThread(this, ui, settings); networkService = new NetworkService(settings); final MessageResponder msgResponder = new DefaultMessageResponder(this, ui, settings); final PrivateMessageResponder privmsgResponder = new DefaultPrivateMessageResponder(this, ui, settings); final MessageParser msgParser = new MessageParser(msgResponder, settings); networkService.registerMessageReceiverListener(msgParser); final PrivateMessageParser privmsgParser = new PrivateMessageParser(privmsgResponder, settings); networkService.registerUDPReceiverListener(privmsgParser); messages = new Messages(networkService, settings); networkService.registerNetworkConnectionListener(this); msgController = ui.getMessageController(); new DayTimer(ui); idleThread.start(); msgController.showSystemMessage( "Welcome to " + Constants.APP_NAME + " v" + Constants.APP_VERSION + "!"); final String date = Tools.dateToString(null, "EEEE, d MMMM yyyy"); msgController.showSystemMessage("Today is " + date); }
/** * Logs this client off the network. <br> * <br> * <strong>Note:</strong> removeUsers should not be true when called from a ShutdownHook, as that * will lead to a deadlock. See http://bugs.sun.com/bugdatabase/view_bug.do;?bug_id=6261550 for * details. * * @param removeUsers Set to true to remove users from the user list. */ public void logOff(final boolean removeUsers) { messages.sendLogoffMessage(); chatState.setLoggedOn(false); chatState.setLogonCompleted(false); networkService.disconnect(); getTopic().resetTopic(); if (removeUsers) { removeAllUsers(); } me.reset(); }
public void registerNetworkConnectionListener(final NetworkConnectionListener listener) { networkService.registerNetworkConnectionListener(listener); }
/** * Creates an instance of a JMX bean loader, and returns it. * * @return A JMX bean loader. */ public JMXBeanLoader createJMXBeanLoader() { return new JMXBeanLoader(this, networkService.getConnectionWorker(), settings); }
/** Checks the state of the network, and tries to keep the best possible network connection up. */ public void checkNetwork() { networkService.checkNetwork(); }
/** * Returns if the client is logged on to the chat and connected to the network. * * @return True if the client is connected. */ public boolean isConnected() { return networkService.isNetworkUp() && isLoggedOn(); }
/** Logs this client onto the network. */ public void logOn() { if (!networkService.isConnectionWorkerAlive()) { networkService.connect(); } }