This commit is contained in:
Louis Farina 2021-01-11 19:20:10 +01:00
parent acecf4de31
commit d477d4b4ae

View file

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