package com.cwa.client.mina;
import com.cwa.client.message.ClientMessageFactory;
import com.cwa.gamecore.message.GameMessage;
import com.cwa.gamecore.util.MessageUtil;
import com.cwa.minaserver.io.MinaGameInput;
import org.apache.mina.core.buffer.IoBuffer;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.codec.CumulativeProtocolDecoder;
import org.apache.mina.filter.codec.ProtocolDecoderOutput;
public class ClientMsgDecoder extends CumulativeProtocolDecoder {
@Override
protected boolean doDecode(IoSession session, IoBuffer input, ProtocolDecoderOutput pdo) throws Exception {
GameMessage response = decode(input);
if (response == null) {
return false;
} else {
pdo.write(response);
return true;
}
}
private GameMessage decode(IoBuffer input) {
if (input.remaining() < 6) {
return null;
}
// read magic code
input.getShort();
if (!input.prefixedDataAvailable(2)) {
input.rewind();
return null;
}
input.rewind();
return (GameMessage) MessageUtil.decode(
new MinaGameInput(input) , ClientMessageFactory.getInstance());
}
}