public void update(Observable source, Object object) { if (source instanceof Users) { if (!this.isDisabled()) { try { Operations.sendUserNamesList(users.getUserNames(), out); } catch (IOException io) { logger.error("IO Exception", io); } } } if (source instanceof Messages) { try { Operations.sendMessage((MessageType) object, out); } catch (IOException io) { if (out != null) { try { out.close(); } catch (Exception ioe) { logger.error("Failed to close the output stream", ioe); } } logger.error("Impossible to send messages", io); } } }
private void prepareClient() throws IOException { logger.info("Waiting for client's name"); Message mes = Operations.receive(in); setClientName((String) mes.getValue()); logger.info("Username for " + s.getInetAddress() + " received: " + userName); users.add(this); logger.info("User " + getClientName() + " has been added to the userlist."); messages = new Messages(); logger.info("Message list created"); if (!history.containsKey(userName)) { history.put(userName, messages); } else { messages = history.get(userName); } messages.addObserver(this); logger.info("Message list assigned to history"); logger.info("Sending the list of users."); Operations.sendUserNamesList(users.getUserNames(), out); logger.info("Userlist has been sent"); }
public ClientThread(Socket socket, History history, Users users) throws IOException { logger.warn("New client is trying to connect to the chat..."); logger.info("Assigning a socket to a new client..."); this.s = socket; logger.info("Getting the input stream..."); in = new DataInputStream(s.getInputStream()); logger.info("Getting the output stream..."); out = new DataOutputStream(s.getOutputStream()); this.users = users; users.addObserver(this); this.history = history; start(); logger.warn("Connection with new user is established."); }
public void run() { try { prepareClient(); logger.info("Starting normal session with " + getClientName()); while (true) { this.receive(); } } catch (IOException ioe) { logger.warn("Client " + this + " has been disconnected."); this.setDisabled(true); users.remove(this); } finally { try { if (s != null && !s.isClosed()) { s.close(); logger.warn("Socket with " + this + " has been closed."); } } catch (IOException ioe) { logger.error("Socket has not been closed.", ioe); } } }