summaryrefslogtreecommitdiff
path: root/server
diff options
context:
space:
mode:
authorilotterytea <iltsu@alright.party>2025-01-23 00:55:33 +0500
committerilotterytea <iltsu@alright.party>2025-01-23 00:55:33 +0500
commit6bf7ee0b5f0c15fefa2a6cde4a17d8f6ade3f39b (patch)
treed085466f3d453a73322adc881296e6c8b30ba26e /server
parent7757de487c909fe15e0ac0b5cbaa27f12109c66d (diff)
feat: chat !!!
Diffstat (limited to 'server')
-rw-r--r--server/src/main/java/kz/ilotterytea/frogartha/server/FrogarthaServer.java7
-rw-r--r--server/src/main/java/kz/ilotterytea/frogartha/server/ServerHandlers.java24
2 files changed, 23 insertions, 8 deletions
diff --git a/server/src/main/java/kz/ilotterytea/frogartha/server/FrogarthaServer.java b/server/src/main/java/kz/ilotterytea/frogartha/server/FrogarthaServer.java
index 99847df..6e8fbde 100644
--- a/server/src/main/java/kz/ilotterytea/frogartha/server/FrogarthaServer.java
+++ b/server/src/main/java/kz/ilotterytea/frogartha/server/FrogarthaServer.java
@@ -3,10 +3,7 @@ package kz.ilotterytea.frogartha.server;
import com.github.czyzby.websocket.serialization.SerializationException;
import com.github.czyzby.websocket.serialization.impl.ManualSerializer;
import kz.ilotterytea.frogartha.domain.Identity;
-import kz.ilotterytea.frogartha.domain.actions.ChangedDirectionAction;
-import kz.ilotterytea.frogartha.domain.actions.JoinRoomAction;
-import kz.ilotterytea.frogartha.domain.actions.LeaveRoomAction;
-import kz.ilotterytea.frogartha.domain.actions.PlayerJumpAction;
+import kz.ilotterytea.frogartha.domain.actions.*;
import kz.ilotterytea.frogartha.exceptions.PlayerKickException;
import kz.ilotterytea.frogartha.utils.Logger;
import kz.ilotterytea.frogartha.utils.SerializerUtils;
@@ -101,6 +98,8 @@ public class FrogarthaServer extends WebSocketServer {
ServerHandlers.handleJoinRoomAction(player, (JoinRoomAction) obj);
} else if (obj instanceof LeaveRoomAction) {
ServerHandlers.handleLeaveRoomAction(player, (LeaveRoomAction) obj);
+ } else if (obj instanceof ChatMessageAction) {
+ ServerHandlers.handleChatMessageAction(player, (ChatMessageAction) obj);
} else {
throw PlayerKickException.internalServerError();
}
diff --git a/server/src/main/java/kz/ilotterytea/frogartha/server/ServerHandlers.java b/server/src/main/java/kz/ilotterytea/frogartha/server/ServerHandlers.java
index 6f16281..6891fef 100644
--- a/server/src/main/java/kz/ilotterytea/frogartha/server/ServerHandlers.java
+++ b/server/src/main/java/kz/ilotterytea/frogartha/server/ServerHandlers.java
@@ -5,11 +5,9 @@ import com.badlogic.gdx.math.Vector3;
import kz.ilotterytea.frogartha.FrogarthaConstants;
import kz.ilotterytea.frogartha.domain.Identity;
import kz.ilotterytea.frogartha.domain.PlayerState;
-import kz.ilotterytea.frogartha.domain.actions.ChangedDirectionAction;
-import kz.ilotterytea.frogartha.domain.actions.JoinRoomAction;
-import kz.ilotterytea.frogartha.domain.actions.LeaveRoomAction;
-import kz.ilotterytea.frogartha.domain.actions.PlayerJumpAction;
+import kz.ilotterytea.frogartha.domain.actions.*;
import kz.ilotterytea.frogartha.domain.events.ChangedDirectionEvent;
+import kz.ilotterytea.frogartha.domain.events.ChatMessageEvent;
import kz.ilotterytea.frogartha.domain.events.IdentifiedEvent;
import kz.ilotterytea.frogartha.domain.events.PlayerJumpEvent;
import kz.ilotterytea.frogartha.exceptions.PlayerKickException;
@@ -127,4 +125,22 @@ public class ServerHandlers {
log.log("{} left {}", player, room);
}
+
+ public static void handleChatMessageAction(PlayerConnection player, ChatMessageAction action) {
+ if (player.getRoom() == null) {
+ throw PlayerKickException.notInRoom();
+ }
+
+ long nowTimestamp = System.currentTimeMillis();
+
+ if (nowTimestamp - player.getState().getLastMessageTimestamp() < FrogarthaConstants.Chat.MESSAGE_PER_MS) {
+ throw PlayerKickException.messageSpam();
+ }
+
+ player.getState().setLastMessageTimestamp(nowTimestamp);
+
+ Room room = player.getRoom();
+ room.broadcast(new ChatMessageEvent(player.getId(), action.getMessage()));
+ log.log("{} sent a message: {}", player, action.getMessage());
+ }
}