ClientListener + ClientConsole

This commit is contained in:
2025-03-01 12:41:40 +01:00
parent a041193ce2
commit 07ad2ba05e
7 changed files with 203 additions and 133 deletions

View File

@@ -0,0 +1,128 @@
package client;
import java.net.InetSocketAddress;
import java.net.SocketException;
import java.time.Instant;
import java.util.List;
import java.util.Scanner;
import network.protocol.ANSIColor;
import network.protocol.packets.ServerResponsePacket;
import network.protocol.packets.ServerResponsePacket.Response;
public class ClientConsole implements ClientListener {
private Client client;
private final Thread inputThread;
private final Scanner scanner;
public static void main(String[] args) {
new ClientConsole(new InetSocketAddress("localhost", 6665));
}
public ClientConsole(InetSocketAddress address) {
this.inputThread = new Thread(this::inputLoop);
this.scanner = new Scanner(System.in);
String pseudo = inputPseudo();
try {
this.client = new Client(address, this, pseudo);
this.inputThread.start();
} catch (SocketException e) {
e.printStackTrace();
}
}
private String inputPseudo() {
System.out.println("Enter your pseudo:");
String pseudo = this.scanner.nextLine();
return pseudo;
}
public Client getClientInterface() {
return this.client;
}
private void inputLoop() {
while (!Thread.interrupted()) {
String message = scanner.nextLine();
visitMessage(message);
}
this.scanner.close();
}
public void joinThread() throws InterruptedException {
this.inputThread.join();
}
private void visitMessage(String message) {
try {
if (message.startsWith("/")) {
if (message.startsWith("/createRoom")) {
String roomName = message.substring(12).trim();
this.client.SendCreateRoom(roomName);
} else if (message.startsWith("/listRooms")) {
this.client.RequestRoomList();
} else if (message.startsWith("/joinRoom")) {
String roomName = message.substring(10).trim();
this.client.SendJoinRoom(roomName);
} else if (message.startsWith("/leaveRoom")) {
this.client.SendLeaveRoom();
} else if (message.startsWith("/bye")) {
this.client.close();
} else if (message.startsWith("/help")) {
System.out.println("Available commands:");
System.out.println("\t/bye");
System.out.println("\t/createRoom <roomName>");
System.out.println("\t/listRooms");
System.out.println("\t/joinRoom <roomName>");
System.out.println("\t/leaveRoom");
System.out.println("\t/help");
} else {
System.out.println("Unknown command");
}
} else {
this.client.SendChatMessage(message);
}
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void handleDisconnect() {
System.out.println("Disconnected !");
this.inputThread.interrupt();
}
@Override
public void handleChatMessage(Instant time, String chatter, String content) {
StringBuilder sb = new StringBuilder();
String strTime = time.toString();
sb.append("&y[");
sb.append(strTime, 11, 19); // We only take the HH:MM:SS part
sb.append("]&n");
sb.append(" ");
sb.append(chatter);
sb.append(" : ");
sb.append(content).append("&n"); // make the color back to normal at the end of every message
System.out.println(ANSIColor.formatString(sb.toString()));
}
@Override
public void handleRoomList(List<String> roomNames) {
System.out.println("Rooms :");
for (String room : roomNames) {
System.out.println("\t" + room);
}
}
@Override
public void handleServerResponse(Response response) {
if (response == ServerResponsePacket.Response.MessageSent
|| response == ServerResponsePacket.Response.MessageNotSent) {
return;
}
System.out.println(response);
}
}