mirror of
https://github.com/2006-Scape/apollo.git
synced 2026-07-03 00:38:21 +00:00
Template method on ChatMessage
This commit is contained in:
+3
-3
@@ -7,10 +7,10 @@
|
||||
</chain>
|
||||
</message>
|
||||
<message>
|
||||
<type>org.apollo.game.message.impl.ChatMessage</type>
|
||||
<type>org.apollo.game.message.impl.PublicChatMessage</type>
|
||||
<chain>
|
||||
<handler>org.apollo.game.message.handler.ChatVerificationHandler</handler>
|
||||
<handler>org.apollo.game.message.handler.ChatMessageHandler</handler>
|
||||
<handler>org.apollo.game.message.handler.PublicChatVerificationHandler</handler>
|
||||
<handler>org.apollo.game.message.handler.PublicChatMessageHandler</handler>
|
||||
</chain>
|
||||
</message>
|
||||
<message>
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
package org.apollo.game.message.handler;
|
||||
|
||||
import org.apollo.game.message.impl.ChatMessage;
|
||||
import org.apollo.game.model.World;
|
||||
import org.apollo.game.model.entity.Player;
|
||||
|
||||
/**
|
||||
* A {@link MessageHandler} that verifies {@link ChatMessage}s.
|
||||
*
|
||||
* @author Graham
|
||||
*/
|
||||
public final class ChatVerificationHandler extends MessageHandler<ChatMessage> {
|
||||
|
||||
/**
|
||||
* Creates the ChatVerificationHandler.
|
||||
*
|
||||
* @param world The {@link World} the {@link ChatMessage} occurred in.
|
||||
*/
|
||||
public ChatVerificationHandler(World world) {
|
||||
super(world);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handle(Player player, ChatMessage message) {
|
||||
int color = message.getTextColor();
|
||||
int effects = message.getTextEffects();
|
||||
if (color < 0 || color > 11 || effects < 0 || effects > 5) {
|
||||
message.terminate();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
+6
-6
@@ -1,6 +1,6 @@
|
||||
package org.apollo.game.message.handler;
|
||||
|
||||
import org.apollo.game.message.impl.ChatMessage;
|
||||
import org.apollo.game.message.impl.PublicChatMessage;
|
||||
import org.apollo.game.model.World;
|
||||
import org.apollo.game.model.entity.Player;
|
||||
import org.apollo.game.sync.block.SynchronizationBlock;
|
||||
@@ -10,19 +10,19 @@ import org.apollo.game.sync.block.SynchronizationBlock;
|
||||
*
|
||||
* @author Graham
|
||||
*/
|
||||
public final class ChatMessageHandler extends MessageHandler<ChatMessage> {
|
||||
public final class PublicChatMessageHandler extends MessageHandler<PublicChatMessage> {
|
||||
|
||||
/**
|
||||
* Creates the ChatMessageHandler.
|
||||
* Creates the PublicChatMessageHandler.
|
||||
*
|
||||
* @param world The {@link World} the {@link ChatMessage} occurred in.
|
||||
* @param world The {@link World} the {@link PublicChatMessage} occurred in.
|
||||
*/
|
||||
public ChatMessageHandler(World world) {
|
||||
public PublicChatMessageHandler(World world) {
|
||||
super(world);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handle(Player player, ChatMessage message) {
|
||||
public void handle(Player player, PublicChatMessage message) {
|
||||
if (player.isMuted()) {
|
||||
message.terminate();
|
||||
return;
|
||||
@@ -0,0 +1,32 @@
|
||||
package org.apollo.game.message.handler;
|
||||
|
||||
import org.apollo.game.message.impl.PublicChatMessage;
|
||||
import org.apollo.game.model.World;
|
||||
import org.apollo.game.model.entity.Player;
|
||||
|
||||
/**
|
||||
* A {@link MessageHandler} that verifies {@link PublicChatMessage}s.
|
||||
*
|
||||
* @author Graham
|
||||
*/
|
||||
public final class PublicChatVerificationHandler extends MessageHandler<PublicChatMessage> {
|
||||
|
||||
/**
|
||||
* Creates the PublicChatVerificationHandler.
|
||||
*
|
||||
* @param world The {@link World} the {@link PublicChatMessage} occurred in.
|
||||
*/
|
||||
public PublicChatVerificationHandler(World world) {
|
||||
super(world);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handle(Player player, PublicChatMessage message) {
|
||||
int color = message.getTextColor();
|
||||
int effects = message.getTextEffects();
|
||||
if (color < 0 || color > 11 || effects < 0 || effects > 5) {
|
||||
message.terminate();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -3,45 +3,31 @@ package org.apollo.game.message.impl;
|
||||
import org.apollo.net.message.Message;
|
||||
|
||||
/**
|
||||
* A {@link Message} sent by the client to send a public chat message to other players.
|
||||
* A {@link Message} sent by the client to send a chat message to other players.
|
||||
*
|
||||
* @author Graham
|
||||
* @author AymericDu
|
||||
*/
|
||||
public final class ChatMessage extends Message {
|
||||
|
||||
/**
|
||||
* The text color.
|
||||
*/
|
||||
private final int color;
|
||||
|
||||
/**
|
||||
* The compressed message.
|
||||
*/
|
||||
private final byte[] compressedMessage;
|
||||
|
||||
/**
|
||||
* The text effects.
|
||||
*/
|
||||
private final int effects;
|
||||
public abstract class ChatMessage extends Message {
|
||||
|
||||
/**
|
||||
* The message.
|
||||
*/
|
||||
private final String message;
|
||||
|
||||
/**
|
||||
* The compressed message.
|
||||
*/
|
||||
private final byte[] compressedMessage;
|
||||
|
||||
/**
|
||||
* Creates a new chat message.
|
||||
*
|
||||
* @param message The message.
|
||||
* @param compressedMessage The compressed message.
|
||||
* @param color The text color.
|
||||
* @param effects The text effects.
|
||||
*/
|
||||
public ChatMessage(String message, byte[] compressedMessage, int color, int effects) {
|
||||
public ChatMessage(String message, byte[] compressedMessage) {
|
||||
this.message = message;
|
||||
this.compressedMessage = compressedMessage;
|
||||
this.color = color;
|
||||
this.effects = effects;
|
||||
this.compressedMessage = compressedMessage.clone();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -49,8 +35,8 @@ public final class ChatMessage extends Message {
|
||||
*
|
||||
* @return The compressed message.
|
||||
*/
|
||||
public byte[] getCompressedMessage() {
|
||||
return compressedMessage;
|
||||
public final byte[] getCompressedMessage() {
|
||||
return compressedMessage.clone();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -58,26 +44,7 @@ public final class ChatMessage extends Message {
|
||||
*
|
||||
* @return The message.
|
||||
*/
|
||||
public String getMessage() {
|
||||
public final String getMessage() {
|
||||
return message;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the text color.
|
||||
*
|
||||
* @return The text color.
|
||||
*/
|
||||
public int getTextColor() {
|
||||
return color;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the text effects.
|
||||
*
|
||||
* @return The text effects.
|
||||
*/
|
||||
public int getTextEffects() {
|
||||
return effects;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,17 +7,7 @@ import org.apollo.net.message.Message;
|
||||
*
|
||||
* @author Major
|
||||
*/
|
||||
public final class PrivateChatMessage extends Message {
|
||||
|
||||
/**
|
||||
* The chat string being sent.
|
||||
*/
|
||||
private final String chat;
|
||||
|
||||
/**
|
||||
* The compressed chat string.
|
||||
*/
|
||||
private final byte[] compressedChat;
|
||||
public final class PrivateChatMessage extends ChatMessage {
|
||||
|
||||
/**
|
||||
* The username this message is being sent to.
|
||||
@@ -27,32 +17,13 @@ public final class PrivateChatMessage extends Message {
|
||||
/**
|
||||
* Creates a new private chat message.
|
||||
*
|
||||
* @param message The chat string.
|
||||
* @param compressedMessage The chat string, in a compressed form.
|
||||
* @param username The username of the player the message is being sent to.
|
||||
* @param chat The chat string.
|
||||
* @param compressedChat The chat string, in a compressed form.
|
||||
*/
|
||||
public PrivateChatMessage(String username, String chat, byte[] compressedChat) {
|
||||
public PrivateChatMessage(String message, byte[] compressedMessage, String username) {
|
||||
super(message, compressedMessage);
|
||||
this.username = username;
|
||||
this.chat = chat;
|
||||
this.compressedChat = compressedChat.clone();
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the chat string being sent.
|
||||
*
|
||||
* @return The chat string.
|
||||
*/
|
||||
public String getChat() {
|
||||
return chat;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the compressed chat string.
|
||||
*
|
||||
* @return The compressed chat string.
|
||||
*/
|
||||
public byte[] getCompressedChat() {
|
||||
return compressedChat.clone();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
package org.apollo.game.message.impl;
|
||||
|
||||
import org.apollo.net.message.Message;
|
||||
|
||||
/**
|
||||
* A {@link Message} sent by the client to send a public chat message to other players.
|
||||
*
|
||||
* @author Graham
|
||||
*/
|
||||
public final class PublicChatMessage extends ChatMessage {
|
||||
|
||||
/**
|
||||
* The text color.
|
||||
*/
|
||||
private final int color;
|
||||
|
||||
/**
|
||||
* The text effects.
|
||||
*/
|
||||
private final int effects;
|
||||
|
||||
/**
|
||||
* Creates a new chat message.
|
||||
*
|
||||
* @param message The message.
|
||||
* @param compressedMessage The compressed message.
|
||||
* @param color The text color.
|
||||
* @param effects The text effects.
|
||||
*/
|
||||
public PublicChatMessage(String message, byte[] compressedMessage, int color, int effects) {
|
||||
super(message, compressedMessage);
|
||||
this.color = color;
|
||||
this.effects = effects;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the text color.
|
||||
*
|
||||
* @return The text color.
|
||||
*/
|
||||
public int getTextColor() {
|
||||
return color;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the text effects.
|
||||
*
|
||||
* @return The text effects.
|
||||
*/
|
||||
public int getTextEffects() {
|
||||
return effects;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -32,7 +32,7 @@ public final class PrivateChatMessageDecoder extends MessageDecoder<PrivateChatM
|
||||
byte[] recompressed = new byte[length];
|
||||
TextUtil.compress(decompressed, recompressed);
|
||||
|
||||
return new PrivateChatMessage(username, new String(decompressed), recompressed);
|
||||
return new PrivateChatMessage(new String(decompressed), recompressed, username);
|
||||
}
|
||||
|
||||
}
|
||||
+5
-5
@@ -1,6 +1,6 @@
|
||||
package org.apollo.game.release.r317;
|
||||
|
||||
import org.apollo.game.message.impl.ChatMessage;
|
||||
import org.apollo.game.message.impl.PublicChatMessage;
|
||||
import org.apollo.net.codec.game.DataTransformation;
|
||||
import org.apollo.net.codec.game.DataType;
|
||||
import org.apollo.net.codec.game.GamePacket;
|
||||
@@ -9,14 +9,14 @@ import org.apollo.net.release.MessageDecoder;
|
||||
import org.apollo.util.TextUtil;
|
||||
|
||||
/**
|
||||
* A {@link MessageDecoder} for the {@link ChatMessage}.
|
||||
* A {@link MessageDecoder} for the {@link PublicChatMessage}.
|
||||
*
|
||||
* @author Graham
|
||||
*/
|
||||
public final class ChatMessageDecoder extends MessageDecoder<ChatMessage> {
|
||||
public final class PublicChatMessageDecoder extends MessageDecoder<PublicChatMessage> {
|
||||
|
||||
@Override
|
||||
public ChatMessage decode(GamePacket packet) {
|
||||
public PublicChatMessage decode(GamePacket packet) {
|
||||
GamePacketReader reader = new GamePacketReader(packet);
|
||||
|
||||
int effects = (int) reader.getUnsigned(DataType.BYTE, DataTransformation.SUBTRACT);
|
||||
@@ -34,7 +34,7 @@ public final class ChatMessageDecoder extends MessageDecoder<ChatMessage> {
|
||||
TextUtil.compress(uncompressed, recompressed);
|
||||
// in case invalid data gets sent, this effectively verifies it
|
||||
|
||||
return new ChatMessage(uncompressed, recompressed, color, effects);
|
||||
return new PublicChatMessage(uncompressed, recompressed, color, effects);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -109,7 +109,7 @@ public final class Release317 extends Release {
|
||||
|
||||
register(0, new KeepAliveMessageDecoder());
|
||||
register(101, new PlayerDesignMessageDecoder());
|
||||
register(4, new ChatMessageDecoder());
|
||||
register(4, new PublicChatMessageDecoder());
|
||||
register(103, new CommandMessageDecoder());
|
||||
register(214, new SwitchItemMessageDecoder());
|
||||
|
||||
|
||||
@@ -32,7 +32,7 @@ public final class PrivateChatMessageDecoder extends MessageDecoder<PrivateChatM
|
||||
byte[] recompressed = new byte[length];
|
||||
TextUtil.compress(decompressed, recompressed);
|
||||
|
||||
return new PrivateChatMessage(username, decompressed, recompressed);
|
||||
return new PrivateChatMessage(decompressed, recompressed, username);
|
||||
}
|
||||
|
||||
}
|
||||
+5
-5
@@ -1,6 +1,6 @@
|
||||
package org.apollo.game.release.r377;
|
||||
|
||||
import org.apollo.game.message.impl.ChatMessage;
|
||||
import org.apollo.game.message.impl.PublicChatMessage;
|
||||
import org.apollo.net.codec.game.DataTransformation;
|
||||
import org.apollo.net.codec.game.DataType;
|
||||
import org.apollo.net.codec.game.GamePacket;
|
||||
@@ -9,14 +9,14 @@ import org.apollo.net.release.MessageDecoder;
|
||||
import org.apollo.util.TextUtil;
|
||||
|
||||
/**
|
||||
* A {@link MessageDecoder} for the {@link ChatMessage}.
|
||||
* A {@link MessageDecoder} for the {@link PublicChatMessage}.
|
||||
*
|
||||
* @author Graham
|
||||
*/
|
||||
public final class ChatMessageDecoder extends MessageDecoder<ChatMessage> {
|
||||
public final class PublicChatMessageDecoder extends MessageDecoder<PublicChatMessage> {
|
||||
|
||||
@Override
|
||||
public ChatMessage decode(GamePacket packet) {
|
||||
public PublicChatMessage decode(GamePacket packet) {
|
||||
GamePacketReader reader = new GamePacketReader(packet);
|
||||
|
||||
int color = (int) reader.getUnsigned(DataType.BYTE, DataTransformation.NEGATE);
|
||||
@@ -34,7 +34,7 @@ public final class ChatMessageDecoder extends MessageDecoder<ChatMessage> {
|
||||
byte[] recompressed = new byte[length];
|
||||
TextUtil.compress(uncompressed, recompressed); // in case invalid data gets sent, this effectively verifies it
|
||||
|
||||
return new ChatMessage(uncompressed, recompressed, color, effects);
|
||||
return new PublicChatMessage(uncompressed, recompressed, color, effects);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -108,7 +108,7 @@ public final class Release377 extends Release {
|
||||
|
||||
register(248, new KeepAliveMessageDecoder());
|
||||
register(163, new PlayerDesignMessageDecoder());
|
||||
register(49, new ChatMessageDecoder());
|
||||
register(49, new PublicChatMessageDecoder());
|
||||
register(56, new CommandMessageDecoder());
|
||||
register(123, new SwitchItemMessageDecoder());
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package org.apollo.game.sync.block;
|
||||
|
||||
import org.apollo.game.message.impl.ChatMessage;
|
||||
import org.apollo.game.message.impl.PublicChatMessage;
|
||||
import org.apollo.game.model.entity.setting.PrivilegeLevel;
|
||||
|
||||
/**
|
||||
@@ -11,9 +11,9 @@ import org.apollo.game.model.entity.setting.PrivilegeLevel;
|
||||
public final class ChatBlock extends SynchronizationBlock {
|
||||
|
||||
/**
|
||||
* The {@link ChatMessage}.
|
||||
* The {@link PublicChatMessage}.
|
||||
*/
|
||||
private final ChatMessage chatMessage;
|
||||
private final PublicChatMessage chatMessage;
|
||||
|
||||
/**
|
||||
* The {@link PrivilegeLevel}.
|
||||
@@ -24,9 +24,9 @@ public final class ChatBlock extends SynchronizationBlock {
|
||||
* Creates the chat block.
|
||||
*
|
||||
* @param privilegeLevel The {@link PrivilegeLevel} of the player who said the message.
|
||||
* @param chatMessage The {@link ChatMessage}.
|
||||
* @param chatMessage The {@link PublicChatMessage}.
|
||||
*/
|
||||
ChatBlock(PrivilegeLevel privilegeLevel, ChatMessage chatMessage) {
|
||||
ChatBlock(PrivilegeLevel privilegeLevel, PublicChatMessage chatMessage) {
|
||||
this.privilegeLevel = privilegeLevel;
|
||||
this.chatMessage = chatMessage;
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package org.apollo.game.sync.block;
|
||||
|
||||
import org.apollo.game.message.impl.ChatMessage;
|
||||
import org.apollo.game.message.impl.PublicChatMessage;
|
||||
import org.apollo.game.model.Animation;
|
||||
import org.apollo.game.model.Direction;
|
||||
import org.apollo.game.model.Graphic;
|
||||
@@ -47,7 +47,7 @@ public abstract class SynchronizationBlock {
|
||||
* @param chatMessage The chat message.
|
||||
* @return The chat block.
|
||||
*/
|
||||
public static SynchronizationBlock createChatBlock(Player player, ChatMessage chatMessage) {
|
||||
public static SynchronizationBlock createChatBlock(Player player, PublicChatMessage chatMessage) {
|
||||
return new ChatBlock(player.getPrivilegeLevel(), chatMessage);
|
||||
}
|
||||
|
||||
|
||||
+6
-6
@@ -1,6 +1,6 @@
|
||||
package org.apollo.game.message.handler;
|
||||
|
||||
import org.apollo.game.message.impl.ChatMessage;
|
||||
import org.apollo.game.message.impl.PublicChatMessage;
|
||||
import org.apollo.game.model.World;
|
||||
import org.apollo.game.model.entity.Player;
|
||||
import org.junit.Test;
|
||||
@@ -15,10 +15,10 @@ import static org.powermock.api.mockito.PowerMockito.*;
|
||||
|
||||
@RunWith(PowerMockRunner.class)
|
||||
@PrepareForTest({Player.class})
|
||||
public final class ChatMessageHandlerTests {
|
||||
public final class PublicChatMessageHandlerTests {
|
||||
|
||||
private final World world = new World();
|
||||
private final ChatMessageHandler chatMessageHandler = new ChatMessageHandler(world);
|
||||
private final PublicChatMessageHandler handler = new PublicChatMessageHandler(world);
|
||||
|
||||
@Test
|
||||
public void terminateIfMuted() throws Exception {
|
||||
@@ -26,9 +26,9 @@ public final class ChatMessageHandlerTests {
|
||||
|
||||
when(player.isMuted()).thenReturn(true);
|
||||
|
||||
ChatMessage chatMessage = new ChatMessage("Test", "Test".getBytes(), 0, 0);
|
||||
chatMessageHandler.handle(player, chatMessage);
|
||||
PublicChatMessage publicChatMessage = new PublicChatMessage("Test", "Test".getBytes(), 0, 0);
|
||||
handler.handle(player, publicChatMessage);
|
||||
|
||||
assertTrue("ChatMessageHandler: player can send messages when muted", chatMessage.terminated());
|
||||
assertTrue("PublicChatMessageHandler: player can send messages when muted", publicChatMessage.terminated());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user