Lte3000CodecFactory.java 1.81 KB
package com.example.mina.box.lte3000;

import com.example.mina.box.lte3000.Lte3000RequestMessage;
import com.example.mina.box.lte3000.Lte3000ResponseMessage;
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 Lte3000CodecFactory implements ProtocolCodecFactory {

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

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

    static class Lte3000MessageEncoder implements ProtocolEncoder {

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

            if (message instanceof Lte3000ResponseMessage) {

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

        @Override
        public void dispose(IoSession session) {
        }

    }

    static class Lte3000MessageDecoder implements ProtocolDecoder {

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

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

            Lte3000RequestMessage requestMessage = Lte3000RequestMessage.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 {

        }

    }

}