123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- package chat;
-
- import java.net.DatagramPacket;
- import java.net.DatagramSocket;
- import java.net.InetAddress;
- import java.net.ServerSocket;
- import java.net.Socket;
- import java.net.SocketTimeoutException;
- import java.util.Collections;
- import java.util.List;
-
- import javax.swing.JTextArea;
-
- public class ConnectionListenerThread extends Thread {
- User user;
- JTextArea displayArea;
- JTextArea knownUsersPanel;
- List<User> known_users;
- List<User> known_outdoor_users;
- List<Socket> dest_sockets;
- List<Socket> outdoor_dest_sockets;
- int portNumber;
-
- ConnectionListenerThread(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, int in_portNumber)
- {
- user = in_user;
- known_users = in_known_users;
- known_outdoor_users = in_known_outdoor_users;
- dest_sockets = in_dest_sockets;
- outdoor_dest_sockets = in_outdoor_dest_sockets;
- displayArea = in_displayArea;
- knownUsersPanel = in_knownUsersPanel;
- portNumber = in_portNumber;
- }
- public void run()
- {
- boolean exit = false;
- boolean accepted = true;
- boolean outdoor;
- byte[] buffer = new byte[100];
- DatagramPacket request = new DatagramPacket(buffer, buffer.length);
- DatagramPacket responsePacket;
-
- DatagramSocket requestSocket;
- DatagramSocket responseSocket;
-
- String username;
- String response = "";
-
- byte[] responseBytes;
- try
- {
- requestSocket = new DatagramSocket(1234);
- responseSocket = new DatagramSocket();
-
- while(!exit)
- {
- try
- {
- System.out.println("Waiting for connection request");
- requestSocket.receive(request);
- username = new String(request.getData(), 0, request.getLength());
-
- if(username.charAt(0) == '+')
- {
- username = username.substring(1);
- outdoor = true;
- }
- else
- {
- 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);
- }
- accepted = true;
- for(User a:known_users)
- {
- accepted = accepted && (!username.equals(a.getName()));
- }
- for(User a:known_outdoor_users)
- {
- accepted = accepted && (!username.equals(a.getName()));
- }
- 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);
- }
- }
- }
- catch(SocketTimeoutException e) {}
- }
- }
- catch(Exception e)
- {
- e.printStackTrace();
- System.out.println(e.getMessage());
- }
- }
- }
|