Merge pull request #286 from CharlesVaneenoo/TemplateMethod-ChatMessage

Make ChatMessage abstract
This commit is contained in:
Major
2016-03-19 23:14:59 +00:00
16 changed files with 141 additions and 149 deletions
+3 -3
View File
@@ -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();
}
}
}
@@ -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);
}
}
@@ -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);
}
}
@@ -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);
}
@@ -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());
}
}