leave/join room messages
This commit is contained in:
@@ -32,6 +32,10 @@ public class Server implements PacketHandler {
|
|||||||
return rooms.keySet().stream().collect(ArrayList::new, ArrayList::add, ArrayList::addAll);
|
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) {
|
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)) {
|
||||||
@@ -71,17 +75,24 @@ public class Server implements PacketHandler {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean sendToRoom(ServerConnexion connexion, SendChatMessagePacket packet) {
|
public boolean sendToRoom(String roomName, ChatMessagePacket packet) {
|
||||||
String roomName = getRoomName(connexion);
|
|
||||||
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(packet));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
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() {
|
public void close() {
|
||||||
this.reader.stop();
|
this.reader.stop();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ 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.time.Instant;
|
||||||
|
|
||||||
import network.SocketWriter;
|
import network.SocketWriter;
|
||||||
import network.protocol.Packet;
|
import network.protocol.Packet;
|
||||||
@@ -49,23 +50,30 @@ public class ServerConnexion implements PacketVisitor {
|
|||||||
public void visitPacket(CreateRoomPacket packet) {
|
public void visitPacket(CreateRoomPacket packet) {
|
||||||
boolean created = server.createRoom(packet.getRoomName(), this);
|
boolean created = server.createRoom(packet.getRoomName(), this);
|
||||||
sendPacket(new ServerResponsePacket(created ? Response.RoomCreated : Response.RoomNotCreated));
|
sendPacket(new ServerResponsePacket(created ? Response.RoomCreated : Response.RoomNotCreated));
|
||||||
|
if (created)
|
||||||
|
onRoomJoin();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void visitPacket(JoinRoomPacket packet) {
|
public void visitPacket(JoinRoomPacket packet) {
|
||||||
boolean joined = server.joinRoom(packet.getRoomName(), this);
|
boolean joined = server.joinRoom(packet.getRoomName(), this);
|
||||||
sendPacket(new ServerResponsePacket(joined ? Response.RoomJoined : Response.RoomNotJoined));
|
sendPacket(new ServerResponsePacket(joined ? Response.RoomJoined : Response.RoomNotJoined));
|
||||||
|
if (joined)
|
||||||
|
onRoomJoin();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void visitPacket(LeaveRoomPacket packet) {
|
public void visitPacket(LeaveRoomPacket packet) {
|
||||||
|
String roomName = this.server.getRoomName(this);
|
||||||
boolean left = server.leaveRoom(this);
|
boolean left = server.leaveRoom(this);
|
||||||
sendPacket(new ServerResponsePacket(left ? Response.RoomLeft : Response.RoomNotLeft));
|
sendPacket(new ServerResponsePacket(left ? Response.RoomLeft : Response.RoomNotLeft));
|
||||||
|
if (left)
|
||||||
|
onRoomLeave(roomName);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void visitPacket(LoginPacket packet) {
|
public void visitPacket(LoginPacket packet) {
|
||||||
if (server.hasChatterName(packet.getPseudo())) {
|
if (packet.getPseudo().isEmpty() || server.hasChatterName(packet.getPseudo())) {
|
||||||
sendPacket(new ServerResponsePacket(Response.AuthError));
|
sendPacket(new ServerResponsePacket(Response.AuthError));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -92,10 +100,23 @@ public class ServerConnexion implements PacketVisitor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void onDisconnect() {
|
private void onDisconnect() {
|
||||||
|
if (this.server.isInRoom(this)) {
|
||||||
|
this.onRoomLeave(this.server.getRoomName(this));
|
||||||
|
}
|
||||||
this.server.removeConnexion(this);
|
this.server.removeConnexion(this);
|
||||||
System.out.println("[Server] Chatter " + chatterName + " disconnected !");
|
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
|
@Override
|
||||||
public void visitPacket(RoomListPacket packet) {
|
public void visitPacket(RoomListPacket packet) {
|
||||||
// I'm never supposed to receive this from the client
|
// I'm never supposed to receive this from the client
|
||||||
|
|||||||
Reference in New Issue
Block a user