From 5938f6b5904f2c0481b445230fe81e1afc35693b Mon Sep 17 00:00:00 2001 From: 杜云山 <870666625@qq.com> Date: Fri, 26 Mar 2021 14:46:24 +0800 Subject: [PATCH] feat: 完成aero客户端发送消息 --- src/main/java/com/example/mina/Application.java | 11 ++++++++--- src/main/java/com/example/mina/client/base/MatrixClient.java | 4 ++-- src/main/java/com/example/mina/client/base/MatrixCommand.java | 23 +++++++++++++++++++++++ src/main/java/com/example/mina/client/box/aeroflex/AeroFlexProtocolFactory.java | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------- 4 files changed, 87 insertions(+), 24 deletions(-) diff --git a/src/main/java/com/example/mina/Application.java b/src/main/java/com/example/mina/Application.java index dd6c88f..f3cc4bb 100644 --- a/src/main/java/com/example/mina/Application.java +++ b/src/main/java/com/example/mina/Application.java @@ -8,8 +8,7 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ConfigurableApplicationContext; -import java.util.HashMap; -import java.util.Map; +import java.util.concurrent.locks.LockSupport; /** * @author 杜云山 @@ -35,7 +34,13 @@ public class Application { MatrixClient client = clientManager.getOrCreateClient(connectConfig); - client.setAttenuation(1,2,3); + client.setAttenuation(1,2,3, MatrixCommand.Type.AERO_ATTN_ALL_MAX); + LockSupport.parkNanos(1000_000_000); + + client.setAttenuation(1,2,3, MatrixCommand.Type.AERO_SET_ATTN); + LockSupport.parkNanos(1000_000_000); + + client.setAttenuation(1,2,3, MatrixCommand.Type.AERO_GET_ATTN); } diff --git a/src/main/java/com/example/mina/client/base/MatrixClient.java b/src/main/java/com/example/mina/client/base/MatrixClient.java index 42a9e3a..8474c53 100644 --- a/src/main/java/com/example/mina/client/base/MatrixClient.java +++ b/src/main/java/com/example/mina/client/base/MatrixClient.java @@ -121,9 +121,9 @@ public class MatrixClient { sendCommand(command); } - public void setAttenuation(int row, int col, int attn) { + public void setAttenuation(int row, int col, int attn, MatrixCommand.Type type) { MatrixCommand command = MatrixCommand.builder().command(MatrixConstants.COMMAND_SET_ATTN) - .col(col).row(row).attn(attn).build(); + .col(col).row(row).attn(attn).type(type).build(); sendCommand(command); } diff --git a/src/main/java/com/example/mina/client/base/MatrixCommand.java b/src/main/java/com/example/mina/client/base/MatrixCommand.java index 1658897..1039510 100644 --- a/src/main/java/com/example/mina/client/base/MatrixCommand.java +++ b/src/main/java/com/example/mina/client/base/MatrixCommand.java @@ -18,4 +18,27 @@ public class MatrixCommand { private Integer attn; private Integer offset; + + private Type type; + + public enum Type { + + /** + * eg: "ATTN? 1" + */ + AERO_GET_ATTN, + + /** + * ATTN 2 3; + */ + AERO_SET_ATTN, + + /** + * eg: "ATTN ALL MAX" + */ + AERO_ATTN_ALL_MAX, + + } + } + diff --git a/src/main/java/com/example/mina/client/box/aeroflex/AeroFlexProtocolFactory.java b/src/main/java/com/example/mina/client/box/aeroflex/AeroFlexProtocolFactory.java index 7aa3371..4905707 100644 --- a/src/main/java/com/example/mina/client/box/aeroflex/AeroFlexProtocolFactory.java +++ b/src/main/java/com/example/mina/client/box/aeroflex/AeroFlexProtocolFactory.java @@ -7,9 +7,18 @@ 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(); @@ -21,40 +30,66 @@ public class AeroFlexProtocolFactory implements ProtocolCodecFactory { } public static class AeroFlexProtocolEncoder extends ProtocolEncoderAdapter { + @Override - public void encode(IoSession ioSession, Object msg, ProtocolEncoderOutput protocolEncoderOutput) throws Exception { + public void encode(IoSession ioSession, Object msg, ProtocolEncoderOutput protocolEncoderOutput) + throws CharacterCodingException { - if(! (msg instanceof MatrixCommand) ) { + if (!(msg instanceof MatrixCommand)) { log.error("error msg, msg is: {}", msg); return; - }else{ - MatrixCommand mc = (MatrixCommand) msg; - log.info("---发送数据参数!Attn = {},Col = {},Command = {},Row = {},MatrixId = {}", mc.getAttn(),mc.getCol(),mc.getCommand(),mc.getRow(),mc.getMatrixId()); - IoBuffer buffer = IoBuffer.allocate(100, false).setAutoExpand(true); - buffer.putInt(mc.getCommand()); - buffer.putInt(mc.getAttn()); - buffer.putInt(mc.getCol()); - buffer.putInt(mc.getRow()); - - //buffer.put(lm.getContent().getBytes(charset)); - - buffer.flip(); - protocolEncoderOutput.write(buffer); - log.info("-=-=-=-=-=-=send finish=="); } + + 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); + 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); } + } + } -- libgit2 0.21.2