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 {
int port;
Socket socket;
JTextArea displayArea;
JTextArea knownUsersPanel;
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;
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<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 {
private User user;
private List<User> 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));
}