refactor server room operations

This commit is contained in:
2025-03-01 13:06:55 +01:00
parent 63ec7b3aaa
commit 0533c16cf2
2 changed files with 28 additions and 42 deletions

View File

@@ -41,15 +41,16 @@ public class Server implements PacketHandler {
return null; return null;
} }
public void createRoom(String roomName, ServerConnexion connexion) throws SocketException { public boolean createRoom(String roomName, ServerConnexion connexion) {
if (rooms.containsKey(roomName)) { if (rooms.containsKey(roomName)) {
throw new SocketException("Room already exists"); return false;
} }
rooms.put(roomName, new ArrayList<>()); rooms.put(roomName, new ArrayList<>());
rooms.get(roomName).add(connexion); rooms.get(roomName).add(connexion);
return true;
} }
public void leaveRoom(ServerConnexion connexion) throws SocketException { public boolean leaveRoom(ServerConnexion connexion) {
String roomName = getRoomName(connexion); String roomName = getRoomName(connexion);
if (roomName != null) { if (roomName != null) {
rooms.get(roomName).remove(connexion); rooms.get(roomName).remove(connexion);
@@ -57,27 +58,28 @@ public class Server implements PacketHandler {
if (rooms.get(roomName).isEmpty()) { if (rooms.get(roomName).isEmpty()) {
rooms.remove(roomName); rooms.remove(roomName);
} }
return; return true;
} }
throw new SocketException("Room does not exist"); return false;
} }
public void joinRoom(String roomName, ServerConnexion connexion) throws SocketException { public boolean joinRoom(String roomName, ServerConnexion connexion) {
if (rooms.containsKey(roomName) && !rooms.get(roomName).contains(connexion)) { if (rooms.containsKey(roomName) && !rooms.get(roomName).contains(connexion)) {
rooms.get(roomName).add(connexion); rooms.get(roomName).add(connexion);
return; return true;
} }
throw new SocketException("Room does not exist"); return false;
} }
public void sendToRoom(ServerConnexion connexion, SendChatMessagePacket packet) throws SocketException { public boolean sendToRoom(ServerConnexion connexion, SendChatMessagePacket packet) {
String roomName = getRoomName(connexion); String roomName = getRoomName(connexion);
ChatMessagePacket chatPacket = new ChatMessagePacket(Instant.now(), connexion.getChatterName(), packet.getContent()); ChatMessagePacket chatPacket = new ChatMessagePacket(Instant.now(), connexion.getChatterName(),
packet.getContent());
if (roomName != null && rooms.containsKey(roomName)) { if (roomName != null && rooms.containsKey(roomName)) {
rooms.get(roomName).forEach(con -> con.sendPacket(chatPacket)); rooms.get(roomName).forEach(con -> con.sendPacket(chatPacket));
return; return true;
} }
throw new SocketException("You are not in a room or the room does not exist"); return false;
} }
public void close() { public void close() {

View File

@@ -3,7 +3,6 @@ package server;
import java.io.IOException; import java.io.IOException;
import java.net.DatagramSocket; import java.net.DatagramSocket;
import java.net.InetSocketAddress; import java.net.InetSocketAddress;
import java.net.SocketException;
import network.SocketWriter; import network.SocketWriter;
import network.protocol.Packet; import network.protocol.Packet;
@@ -48,32 +47,20 @@ public class ServerConnexion implements PacketVisitor {
@Override @Override
public void visitPacket(CreateRoomPacket packet) { public void visitPacket(CreateRoomPacket packet) {
try { boolean created = server.createRoom(packet.getRoomName(), this);
server.createRoom(packet.getRoomName(), this); sendPacket(new ServerResponsePacket(created ? Response.RoomCreated : Response.RoomNotCreated));
sendPacket(new ServerResponsePacket(Response.RoomCreated));
} catch (SocketException e) {
sendPacket(new ServerResponsePacket(Response.RoomNotCreated));
}
} }
@Override @Override
public void visitPacket(JoinRoomPacket packet) { public void visitPacket(JoinRoomPacket packet) {
try { boolean joined = server.joinRoom(packet.getRoomName(), this);
server.joinRoom(packet.getRoomName(), this); sendPacket(new ServerResponsePacket(joined ? Response.RoomJoined : Response.RoomNotJoined));
sendPacket(new ServerResponsePacket(Response.RoomJoined));
} catch (SocketException e) {
sendPacket(new ServerResponsePacket(Response.RoomNotJoined));
}
} }
@Override @Override
public void visitPacket(LeaveRoomPacket packet) { public void visitPacket(LeaveRoomPacket packet) {
try { boolean left = server.leaveRoom(this);
server.leaveRoom(this); sendPacket(new ServerResponsePacket(left ? Response.RoomLeft : Response.RoomNotLeft));
sendPacket(new ServerResponsePacket(Response.RoomLeft));
} catch (SocketException e) {
sendPacket(new ServerResponsePacket(Response.RoomNotLeft));
}
} }
@Override @Override
@@ -95,11 +82,8 @@ public class ServerConnexion implements PacketVisitor {
@Override @Override
public void visitPacket(SendChatMessagePacket packet) { public void visitPacket(SendChatMessagePacket packet) {
try { boolean messageSent = server.sendToRoom(this, packet);
server.sendToRoom(this, packet); sendPacket(new ServerResponsePacket(messageSent ? Response.MessageSent : Response.MessageNotSent));
} catch (SocketException e) {
sendPacket(new ServerResponsePacket(Response.MessageNotSent));
}
} }
@Override @Override