Added /room command to know in which room the user is

This commit is contained in:
Clément
2025-03-02 12:28:53 +01:00
parent e9f1feaaad
commit e52066ce17
9 changed files with 80 additions and 31 deletions

View File

@@ -29,6 +29,8 @@ You will also be able to create a new room.
- /listRooms
- /joinRoom *roomName*
- /leaveRoom
- /room
- /bye
- /help
> [!NOTE]

View File

@@ -4,13 +4,7 @@ import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketException;
import network.protocol.packets.CreateRoomPacket;
import network.protocol.packets.DisconnectPacket;
import network.protocol.packets.JoinRoomPacket;
import network.protocol.packets.LeaveRoomPacket;
import network.protocol.packets.LoginPacket;
import network.protocol.packets.RequestRoomListPacket;
import network.protocol.packets.SendChatMessagePacket;
import network.protocol.packets.*;
public class Client {
@@ -52,4 +46,8 @@ public class Client {
public void RequestRoomList() {
this.connexion.sendPacket(new RequestRoomListPacket());
}
public void RequestActualRoom() {
this.connexion.sendPacket(new RequestActualRoomPacket());
}
}

View File

@@ -9,17 +9,7 @@ import network.SocketReader;
import network.SocketWriter;
import network.protocol.Packet;
import network.protocol.PacketVisitor;
import network.protocol.packets.ChatMessagePacket;
import network.protocol.packets.CreateRoomPacket;
import network.protocol.packets.DisconnectPacket;
import network.protocol.packets.HandshakePacket;
import network.protocol.packets.JoinRoomPacket;
import network.protocol.packets.LeaveRoomPacket;
import network.protocol.packets.LoginPacket;
import network.protocol.packets.RequestRoomListPacket;
import network.protocol.packets.RoomListPacket;
import network.protocol.packets.SendChatMessagePacket;
import network.protocol.packets.ServerResponsePacket;
import network.protocol.packets.*;
public class ClientConnexion implements PacketVisitor, PacketHandler {
@@ -92,6 +82,16 @@ public class ClientConnexion implements PacketVisitor, PacketHandler {
this.callback.handleServerResponse(packet.getResponse());
}
@Override
public void visitPacket(RequestActualRoomPacket packet) {
throw new UnsupportedOperationException("Unimplemented method 'visitPacket'");
}
@Override
public void visitPacket(ActualRoomPacket packet) {
this.callback.handleActualRoom(packet.getRoomName());
}
@Override
public void visitPacket(DisconnectPacket packet) {
this.close();

View File

@@ -84,7 +84,10 @@ public class ClientConsole implements ClientListener {
this.client.SendJoinRoom(roomName);
} else if (message.equals("/leaveRoom") || message.equals("/leave")) {
this.client.SendLeaveRoom();
} else if (message.equals("/bye")) {
} else if (message.equals("/room")) {
this.client.RequestActualRoom();
}
else if (message.equals("/bye")) {
this.client.close();
} else if (message.equals("/help")) {
System.out.println("Available commands:");
@@ -92,6 +95,8 @@ public class ClientConsole implements ClientListener {
System.out.println("\t/listRooms");
System.out.println("\t/joinRoom <roomName>");
System.out.println("\t/leaveRoom");
System.out.println("\t/room");
System.out.println("\t/bye");
System.out.println("\t/help");
} else {
System.out.println(ANSIColor.formatString("&rUnknown command&n"));
@@ -145,6 +150,11 @@ public class ClientConsole implements ClientListener {
}
}
@Override
public void handleActualRoom(String roomName) {
System.out.println(roomName != null ? ANSIColor.formatString("You are now in room &b" + roomName + "&n") : "You are not in a room");
}
@Override
public void handleServerResponse(Response response) {
if (response == ServerResponsePacket.Response.MessageSent

View File

@@ -13,5 +13,6 @@ public interface ClientListener {
void handleChatMessage(Instant time, String chatter, String content);
void handleRoomList(List<String> roomNames);
void handleServerResponse(ServerResponsePacket.Response response);
void handleActualRoom(String roomName);
}

View File

@@ -1,16 +1,6 @@
package network.protocol;
import network.protocol.packets.ChatMessagePacket;
import network.protocol.packets.CreateRoomPacket;
import network.protocol.packets.DisconnectPacket;
import network.protocol.packets.HandshakePacket;
import network.protocol.packets.JoinRoomPacket;
import network.protocol.packets.LeaveRoomPacket;
import network.protocol.packets.LoginPacket;
import network.protocol.packets.RequestRoomListPacket;
import network.protocol.packets.RoomListPacket;
import network.protocol.packets.SendChatMessagePacket;
import network.protocol.packets.ServerResponsePacket;
import network.protocol.packets.*;
public interface PacketVisitor {
@@ -29,5 +19,7 @@ public interface PacketVisitor {
void visitPacket(RoomListPacket packet);
void visitPacket(SendChatMessagePacket packet);
void visitPacket(ServerResponsePacket packet);
void visitPacket(RequestActualRoomPacket packet);
void visitPacket(ActualRoomPacket packet);
}

View File

@@ -0,0 +1,21 @@
package network.protocol.packets;
import network.protocol.Packet;
import network.protocol.PacketVisitor;
public class ActualRoomPacket extends Packet {
private final String roomName;
public ActualRoomPacket(String roomName) {
this.roomName = roomName;
}
public String getRoomName() {
return roomName;
}
@Override
public void accept(PacketVisitor packetVisitor) {
packetVisitor.visitPacket(this);
}
}

View File

@@ -0,0 +1,14 @@
package network.protocol.packets;
import network.protocol.Packet;
import network.protocol.PacketVisitor;
public class RequestActualRoomPacket extends Packet {
public RequestActualRoomPacket() {
}
@Override
public void accept(PacketVisitor packetVisitor) {
packetVisitor.visitPacket(this);
}
}

View File

@@ -136,4 +136,15 @@ public class ServerConnexion implements PacketVisitor {
throw new UnsupportedOperationException("Unimplemented method 'visitPacket'");
}
@Override
public void visitPacket(RequestActualRoomPacket packet) {
sendPacket(new ActualRoomPacket(server.getRoomName(this)));
}
@Override
public void visitPacket(ActualRoomPacket packet) {
// I'm never supposed to receive this from the client
throw new UnsupportedOperationException("Unimplemented method 'visitPacket'");
}
}