package com.example.mina.box.aeroflex; import org.apache.mina.core.buffer.IoBuffer; import org.apache.mina.core.session.IoSession; import org.apache.mina.filter.codec.*; /** * @author 杜云山 * @date 20/07/07 */ public class AeroflexCodecFactory implements ProtocolCodecFactory { @Override public ProtocolEncoder getEncoder(IoSession session) { return new AeroflexMessageEncoder(); } @Override public ProtocolDecoder getDecoder(IoSession session) { return new AeroflexMessageDecoder(); } static class AeroflexMessageEncoder implements ProtocolEncoder { @Override public void encode(IoSession session, Object message, ProtocolEncoderOutput out) { if (message instanceof AeroflexResponseMessage) { byte[] result = ((AeroflexResponseMessage) message).getResult(); session.write(IoBuffer.wrap(result)); } } @Override public void dispose(IoSession session) { } } static class AeroflexMessageDecoder implements ProtocolDecoder { @Override public void decode(IoSession session, IoBuffer in, ProtocolDecoderOutput out) throws Exception { byte[] bytes = new byte[in.limit()]; in.get(bytes); AeroflexRequestMessage requestMessage = AeroflexRequestMessage.builder() .cmd(new String(bytes)) .build(); out.write(requestMessage); } @Override public void finishDecode(IoSession session, ProtocolDecoderOutput out) throws Exception { } @Override public void dispose(IoSession session) throws Exception { } } }