Compare commits
2 commits
38ee3f108c
...
9d55a5700e
Author | SHA1 | Date | |
---|---|---|---|
9d55a5700e | |||
b03bb2a335 |
5 changed files with 50 additions and 65 deletions
BIN
Projet.jar
BIN
Projet.jar
Binary file not shown.
|
@ -62,43 +62,36 @@ public class ConnectionListenerThread extends Thread {
|
||||||
requestSocket.receive(request);
|
requestSocket.receive(request);
|
||||||
username = new String(request.getData(), 0, request.getLength());
|
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);
|
response += u.getName() + " ";
|
||||||
outdoor = true;
|
|
||||||
}
|
}
|
||||||
else
|
response = response.trim();
|
||||||
|
response += ";";
|
||||||
|
for(User u:known_outdoor_users)
|
||||||
{
|
{
|
||||||
outdoor = false;
|
response += u.getName() + " ";
|
||||||
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 = 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;
|
accepted = true;
|
||||||
for(User a:known_users)
|
for(User a:known_users)
|
||||||
{
|
{
|
||||||
|
@ -110,18 +103,10 @@ public class ConnectionListenerThread extends Thread {
|
||||||
}
|
}
|
||||||
if(accepted)
|
if(accepted)
|
||||||
{
|
{
|
||||||
if(outdoor)
|
portNumber++;
|
||||||
{
|
Socket s = (new ServerSocket(portNumber)).accept();
|
||||||
known_outdoor_users.add(new User(username));
|
(new ReceiveThread(user, s, displayArea, known_users, known_outdoor_users, knownUsersPanel, dest_sockets, outdoor_dest_sockets, false)).start();
|
||||||
Collections.sort(known_outdoor_users);
|
dest_sockets.add(s);
|
||||||
}
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch(SocketTimeoutException e) {}
|
catch(SocketTimeoutException e) {}
|
||||||
|
|
|
@ -203,21 +203,23 @@ public class NetworkClient {
|
||||||
|
|
||||||
void send (Notification notif)
|
void send (Notification notif)
|
||||||
{
|
{
|
||||||
|
System.out.println("Indoor users:");
|
||||||
for(Socket s:dest_sockets)
|
for(Socket s:dest_sockets)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
//System.out.println(s.getInetAddress().getHostAddress() + ": local port " + s.getLocalPort() + ", remote port " + s.getPort());
|
System.out.println(s.getInetAddress().getHostAddress() + ": local port " + s.getLocalPort() + ", remote port " + s.getPort());
|
||||||
ObjectOutputStream out = new ObjectOutputStream(s.getOutputStream());
|
ObjectOutputStream out = new ObjectOutputStream(s.getOutputStream());
|
||||||
out.writeObject(notif);
|
out.writeObject(notif);
|
||||||
}
|
}
|
||||||
catch(IOException e){}
|
catch(IOException e){}
|
||||||
}
|
}
|
||||||
|
System.out.println("Outdoor users:");
|
||||||
for(Socket s:outdoor_dest_sockets)
|
for(Socket s:outdoor_dest_sockets)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
//System.out.println(s.getInetAddress().getHostAddress() + ": local port " + s.getLocalPort() + ", remote port " + s.getPort());
|
System.out.println(s.getInetAddress().getHostAddress() + ": local port " + s.getLocalPort() + ", remote port " + s.getPort());
|
||||||
ObjectOutputStream out = new ObjectOutputStream(s.getOutputStream());
|
ObjectOutputStream out = new ObjectOutputStream(s.getOutputStream());
|
||||||
out.writeObject(notif);
|
out.writeObject(notif);
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,7 +21,7 @@ class OutdoorListenerThread extends Thread {
|
||||||
List<User> known_outdoor_users;
|
List<User> known_outdoor_users;
|
||||||
List<Socket> dest_sockets;
|
List<Socket> dest_sockets;
|
||||||
List<Socket> outdoor_dest_sockets;
|
List<Socket> outdoor_dest_sockets;
|
||||||
int portNumber;
|
int outdoorPortNumber;
|
||||||
|
|
||||||
OutdoorListenerThread(User in_user, List<User> in_known_users, List<User> in_known_outdoor_users, List<Socket> in_dest_sockets, List<Socket> in_outdoor_dest_sockets,
|
OutdoorListenerThread(User in_user, List<User> in_known_users, List<User> in_known_outdoor_users, List<Socket> in_dest_sockets, List<Socket> in_outdoor_dest_sockets,
|
||||||
JTextArea in_displayArea, JTextArea in_knownUsersPanel)
|
JTextArea in_displayArea, JTextArea in_knownUsersPanel)
|
||||||
|
@ -33,22 +33,16 @@ OutdoorListenerThread(User in_user, List<User> in_known_users, List<User> in_kn
|
||||||
outdoor_dest_sockets = in_outdoor_dest_sockets;
|
outdoor_dest_sockets = in_outdoor_dest_sockets;
|
||||||
displayArea = in_displayArea;
|
displayArea = in_displayArea;
|
||||||
knownUsersPanel = in_knownUsersPanel;
|
knownUsersPanel = in_knownUsersPanel;
|
||||||
portNumber = 2344;
|
outdoorPortNumber = 2344;
|
||||||
}
|
}
|
||||||
public void run()
|
public void run()
|
||||||
{
|
{
|
||||||
boolean exit = false;
|
boolean exit = false;
|
||||||
boolean accepted = true;
|
boolean accepted = true;
|
||||||
|
|
||||||
String notification;
|
|
||||||
String username;
|
String username;
|
||||||
String response = "";
|
String response = "";
|
||||||
|
|
||||||
byte[] buffer = new byte[100];
|
|
||||||
DatagramPacket notifPacket = new DatagramPacket(buffer, buffer.length);
|
|
||||||
DatagramSocket notifSocket;
|
|
||||||
byte[] notifBytes;
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
while(!exit)
|
while(!exit)
|
||||||
|
@ -75,7 +69,7 @@ OutdoorListenerThread(User in_user, List<User> in_known_users, List<User> in_kn
|
||||||
response += u.getName() + " ";
|
response += u.getName() + " ";
|
||||||
}
|
}
|
||||||
response = response.trim();
|
response = response.trim();
|
||||||
response += ";" + (portNumber+1);
|
response += ";" + (outdoorPortNumber+1);
|
||||||
|
|
||||||
out.println(response);
|
out.println(response);
|
||||||
|
|
||||||
|
@ -90,14 +84,8 @@ OutdoorListenerThread(User in_user, List<User> in_known_users, List<User> in_kn
|
||||||
}
|
}
|
||||||
if(accepted)
|
if(accepted)
|
||||||
{
|
{
|
||||||
notification = "+" + username;
|
outdoorPortNumber++;
|
||||||
notifBytes = notification.getBytes();
|
Socket s = (new ServerSocket(outdoorPortNumber)).accept();
|
||||||
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();
|
|
||||||
(new ReceiveThread(user, s, displayArea, known_users, known_outdoor_users, knownUsersPanel, dest_sockets, outdoor_dest_sockets, true)).start();
|
(new ReceiveThread(user, s, displayArea, known_users, known_outdoor_users, knownUsersPanel, dest_sockets, outdoor_dest_sockets, true)).start();
|
||||||
outdoor_dest_sockets.add(s);
|
outdoor_dest_sockets.add(s);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package chat;
|
package chat;
|
||||||
|
|
||||||
import java.io.EOFException;
|
import java.io.EOFException;
|
||||||
|
import java.net.SocketException;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.ObjectInputStream;
|
import java.io.ObjectInputStream;
|
||||||
import java.io.ObjectOutputStream;
|
import java.io.ObjectOutputStream;
|
||||||
|
@ -46,7 +47,6 @@ class ReceiveThread extends Thread {
|
||||||
|
|
||||||
if(!(notif.getAuthor().equals(user)) && !notif.isRedirected())
|
if(!(notif.getAuthor().equals(user)) && !notif.isRedirected())
|
||||||
{
|
{
|
||||||
System.out.println("Redirecting message");
|
|
||||||
for(Socket s:outdoor_dest_sockets)
|
for(Socket s:outdoor_dest_sockets)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
@ -54,6 +54,7 @@ class ReceiveThread extends Thread {
|
||||||
ObjectOutputStream out = new ObjectOutputStream(s.getOutputStream());
|
ObjectOutputStream out = new ObjectOutputStream(s.getOutputStream());
|
||||||
notif.setRedirected(true);
|
notif.setRedirected(true);
|
||||||
out.writeObject(notif);
|
out.writeObject(notif);
|
||||||
|
notif.setRedirected(false);
|
||||||
}
|
}
|
||||||
catch(IOException e){}
|
catch(IOException e){}
|
||||||
}
|
}
|
||||||
|
@ -90,6 +91,8 @@ class ReceiveThread extends Thread {
|
||||||
|
|
||||||
if(!dn.isRedirected() && !dn.getAuthor().equals(user))
|
if(!dn.isRedirected() && !dn.getAuthor().equals(user))
|
||||||
{
|
{
|
||||||
|
exit = true;
|
||||||
|
|
||||||
socket.close();
|
socket.close();
|
||||||
if(!isOutdoor)
|
if(!isOutdoor)
|
||||||
dest_sockets.remove(socket);
|
dest_sockets.remove(socket);
|
||||||
|
@ -136,6 +139,13 @@ class ReceiveThread extends Thread {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch(EOFException e) {}
|
catch(EOFException e) {}
|
||||||
|
catch(SocketException e)
|
||||||
|
{
|
||||||
|
if(!isOutdoor)
|
||||||
|
dest_sockets.remove(socket);
|
||||||
|
else
|
||||||
|
outdoor_dest_sockets.remove(socket);
|
||||||
|
}
|
||||||
catch(Exception e)
|
catch(Exception e)
|
||||||
{
|
{
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
|
Loading…
Reference in a new issue