diff --git a/src/chat/ConnectionListenerThread.java b/src/chat/ConnectionListenerThread.java index ee246bd..32670e4 100644 --- a/src/chat/ConnectionListenerThread.java +++ b/src/chat/ConnectionListenerThread.java @@ -62,43 +62,36 @@ public class ConnectionListenerThread extends Thread { requestSocket.receive(request); username = new String(request.getData(), 0, request.getLength()); - if(username.charAt(0) == '+') + + InetAddress clientAddress= request.getAddress(); + System.out.println("Received a request from " + username + "@" + clientAddress.getHostAddress()); + + response = ""; + for(User u:known_users) { - username = username.substring(1); - outdoor = true; + response += u.getName() + " "; } - else + response = response.trim(); + response += ";"; + for(User u:known_outdoor_users) { - outdoor = false; - InetAddress clientAddress= request.getAddress(); - System.out.println("Received a request from " + username + "@" + clientAddress.getHostAddress()); - - response = ""; - for(User u:known_users) - { - response += u.getName() + " "; - } - response = response.trim(); - response += ";"; - for(User u:known_outdoor_users) - { - response += u.getName() + " "; - } - response = response.trim(); - response += ";"; - for(Socket s:dest_sockets) - { - response += s.getInetAddress().getHostAddress() + " "; - } - response = response.trim(); - - response += ";" + (portNumber+1); - - System.out.println("Response :" + response); - responseBytes = response.getBytes(); - responsePacket = new DatagramPacket(responseBytes, responseBytes.length, clientAddress, 1337); - responseSocket.send(responsePacket); + response += u.getName() + " "; } + response = response.trim(); + response += ";"; + for(Socket s:dest_sockets) + { + response += s.getInetAddress().getHostAddress() + " "; + } + response = response.trim(); + + response += ";" + (portNumber+1); + + System.out.println("Response :" + response); + responseBytes = response.getBytes(); + responsePacket = new DatagramPacket(responseBytes, responseBytes.length, clientAddress, 1337); + responseSocket.send(responsePacket); + accepted = true; for(User a:known_users) { @@ -110,18 +103,10 @@ public class ConnectionListenerThread extends Thread { } if(accepted) { - if(outdoor) - { - known_outdoor_users.add(new User(username)); - Collections.sort(known_outdoor_users); - } - else - { - portNumber++; - Socket s = (new ServerSocket(portNumber)).accept(); - (new ReceiveThread(user, s, displayArea, known_users, known_outdoor_users, knownUsersPanel, dest_sockets, outdoor_dest_sockets, false)).start(); - dest_sockets.add(s); - } + portNumber++; + Socket s = (new ServerSocket(portNumber)).accept(); + (new ReceiveThread(user, s, displayArea, known_users, known_outdoor_users, knownUsersPanel, dest_sockets, outdoor_dest_sockets, false)).start(); + dest_sockets.add(s); } } catch(SocketTimeoutException e) {} diff --git a/src/chat/OutdoorListenerThread.java b/src/chat/OutdoorListenerThread.java index 6a1bded..31023cc 100644 --- a/src/chat/OutdoorListenerThread.java +++ b/src/chat/OutdoorListenerThread.java @@ -21,7 +21,7 @@ class OutdoorListenerThread extends Thread { List known_outdoor_users; List dest_sockets; List outdoor_dest_sockets; - int portNumber; + int outdoorPortNumber; OutdoorListenerThread(User in_user, List in_known_users, List in_known_outdoor_users, List in_dest_sockets, List in_outdoor_dest_sockets, JTextArea in_displayArea, JTextArea in_knownUsersPanel) @@ -33,21 +33,16 @@ OutdoorListenerThread(User in_user, List in_known_users, List in_kn outdoor_dest_sockets = in_outdoor_dest_sockets; displayArea = in_displayArea; knownUsersPanel = in_knownUsersPanel; - portNumber = 2344; + outdoorPortNumber = 2344; } public void run() { boolean exit = false; boolean accepted = true; - String notification; String username; String response = ""; - byte[] buffer = new byte[100]; - DatagramPacket notifPacket = new DatagramPacket(buffer, buffer.length); - DatagramSocket notifSocket; - byte[] notifBytes; try { @@ -75,7 +70,7 @@ OutdoorListenerThread(User in_user, List in_known_users, List in_kn response += u.getName() + " "; } response = response.trim(); - response += ";" + (portNumber+1); + response += ";" + (outdoorPortNumber+1); out.println(response); @@ -90,14 +85,8 @@ OutdoorListenerThread(User in_user, List in_known_users, List in_kn } if(accepted) { - notification = "+" + username; - notifBytes = notification.getBytes(); - notifSocket = new DatagramSocket(); - notifPacket = new DatagramPacket(notifBytes, notifBytes.length, InetAddress.getByName("192.168.1.255"), 1234); - notifSocket.send(notifPacket); - - portNumber++; - Socket s = (new ServerSocket(portNumber)).accept(); + outdoorPortNumber++; + Socket s = (new ServerSocket(outdoorPortNumber)).accept(); (new ReceiveThread(user, s, displayArea, known_users, known_outdoor_users, knownUsersPanel, dest_sockets, outdoor_dest_sockets, true)).start(); outdoor_dest_sockets.add(s); } diff --git a/src/chat/ReceiveThread.java b/src/chat/ReceiveThread.java index 0c51c8a..899b795 100644 --- a/src/chat/ReceiveThread.java +++ b/src/chat/ReceiveThread.java @@ -1,6 +1,7 @@ package chat; import java.io.EOFException; +import java.net.SocketException; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; @@ -90,6 +91,8 @@ class ReceiveThread extends Thread { if(!dn.isRedirected() && !dn.getAuthor().equals(user)) { + exit = true; + socket.close(); if(!isOutdoor) dest_sockets.remove(socket); @@ -136,6 +139,13 @@ class ReceiveThread extends Thread { } } catch(EOFException e) {} + catch(SocketException e) + { + /* if(!isOutdoor) + dest_sockets.remove(socket); + else + outdoor_dest_sockets.remove(socket);*/ + } catch(Exception e) { e.printStackTrace();