Hi,
here is the Implement of encode"
@Override
public void encode(IoSession session, Object message,
ProtocolEncoderOutput
out) throws Exception {
IoBuffer buf = IoBuffer.allocate(100);
buf.setAutoExpand(true);
NetMessage msg = (NetMessage) message;
byte[] bs = msg.toByteArray();
int sourceLen = bs.length;
boolean needCompress = isNeedCompress(msg, sourceLen);
if (needCompress) {
bs = ZlibUtils.compressNormal(bs);
}
boolean needEncrypt = isNeedEncrypt(msg);
if (needEncrypt) {
bs = cryptor.encrypt(bs, session);
}
int len = bs.length; //
sourceLen = len; //
if (needCompress) {
len = len + 4;
len = len | 0x20000000;
}
if (needEncrypt) {
len = len | 0x10000000;
}
buf.clear();
buf.putInt(len);
if (needCompress) {
buf.putInt(sourceLen);
}
buf.put(bs);
buf.flip();
out.write(buf);
/*the "InvalidMarkException" happend When the following log is added
try{
JLogger.fixInfo(String.format("encodeMsg session
id[%d], Len[%d],
Compress[%d], msgId[%d], opcode[%d], buf:%s",
session.getId(), sourceLen,
needCompress ? 1 : 0, msg.id,
msg.opcode,NetMessage.ioBufferToString(buf) ));
}catch(Exception e){
JLogger.fixError("print error...",e);
}*/
}
"
the NetMessage.ioBufferToString fuction is "
public static String ioBufferToString(IoBuffer buffer) {
StringBuilder sb = new StringBuilder();
if (buffer.isDirect()) {
sb.append("DirectBuffer");
} else {
sb.append("HeapBuffer");
}
sb.append("[pos=");
sb.append(buffer.position());
sb.append(" lim=");
sb.append(buffer.limit());
sb.append(" cap=");
sb.append(buffer.capacity());
sb.append(": ");
sb.append(buffer.getHexDump());
sb.append(']');
return sb.toString();
}
"
here is the log when the problem happend, it seems happend when multithread
call IoSession.Write()
<http://apache-mina.10907.n7.nabble.com/file/t2155/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20180522094404.png>
<http://apache-mina.10907.n7.nabble.com/file/t2155/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_2.png>
<http://apache-mina.10907.n7.nabble.com/file/t2155/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_3.png>
--
Sent from:
http://apache-mina.10907.n7.nabble.com/Apache-MINA-Developer-Forum-f6809.html