diff options
| author | ilotterytea <iltsu@alright.party> | 2025-01-23 00:55:33 +0500 |
|---|---|---|
| committer | ilotterytea <iltsu@alright.party> | 2025-01-23 00:55:33 +0500 |
| commit | 6bf7ee0b5f0c15fefa2a6cde4a17d8f6ade3f39b (patch) | |
| tree | d085466f3d453a73322adc881296e6c8b30ba26e /shared | |
| parent | 7757de487c909fe15e0ac0b5cbaa27f12109c66d (diff) | |
feat: chat !!!
Diffstat (limited to 'shared')
6 files changed, 85 insertions, 4 deletions
diff --git a/shared/src/main/java/kz/ilotterytea/frogartha/FrogarthaConstants.java b/shared/src/main/java/kz/ilotterytea/frogartha/FrogarthaConstants.java index 84dc6b0..e205bf5 100644 --- a/shared/src/main/java/kz/ilotterytea/frogartha/FrogarthaConstants.java +++ b/shared/src/main/java/kz/ilotterytea/frogartha/FrogarthaConstants.java @@ -14,4 +14,9 @@ public class FrogarthaConstants { public static class Room { public static final int MAX_PLAYERS = 30; } + + public static class Chat { + public static final int MAX_MESSAGE_LENGTH = 100; + public static final int MESSAGE_PER_MS = 500; + } } diff --git a/shared/src/main/java/kz/ilotterytea/frogartha/domain/PlayerState.java b/shared/src/main/java/kz/ilotterytea/frogartha/domain/PlayerState.java index 0aa89c5..c3db5a8 100644 --- a/shared/src/main/java/kz/ilotterytea/frogartha/domain/PlayerState.java +++ b/shared/src/main/java/kz/ilotterytea/frogartha/domain/PlayerState.java @@ -11,6 +11,7 @@ public class PlayerState implements Transferable<PlayerState> { private final Vector3 position; private final Vector2 direction; private float nextJumpTimestamp; + private long lastMessageTimestamp; public PlayerState() { this(new Vector3(), new Vector2()); @@ -42,6 +43,14 @@ public class PlayerState implements Transferable<PlayerState> { this.nextJumpTimestamp = nextJumpTimestamp; } + public long getLastMessageTimestamp() { + return lastMessageTimestamp; + } + + public void setLastMessageTimestamp(long lastMessageTimestamp) { + this.lastMessageTimestamp = lastMessageTimestamp; + } + public void setDirection(float x, float z) { this.direction.set(x, z); } diff --git a/shared/src/main/java/kz/ilotterytea/frogartha/domain/actions/ChatMessageAction.java b/shared/src/main/java/kz/ilotterytea/frogartha/domain/actions/ChatMessageAction.java new file mode 100644 index 0000000..465238a --- /dev/null +++ b/shared/src/main/java/kz/ilotterytea/frogartha/domain/actions/ChatMessageAction.java @@ -0,0 +1,31 @@ +package kz.ilotterytea.frogartha.domain.actions; + +import com.github.czyzby.websocket.serialization.SerializationException; +import com.github.czyzby.websocket.serialization.Transferable; +import com.github.czyzby.websocket.serialization.impl.Deserializer; +import com.github.czyzby.websocket.serialization.impl.Serializer; + +public class ChatMessageAction implements Transferable<ChatMessageAction> { + private String message; + + public ChatMessageAction() { + } + + public ChatMessageAction(String message) { + this.message = message; + } + + public String getMessage() { + return message; + } + + @Override + public void serialize(Serializer serializer) throws SerializationException { + serializer.serializeString(message); + } + + @Override + public ChatMessageAction deserialize(Deserializer deserializer) throws SerializationException { + return new ChatMessageAction(deserializer.deserializeString()); + } +} diff --git a/shared/src/main/java/kz/ilotterytea/frogartha/domain/events/ChatMessageEvent.java b/shared/src/main/java/kz/ilotterytea/frogartha/domain/events/ChatMessageEvent.java new file mode 100644 index 0000000..7bd395e --- /dev/null +++ b/shared/src/main/java/kz/ilotterytea/frogartha/domain/events/ChatMessageEvent.java @@ -0,0 +1,32 @@ +package kz.ilotterytea.frogartha.domain.events; + +import com.github.czyzby.websocket.serialization.SerializationException; +import com.github.czyzby.websocket.serialization.Transferable; +import com.github.czyzby.websocket.serialization.impl.Deserializer; +import com.github.czyzby.websocket.serialization.impl.Serializer; + +public class ChatMessageEvent extends Event implements Transferable<ChatMessageEvent> { + private String message; + + public ChatMessageEvent() { + } + + public ChatMessageEvent(int playerId, String message) { + super(playerId); + this.message = message; + } + + public String getMessage() { + return message; + } + + @Override + public void serialize(Serializer serializer) throws SerializationException { + serializer.serializeInt(playerId).serializeString(message); + } + + @Override + public ChatMessageEvent deserialize(Deserializer deserializer) throws SerializationException { + return new ChatMessageEvent(deserializer.deserializeInt(), deserializer.deserializeString()); + } +} diff --git a/shared/src/main/java/kz/ilotterytea/frogartha/exceptions/PlayerKickException.java b/shared/src/main/java/kz/ilotterytea/frogartha/exceptions/PlayerKickException.java index ad9c408..e24c633 100644 --- a/shared/src/main/java/kz/ilotterytea/frogartha/exceptions/PlayerKickException.java +++ b/shared/src/main/java/kz/ilotterytea/frogartha/exceptions/PlayerKickException.java @@ -33,6 +33,10 @@ public class PlayerKickException extends RuntimeException implements Transferabl return new PlayerKickException("You are not in room"); } + public static PlayerKickException messageSpam() { + return new PlayerKickException("Kicked for spamming"); + } + @Override public void serialize(Serializer serializer) throws SerializationException { serializer.serializeString(getMessage()); diff --git a/shared/src/main/java/kz/ilotterytea/frogartha/utils/SerializerUtils.java b/shared/src/main/java/kz/ilotterytea/frogartha/utils/SerializerUtils.java index e005937..3529968 100644 --- a/shared/src/main/java/kz/ilotterytea/frogartha/utils/SerializerUtils.java +++ b/shared/src/main/java/kz/ilotterytea/frogartha/utils/SerializerUtils.java @@ -2,10 +2,7 @@ package kz.ilotterytea.frogartha.utils; 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.domain.events.*; import kz.ilotterytea.frogartha.exceptions.PlayerKickException; @@ -26,5 +23,8 @@ public class SerializerUtils { serializer.register(new LeaveRoomAction()); serializer.register(new PlayerLeftRoomEvent()); serializer.register(new SenderLeftRoomEvent()); + + serializer.register(new ChatMessageAction()); + serializer.register(new ChatMessageEvent()); } } |
