package com.example.mina.client.box.aeroflex; import com.example.mina.client.base.MatrixCommand; import com.example.mina.client.base.MatrixResponse; import lombok.extern.slf4j.Slf4j; import org.apache.mina.core.buffer.IoBuffer; import org.apache.mina.core.session.IoSession; import org.apache.mina.filter.codec.*; import java.nio.charset.CharacterCodingException; import java.nio.charset.CharsetDecoder; import java.nio.charset.CharsetEncoder; import java.nio.charset.StandardCharsets; @Slf4j public class AeroFlexProtocolFactory implements ProtocolCodecFactory { private static final CharsetDecoder DECODER = StandardCharsets.UTF_8.newDecoder(); private static final CharsetEncoder ENCODER = StandardCharsets.UTF_8.newEncoder(); @Override public ProtocolEncoder getEncoder(IoSession ioSession) throws Exception { return new AeroFlexProtocolEncoder(); } @Override public ProtocolDecoder getDecoder(IoSession ioSession) throws Exception { return new AeroFlexProtocolDecoder(); } public static class AeroFlexProtocolEncoder extends ProtocolEncoderAdapter { @Override public void encode(IoSession ioSession, Object msg, ProtocolEncoderOutput protocolEncoderOutput) throws CharacterCodingException { if (!(msg instanceof MatrixCommand)) { log.error("error msg, msg is: {}", msg); return; } MatrixCommand mc = (MatrixCommand) msg; log.info("---发送数据参数!Attn = {},Col = {},Command = {},Row = {},MatrixId = {},type = {}", mc.getAttn(), mc.getCol(), mc.getCommand(), mc.getRow(), mc.getMatrixId(), mc.getType() ); MatrixCommand.Type mcType = mc.getType(); IoBuffer buffer = IoBuffer.allocate(100, false).setAutoExpand(true); if (MatrixCommand.Type.AERO_ATTN_ALL_MAX.equals(mcType)) { buffer.putString("ATTN ALL MAX", ENCODER); } else if (MatrixCommand.Type.AERO_GET_ATTN.equals(mcType)) { buffer.putString("ATTN?", ENCODER); buffer.putString(" ", ENCODER); buffer.putString(mc.getRow().toString(), ENCODER); } else if (MatrixCommand.Type.AERO_SET_ATTN.equals(mcType)) { buffer.putString("ATTN", ENCODER); buffer.putString(" ", ENCODER); buffer.putString(mc.getRow().toString(), ENCODER); buffer.putString(" ", ENCODER); buffer.putString(mc.getAttn().toString(), ENCODER); buffer.putString(";", ENCODER); } buffer.flip(); protocolEncoderOutput.write(buffer); } } public static class AeroFlexProtocolDecoder extends ProtocolDecoderAdapter { @Override public void decode(IoSession ioSession, IoBuffer ioBuffer, ProtocolDecoderOutput protocolDecoderOutput) throws Exception { log.info("--server返回给----client ------IoBuffer{}", ioBuffer); int cmd = ioBuffer.get(); MatrixResponse response = new MatrixResponse(); // todo protocolDecoderOutput.write(ioBuffer); } } }