refactor server room operations
This commit is contained in:
@@ -34,50 +34,52 @@ public class Server implements PacketHandler {
|
|||||||
|
|
||||||
public String getRoomName(ServerConnexion connexion) {
|
public String getRoomName(ServerConnexion connexion) {
|
||||||
for (Map.Entry<String, ArrayList<ServerConnexion>> entry : rooms.entrySet()) {
|
for (Map.Entry<String, ArrayList<ServerConnexion>> entry : rooms.entrySet()) {
|
||||||
if(entry.getValue().contains(connexion)) {
|
if (entry.getValue().contains(connexion)) {
|
||||||
return entry.getKey();
|
return entry.getKey();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
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);
|
||||||
// Remove the room if it is empty
|
// Remove the room if it is empty
|
||||||
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(),
|
||||||
if(roomName != null && rooms.containsKey(roomName)) {
|
packet.getContent());
|
||||||
|
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() {
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user