/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package executionserver.mina.codecs; import com.mongodb.DBEncoder; import com.mongodb.DefaultDBEncoder; 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; import org.bson.BasicBSONObject; import org.bson.io.BasicOutputBuffer; import org.bson.io.OutputBuffer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * * @author spquant */ public class BsonEncoder implements ProtocolEncoder { private final Logger logger = LoggerFactory.getLogger(BsonEncoder.class); @Override public void encode(IoSession session, Object msg, ProtocolEncoderOutput out) throws Exception { logger.info("Write response object."); DBEncoder encoder = DefaultDBEncoder.FACTORY.create(); OutputBuffer ob = new BasicOutputBuffer(); encoder.writeObject(ob, (BasicBSONObject) msg); ByteBuffer buffer = ByteBuffer.allocate(ob.size() + 4); buffer.putInt(ob.size()); buffer.put(ob.toByteArray()); buffer.flip(); out.write(buffer); out.flush(); } @Override public void dispose(IoSession session) throws Exception { // not thing to do. } }