/* * IDK Game Server by Steve Winfield * https://github.com/WinfieldSteve */ package org.stevewinfield.suja.idk.communication; import org.jboss.netty.buffer.ChannelBuffer; import org.jboss.netty.buffer.ChannelBuffers; import org.stevewinfield.suja.idk.encryption.Base64Encryption; import org.stevewinfield.suja.idk.encryption.WireEncryption; import java.nio.charset.Charset; public class MessageWriter { private short headerId; private ChannelBuffer body; private int senderId; public Integer getSenderId() { return senderId; } public short getId() { return headerId; } public MessageWriter(final short outgoingOpCode) { this.initialize(outgoingOpCode); } public void setSender(final int senderId) { this.senderId = senderId; } public void initialize(final short outgoingOpCode) { this.headerId = outgoingOpCode; this.body = ChannelBuffers.dynamicBuffer(); this.push(Base64Encryption.encode(this.headerId)); } public void push(final boolean s) { this.body.writeByte((byte) (s ? 'I' : 'H')); } public void push(final byte[] x) { this.body.writeBytes(x); } public void push(final int i) { this.push(WireEncryption.encode(i)); } public void push(final String s) { this.push(s.replace((char) 2, ' ').replace((char) 1, ' ').replace((char) 0, ' '), true); } public void push(final String s, final boolean breaks) { this.push(s.getBytes()); if (breaks) { this.body.writeByte((byte) 2); } } public void push(final ISerialize x) { x.serialize(this); } public String getDebugString() { final ChannelBuffer bodeh = body.duplicate(); return bodeh.toString(Charset.defaultCharset()); } private ChannelBuffer cachedResult; public ChannelBuffer getBytes() { if (cachedResult == null) { cachedResult = ChannelBuffers.copiedBuffer(this.body); cachedResult.writeByte(1); } return cachedResult; } }