MINA通信enCode实现

来源:互联网 发布:wifi网络域名是什么 编辑:程序博客网 时间:2024/04/29 04:13
public class SocketServerEncoder extends ProtocolEncoderAdapter {
private static final Logger log = Logger
.getLogger(SocketServerEncoder.class);
private Charset charset = null;


public SocketServerEncoder(Charset charset) {
this.charset = charset;
log.debug("Server端#SocketServerEncoder构造方法,当前线程:"
+ Thread.currentThread().getId());
}


public void encode(IoSession session, Object message,
ProtocolEncoderOutput out) throws Exception {
if (message instanceof MessageInfo) {
MessageInfo hmi = (MessageInfo) message;
if (null != hmi) {
IoBuffer buf = IoBuffer.allocate(100).setAutoExpand(true);
buf.order(ByteOrder.LITTLE_ENDIAN);
String smsgbody = hmi.getMsgBody();
byte[] bytearr = smsgbody.getBytes(charset);
hmi.setMsgBodySize((short) bytearr.length);
buf.putShort(hmi.getMsgBodySize());
buf.putShort(hmi.getMsgIdentify());
buf.put(bytearr);
buf.flip();
log.debug("Server端#encode#MessageInfo#消息大小:" + buf.remaining());
out.write(buf);
out.flush();
}
}else{
log.error("Server端#encode#未知的消息类型!");
IoBuffer buf = IoBuffer.allocate(10).setAutoExpand(true);
buf.order(ByteOrder.LITTLE_ENDIAN);
String msgBody="未知的消息编码类型";
byte[] bytearr=msgBody.getBytes(charset);
buf.putShort((short)bytearr.length);
buf.putShort((short)0);//未知的消息类型
buf.put(bytearr);
buf.flip();
log.debug("Server端#encode#重造消息大小:" + buf.remaining());
out.write(buf);
out.flush();
}
}
}
0 0
原创粉丝点击