diff --git a/src/main/java/org/example/ClientApp.java b/src/main/java/org/example/ClientApp.java index 3fe8373..bf90a27 100644 --- a/src/main/java/org/example/ClientApp.java +++ b/src/main/java/org/example/ClientApp.java @@ -20,6 +20,7 @@ public class ClientApp extends JFrame { private JTextArea chatArea; private JTextField messageField; private JButton sendButton; + private JButton listButton; private Socket tcpSocket; private DatagramSocket udpSocket; @@ -54,6 +55,15 @@ public class ClientApp extends JFrame { }); bottomPanel.add(sendButton, BorderLayout.EAST); + listButton = new JButton("List"); + listButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + requestConnectedClients(); + } + }); + bottomPanel.add(listButton, BorderLayout.WEST); + add(bottomPanel, BorderLayout.SOUTH); setVisible(true); @@ -81,6 +91,7 @@ public class ClientApp extends JFrame { public void run() { try { String serverMessage; + out.println(clientName); while ((serverMessage = in.readLine()) != null) { chatArea.append(serverMessage + "\n"); } @@ -127,7 +138,7 @@ public class ClientApp extends JFrame { String message = messageField.getText().trim(); if (!message.isEmpty()) { out.println(clientName + ": " + message); - //sendUDPMessage(clientName + ": " + message); + // sendUDPMessage(clientName + ": " + message); messageField.setText(""); chatArea.append("You: " + message + "\n"); } @@ -144,6 +155,10 @@ public class ClientApp extends JFrame { } } + private void requestConnectedClients() { + sendUDPMessage("GET_CLIENTS"); + } + public static void main(String[] args) { if (args.length > 0) { SwingUtilities.invokeLater(new Runnable() { diff --git a/src/main/java/org/example/ServerApp.java b/src/main/java/org/example/ServerApp.java index e49fdf3..f2c0e04 100644 --- a/src/main/java/org/example/ServerApp.java +++ b/src/main/java/org/example/ServerApp.java @@ -6,6 +6,7 @@ import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.DatagramPacket; import java.net.DatagramSocket; +import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; @@ -86,12 +87,15 @@ public class ServerApp { public void run() { try { byte[] buffer = new byte[1024]; - DatagramPacket packet = new DatagramPacket(buffer, buffer.length); while (true) { + DatagramPacket packet = new DatagramPacket(buffer, buffer.length); datagramSocket.receive(packet); - String message = new String(packet.getData(), 0, packet.getLength()); - broadcastTCPMessage(message, null); + String request = new String(packet.getData(), 0, packet.getLength()); + + if (request.equals("GET_CLIENTS")) { + sendClientList(packet.getAddress(), packet.getPort()); + } } } catch (IOException e) { e.printStackTrace(); @@ -99,6 +103,20 @@ public class ServerApp { datagramSocket.close(); } } + + private void sendClientList(InetAddress address, int port) { + StringBuilder clientList = new StringBuilder(); + for (ClientHandler client : clients) { + clientList.append(client.getClientName()).append("\n"); + } + byte[] buffer = clientList.toString().getBytes(); + DatagramPacket packet = new DatagramPacket(buffer, buffer.length, address, port); + try { + datagramSocket.send(packet); + } catch (IOException e) { + e.printStackTrace(); + } + } } private class ClientHandler extends Thread { @@ -106,11 +124,16 @@ public class ServerApp { private DatagramSocket datagramSocket; private BufferedReader in; private PrintWriter out; + private String clientName; public ClientHandler(Socket socket) { this.clientSocket = socket; } + public String getClientName() { + return clientName; + } + @Override public void run() { try { @@ -118,6 +141,9 @@ public class ServerApp { out = new PrintWriter(clientSocket.getOutputStream(), true); datagramSocket = new DatagramSocket(); + clientName = in.readLine(); + broadcastTCPMessage(clientName + " entrou no chat.", this); + String clientMessage; while ((clientMessage = in.readLine()) != null) { broadcastTCPMessage(clientMessage, this); @@ -143,7 +169,8 @@ public class ServerApp { public void sendUDPMessage(String message) { try { byte[] buffer = message.getBytes(); - DatagramPacket packet = new DatagramPacket(buffer, buffer.length, clientSocket.getInetAddress(), UDP_PORT); + DatagramPacket packet = new DatagramPacket(buffer, buffer.length, clientSocket.getInetAddress(), + UDP_PORT); datagramSocket.send(packet); } catch (IOException e) { e.printStackTrace();