AeroflexCodecFactory.java 1.7 KB
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 {

        }

    }

}