/*
* Blitz Trading
*/
package executionserver.mina.codecs;
import BE.BEConnectResponse;
import BE.BEOrderList;
import BE.BEOrderUpdate;
import com.google.protobuf.Message;
import executionserver.domain.MessageHeader;
import executionserver.domain.MessageTypes;
import org.apache.mina.common.ByteBuffer;
import org.apache.mina.common.IoSession;
import org.apache.mina.filter.codec.ProtocolEncoder;
import org.apache.mina.filter.codec.ProtocolEncoderOutput;
/**
*
* @author Sylvio Azevedo <sylvio.azevedo@blitz-trading.com>
*/
public class ProtobufEncoder implements ProtocolEncoder {
@Override
public void encode(IoSession session, Object msg, ProtocolEncoderOutput out) throws Exception {
ByteBuffer buffer;
if(msg instanceof String) {
String toSend = (String) msg;
buffer = ByteBuffer.allocate(toSend.length());
buffer.put(toSend.getBytes());
buffer.flip();
if(buffer!=null)
{
out.write(buffer);
out.flush();
}
}
else {
MessageHeader header = new MessageHeader();
Message response = (Message) msg;
header.type = MessageTypes.NONE;
if(msg instanceof BEConnectResponse.ConnectResponse) {
header.type = MessageTypes.CONNECT_RESPONSE;
}
if(msg instanceof BEOrderUpdate.OrderUpdate) {
header.type = MessageTypes.ORDER_UPDATE;
}
if(msg instanceof BEOrderList.DataOrderList) {
header.type = MessageTypes.ORDER_LIST;
}
if(header.type == MessageTypes.NONE) {
return;
}
header.bodySize = response.toByteArray().length;
buffer = ByteBuffer.allocate(header.size() + response.toByteArray().length);
buffer.put(header.toByteArray());
buffer.put(response.toByteArray());
buffer.flip();
out.write(buffer);
out.flush();
}
}
@Override
public void dispose(IoSession is) throws Exception {
// nothing to do.
}
}