Qrb3000CodecFactory.java 1.72 KB
package com.example.mina.box.qrb3000;

import org.apache.mina.core.buffer.IoBuffer;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.codec.*;

/**
 * @author dy
 * @date 20/07/07
 */
public class Qrb3000CodecFactory implements ProtocolCodecFactory {

    @Override
    public ProtocolEncoder getEncoder(IoSession session) {
        return new Qrb3000MessageEncoder();
    }

    @Override
    public ProtocolDecoder getDecoder(IoSession session) {
        return new Qrb3000MessageDecoder();
    }

    static class Qrb3000MessageEncoder implements ProtocolEncoder {

        @Override
        public void encode(IoSession session, Object message, ProtocolEncoderOutput out) {

            if (message instanceof Qrb3000ResponseMessage) {

                byte[] result = ((Qrb3000ResponseMessage) message).getResult();
                session.write(IoBuffer.wrap(result));
            }
        }

        @Override
        public void dispose(IoSession session) {
        }

    }

    static class Qrb3000MessageDecoder implements ProtocolDecoder {


        @Override
        public void decode(IoSession session, IoBuffer in, ProtocolDecoderOutput out) throws Exception {

            byte[] bytes = new byte[in.limit()];
            in.get(bytes);

            Qrb3000RequestMessage requestMessage = Qrb3000RequestMessage.builder()
                    .input(bytes)
                    .readNum(bytes.length)
                    .build();

            out.write(requestMessage);
        }

        @Override
        public void finishDecode(IoSession session, ProtocolDecoderOutput out) throws Exception {

        }

        @Override
        public void dispose(IoSession session) throws Exception {

        }

    }

}