WIP3
This commit is contained in:
parent
acecf4de31
commit
d477d4b4ae
1 changed files with 73 additions and 68 deletions
|
@ -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(!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());
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
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));
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue