diff --git a/src/chat/NetworkClient.java b/src/chat/NetworkClient.java index 5d6c3bd..6890985 100644 --- a/src/chat/NetworkClient.java +++ b/src/chat/NetworkClient.java @@ -51,79 +51,57 @@ import chat.Message; //} class ReceiveThread extends Thread { - - int port; + Socket socket; JTextArea displayArea; JTextArea knownUsersPanel; List known_users; + List dest_sockets; - ReceiveThread(int in_port, JTextArea in_displayArea, List in_known_users, JTextArea in_knownUsersPanel) + ReceiveThread(Socket in_socket, JTextArea in_displayArea, List in_known_users, JTextArea in_knownUsersPanel, List in_dest_sockets) { - port = in_port; + socket = in_socket; displayArea = in_displayArea; knownUsersPanel = in_knownUsersPanel; known_users = in_known_users; + dest_sockets = in_dest_sockets; } public void run() { + boolean exit = false; try - { - ServerSocket servSocket = new ServerSocket(port); - Socket link; - boolean exit = false; - boolean connected = false; - - while(!connected) - { - try - { - link = servSocket.accept(); - ReceiveThread next = new ReceiveThread(port+1, displayArea, known_users, knownUsersPanel); - next.start(); - - connected = true; - - while(!exit) - { - try - { - System.out.println("Waiting for a message"); - ObjectInputStream in = new ObjectInputStream(link.getInputStream()); - System.out.println("Received a message"); - Message message = (Message) in.readObject(); - if(message.getText() != null) - { - displayArea.append(message.getAuthor() + " : " + message.getText() + "\n"); - } - else - { - displayArea.append(message.getAuthor() + " has left the chat.\n"); - known_users.remove(new User(message.getAuthor())); - knownUsersPanel.setText(""); - knownUsersPanel.append("Online:\n"); - for(User u:known_users) - { - knownUsersPanel.append(" " + u.getName() + " \n"); - } - exit = true; - } - displayArea.setCaretPosition(displayArea.getDocument().getLength()); - } - catch(Exception e) - { - e.printStackTrace(); - } - } - link.close(); - servSocket.close(); - } - catch(SocketTimeoutException e) {} - } - } - catch(IOException e) - { - e.printStackTrace(); - } + { + while(!exit) + { + System.out.println(socket); + System.out.println("Waiting for a message"); + ObjectInputStream in = new ObjectInputStream(socket.getInputStream()); + System.out.println("Received a message"); + Message message = (Message) in.readObject(); + if(message.getText() != null) + { + displayArea.append(message.getAuthor() + " : " + message.getText() + "\n"); + } + else + { + displayArea.append(message.getAuthor() + " has left the chat.\n"); + known_users.remove(new User(message.getAuthor())); + knownUsersPanel.setText(""); + knownUsersPanel.append("Online:\n"); + for(User u:known_users) + { + knownUsersPanel.append(" " + u.getName() + " \n"); + } + exit = true; + } + displayArea.setCaretPosition(displayArea.getDocument().getLength()); + } + + socket.close(); + } + catch(Exception e) + { + e.printStackTrace(); + } } } @@ -193,6 +171,10 @@ class ConnectionListenerThread extends Thread { } if(accepted) { + Socket s = (new ServerSocket(1237+(known_users.size()))).accept(); + ReceiveThread t2 = new ReceiveThread(s, displayArea, known_users, knownUsersPanel, dest_sockets); + dest_sockets.add(s); + known_users.add(new User(username)); Collections.sort(known_users); @@ -218,6 +200,25 @@ class ConnectionListenerThread extends Thread { } } +class ListenerStartThread extends Thread { + + ServerSocket s; + List dest_sockets; + ListenerStartThread(ServerSocket in_s, List in_dest_sockets) + { + s = in_s; + dest_sockets = in_dest_sockets; + } + public void run() + { + try + { + dest_sockets.add(s.accept()); + } + catch(IOException e) {} + } +} + public class NetworkClient { private User user; private List known_users; @@ -291,7 +292,7 @@ public class NetworkClient { for(String u:usernameList) { - nameAvailable = nameAvailable && (!username.equals(u)); + nameAvailable = nameAvailable && (!username.equals(u)); } if(nameAvailable) { @@ -303,7 +304,9 @@ public class NetworkClient { for(String a:addressList) { System.out.println("Connecting to " + a + " on port " + (1237+usernameList.length)); - dest_sockets.add(new Socket(a, 1237+usernameList.length)); + Socket s = new Socket(a, 1237+usernameList.length); + ReceiveThread t2 = new ReceiveThread(s, chatText, known_users, knownUsersPanel, dest_sockets); + dest_sockets.add(s); } Collections.sort(known_users); connected = true; @@ -330,15 +333,16 @@ public class NetworkClient { if(connected) { - ReceiveThread t2 = new ReceiveThread(1237+(known_users.size()), chatText, known_users, knownUsersPanel); - ConnectionListenerThread t3 = new ConnectionListenerThread(known_users, dest_sockets, chatText, knownUsersPanel); - t2.start(); - t3.start(); + (new ConnectionListenerThread(known_users, dest_sockets, chatText, knownUsersPanel)).start(); try { - dest_sockets.add(new Socket("25.67.234.235", 1237+(known_users.size()))); + ServerSocket s1 = new ServerSocket(1237+(known_users.size())); + (new ListenerStartThread(s1, dest_sockets)).start(); + + Socket s2 = new Socket("25.67.234.235", 1237+(known_users.size())); + (new ReceiveThread(s2, chatText, known_users, knownUsersPanel, dest_sockets)).start(); } catch(IOException e) { @@ -373,6 +377,7 @@ public class NetworkClient { { try { + // System.out.println(s); ObjectOutputStream out = new ObjectOutputStream(s.getOutputStream()); out.writeObject(new Message(user.getName(), message)); }