Add private message support for r377.

This commit is contained in:
Major-
2014-02-12 17:46:56 +00:00
parent 832fb67fcd
commit 7b6d897c31
3 changed files with 75 additions and 0 deletions
@@ -0,0 +1,34 @@
package org.apollo.net.release.r377;
import org.apollo.game.event.impl.ForwardPrivateMessageEvent;
import org.apollo.net.codec.game.DataType;
import org.apollo.net.codec.game.GamePacket;
import org.apollo.net.codec.game.GamePacketBuilder;
import org.apollo.net.meta.PacketType;
import org.apollo.net.release.EventEncoder;
import org.apollo.util.NameUtil;
/**
* An {@link EventEncoder} for the {@link ForwardPrivateMessageEvent}.
*
* @author Major
*/
public final class ForwardPrivateMessageEventEncoder extends EventEncoder<ForwardPrivateMessageEvent> {
/**
* The amount of messages sent globally, offset by a random variable x, {@code 0 <= x < 100000000}.
*/
private static int messageCount = (int) (Math.random() * 100000000);
@Override
public GamePacket encode(ForwardPrivateMessageEvent event) {
GamePacketBuilder builder = new GamePacketBuilder(135, PacketType.VARIABLE_BYTE);
builder.put(DataType.LONG, NameUtil.encodeBase37(event.getSenderUsername()));
builder.put(DataType.INT, messageCount++);
builder.put(DataType.BYTE, event.getSenderPrivilege().toInteger());
builder.putBytes(event.getMessage());
return builder.toGamePacket();
}
}
@@ -4,6 +4,7 @@ import org.apollo.game.event.impl.CloseInterfaceEvent;
import org.apollo.game.event.impl.ConfigEvent;
import org.apollo.game.event.impl.DisplayTabInterfaceEvent;
import org.apollo.game.event.impl.EnterAmountEvent;
import org.apollo.game.event.impl.ForwardPrivateMessageEvent;
import org.apollo.game.event.impl.FriendServerStatusEvent;
import org.apollo.game.event.impl.IdAssignmentEvent;
import org.apollo.game.event.impl.IgnoreListEvent;
@@ -134,6 +135,7 @@ public final class Release377 extends Release {
register(217, new AddIgnoreEventDecoder());
register(141, new RemoveFriendEventDecoder());
register(160, new RemoveIgnoreEventDecoder());
register(227, new SendPrivateMessageEventDecoder());
// register encoders
register(IdAssignmentEvent.class, new IdAssignmentEventEncoder());
@@ -163,6 +165,7 @@ public final class Release377 extends Release {
register(UpdateRunEnergyEvent.class, new UpdateRunEnergyEventEncoder());
register(PrivacyOptionEvent.class, new PrivacyOptionEventEncoder());
register(ForwardPrivateMessageEvent.class, new ForwardPrivateMessageEventEncoder());
register(FriendServerStatusEvent.class, new FriendServerStatusEventEncoder());
register(IgnoreListEvent.class, new IgnoreListEventEncoder());
register(SendFriendEvent.class, new SendFriendEventEncoder());
@@ -0,0 +1,38 @@
package org.apollo.net.release.r377;
import org.apollo.game.event.impl.SendPrivateMessageEvent;
import org.apollo.net.codec.game.DataType;
import org.apollo.net.codec.game.GamePacket;
import org.apollo.net.codec.game.GamePacketReader;
import org.apollo.net.release.EventDecoder;
import org.apollo.util.NameUtil;
import org.apollo.util.TextUtil;
/**
* An {@link EventDecoder} for the {@link SendPrivateMessageEvent}.
*
* @author Major
*/
public final class SendPrivateMessageEventDecoder extends EventDecoder<SendPrivateMessageEvent> {
@Override
public SendPrivateMessageEvent decode(GamePacket packet) {
GamePacketReader reader = new GamePacketReader(packet);
String username = NameUtil.decodeBase37(reader.getSigned(DataType.LONG));
int length = packet.getLength() - 8;
byte[] originalCompressed = new byte[length];
reader.getBytes(originalCompressed);
String uncompressed = TextUtil.uncompress(originalCompressed, length);
uncompressed = TextUtil.filterInvalidCharacters(uncompressed);
uncompressed = TextUtil.capitalize(uncompressed);
byte[] recompressed = new byte[length];
TextUtil.compress(uncompressed, recompressed);
return new SendPrivateMessageEvent(username, new String(uncompressed), recompressed);
}
}