leave/join room messages

This commit is contained in:
2025-03-01 13:26:09 +01:00
parent 0533c16cf2
commit 90f92281ef
2 changed files with 38 additions and 6 deletions

View File

@@ -32,6 +32,10 @@ public class Server implements PacketHandler {
return rooms.keySet().stream().collect(ArrayList::new, ArrayList::add, ArrayList::addAll);
}
public boolean isInRoom(ServerConnexion connexion) {
return getRoomName(connexion) != null;
}
public String getRoomName(ServerConnexion connexion) {
for (Map.Entry<String, ArrayList<ServerConnexion>> entry : rooms.entrySet()) {
if (entry.getValue().contains(connexion)) {
@@ -71,17 +75,24 @@ public class Server implements PacketHandler {
return false;
}
public boolean sendToRoom(ServerConnexion connexion, SendChatMessagePacket packet) {
String roomName = getRoomName(connexion);
ChatMessagePacket chatPacket = new ChatMessagePacket(Instant.now(), connexion.getChatterName(),
packet.getContent());
public boolean sendToRoom(String roomName, ChatMessagePacket packet) {
if (roomName != null && rooms.containsKey(roomName)) {
rooms.get(roomName).forEach(con -> con.sendPacket(chatPacket));
rooms.get(roomName).forEach(con -> con.sendPacket(packet));
return true;
}
return false;
}
public boolean sendToRoom(ServerConnexion connexion, ChatMessagePacket packet) {
String roomName = getRoomName(connexion);
return sendToRoom(roomName, packet);
}
public boolean sendToRoom(ServerConnexion connexion, SendChatMessagePacket packet) {
return sendToRoom(connexion,
new ChatMessagePacket(Instant.now(), connexion.getChatterName(), packet.getContent()));
}
public void close() {
this.reader.stop();
}

View File

@@ -3,6 +3,7 @@ package server;
import java.io.IOException;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.time.Instant;
import network.SocketWriter;
import network.protocol.Packet;
@@ -49,23 +50,30 @@ public class ServerConnexion implements PacketVisitor {
public void visitPacket(CreateRoomPacket packet) {
boolean created = server.createRoom(packet.getRoomName(), this);
sendPacket(new ServerResponsePacket(created ? Response.RoomCreated : Response.RoomNotCreated));
if (created)
onRoomJoin();
}
@Override
public void visitPacket(JoinRoomPacket packet) {
boolean joined = server.joinRoom(packet.getRoomName(), this);
sendPacket(new ServerResponsePacket(joined ? Response.RoomJoined : Response.RoomNotJoined));
if (joined)
onRoomJoin();
}
@Override
public void visitPacket(LeaveRoomPacket packet) {
String roomName = this.server.getRoomName(this);
boolean left = server.leaveRoom(this);
sendPacket(new ServerResponsePacket(left ? Response.RoomLeft : Response.RoomNotLeft));
if (left)
onRoomLeave(roomName);
}
@Override
public void visitPacket(LoginPacket packet) {
if (server.hasChatterName(packet.getPseudo())) {
if (packet.getPseudo().isEmpty() || server.hasChatterName(packet.getPseudo())) {
sendPacket(new ServerResponsePacket(Response.AuthError));
return;
}
@@ -92,10 +100,23 @@ public class ServerConnexion implements PacketVisitor {
}
private void onDisconnect() {
if (this.server.isInRoom(this)) {
this.onRoomLeave(this.server.getRoomName(this));
}
this.server.removeConnexion(this);
System.out.println("[Server] Chatter " + chatterName + " disconnected !");
}
private void onRoomJoin() {
String joinMessage = "Chatter " + this.chatterName + " joined the room !";
this.server.sendToRoom(this, new ChatMessagePacket(Instant.now(), "", joinMessage));
}
private void onRoomLeave(String roomName) {
String joinMessage = "Chatter " + this.chatterName + " left the room !";
this.server.sendToRoom(roomName, new ChatMessagePacket(Instant.now(), "", joinMessage));
}
@Override
public void visitPacket(RoomListPacket packet) {
// I'm never supposed to receive this from the client