Commit 5938f6b5904f2c0481b445230fe81e1afc35693b
1 parent
321b0c9e
Exists in
develop
feat: 完成aero客户端发送消息
Showing
4 changed files
with
87 additions
and
24 deletions
Show diff stats
src/main/java/com/example/mina/Application.java
@@ -8,8 +8,7 @@ import org.springframework.boot.SpringApplication; | @@ -8,8 +8,7 @@ import org.springframework.boot.SpringApplication; | ||
8 | import org.springframework.boot.autoconfigure.SpringBootApplication; | 8 | import org.springframework.boot.autoconfigure.SpringBootApplication; |
9 | import org.springframework.context.ConfigurableApplicationContext; | 9 | import org.springframework.context.ConfigurableApplicationContext; |
10 | 10 | ||
11 | -import java.util.HashMap; | ||
12 | -import java.util.Map; | 11 | +import java.util.concurrent.locks.LockSupport; |
13 | 12 | ||
14 | /** | 13 | /** |
15 | * @author 杜云山 | 14 | * @author 杜云山 |
@@ -35,7 +34,13 @@ public class Application { | @@ -35,7 +34,13 @@ public class Application { | ||
35 | MatrixClient client = clientManager.getOrCreateClient(connectConfig); | 34 | MatrixClient client = clientManager.getOrCreateClient(connectConfig); |
36 | 35 | ||
37 | 36 | ||
38 | - client.setAttenuation(1,2,3); | 37 | + client.setAttenuation(1,2,3, MatrixCommand.Type.AERO_ATTN_ALL_MAX); |
38 | + LockSupport.parkNanos(1000_000_000); | ||
39 | + | ||
40 | + client.setAttenuation(1,2,3, MatrixCommand.Type.AERO_SET_ATTN); | ||
41 | + LockSupport.parkNanos(1000_000_000); | ||
42 | + | ||
43 | + client.setAttenuation(1,2,3, MatrixCommand.Type.AERO_GET_ATTN); | ||
39 | 44 | ||
40 | } | 45 | } |
41 | 46 |
src/main/java/com/example/mina/client/base/MatrixClient.java
@@ -121,9 +121,9 @@ public class MatrixClient { | @@ -121,9 +121,9 @@ public class MatrixClient { | ||
121 | sendCommand(command); | 121 | sendCommand(command); |
122 | } | 122 | } |
123 | 123 | ||
124 | - public void setAttenuation(int row, int col, int attn) { | 124 | + public void setAttenuation(int row, int col, int attn, MatrixCommand.Type type) { |
125 | MatrixCommand command = MatrixCommand.builder().command(MatrixConstants.COMMAND_SET_ATTN) | 125 | MatrixCommand command = MatrixCommand.builder().command(MatrixConstants.COMMAND_SET_ATTN) |
126 | - .col(col).row(row).attn(attn).build(); | 126 | + .col(col).row(row).attn(attn).type(type).build(); |
127 | 127 | ||
128 | sendCommand(command); | 128 | sendCommand(command); |
129 | } | 129 | } |
src/main/java/com/example/mina/client/base/MatrixCommand.java
@@ -18,4 +18,27 @@ public class MatrixCommand { | @@ -18,4 +18,27 @@ public class MatrixCommand { | ||
18 | private Integer attn; | 18 | private Integer attn; |
19 | 19 | ||
20 | private Integer offset; | 20 | private Integer offset; |
21 | + | ||
22 | + private Type type; | ||
23 | + | ||
24 | + public enum Type { | ||
25 | + | ||
26 | + /** | ||
27 | + * eg: "ATTN? 1" | ||
28 | + */ | ||
29 | + AERO_GET_ATTN, | ||
30 | + | ||
31 | + /** | ||
32 | + * ATTN 2 3; | ||
33 | + */ | ||
34 | + AERO_SET_ATTN, | ||
35 | + | ||
36 | + /** | ||
37 | + * eg: "ATTN ALL MAX" | ||
38 | + */ | ||
39 | + AERO_ATTN_ALL_MAX, | ||
40 | + | ||
41 | + } | ||
42 | + | ||
21 | } | 43 | } |
44 | + |
src/main/java/com/example/mina/client/box/aeroflex/AeroFlexProtocolFactory.java
@@ -7,9 +7,18 @@ import org.apache.mina.core.buffer.IoBuffer; | @@ -7,9 +7,18 @@ import org.apache.mina.core.buffer.IoBuffer; | ||
7 | import org.apache.mina.core.session.IoSession; | 7 | import org.apache.mina.core.session.IoSession; |
8 | import org.apache.mina.filter.codec.*; | 8 | import org.apache.mina.filter.codec.*; |
9 | 9 | ||
10 | +import java.nio.charset.CharacterCodingException; | ||
11 | +import java.nio.charset.CharsetDecoder; | ||
12 | +import java.nio.charset.CharsetEncoder; | ||
13 | +import java.nio.charset.StandardCharsets; | ||
14 | + | ||
10 | @Slf4j | 15 | @Slf4j |
11 | public class AeroFlexProtocolFactory implements ProtocolCodecFactory { | 16 | public class AeroFlexProtocolFactory implements ProtocolCodecFactory { |
12 | 17 | ||
18 | + private static final CharsetDecoder DECODER = StandardCharsets.UTF_8.newDecoder(); | ||
19 | + | ||
20 | + private static final CharsetEncoder ENCODER = StandardCharsets.UTF_8.newEncoder(); | ||
21 | + | ||
13 | @Override | 22 | @Override |
14 | public ProtocolEncoder getEncoder(IoSession ioSession) throws Exception { | 23 | public ProtocolEncoder getEncoder(IoSession ioSession) throws Exception { |
15 | return new AeroFlexProtocolEncoder(); | 24 | return new AeroFlexProtocolEncoder(); |
@@ -21,40 +30,66 @@ public class AeroFlexProtocolFactory implements ProtocolCodecFactory { | @@ -21,40 +30,66 @@ public class AeroFlexProtocolFactory implements ProtocolCodecFactory { | ||
21 | } | 30 | } |
22 | 31 | ||
23 | public static class AeroFlexProtocolEncoder extends ProtocolEncoderAdapter { | 32 | public static class AeroFlexProtocolEncoder extends ProtocolEncoderAdapter { |
33 | + | ||
24 | @Override | 34 | @Override |
25 | - public void encode(IoSession ioSession, Object msg, ProtocolEncoderOutput protocolEncoderOutput) throws Exception { | 35 | + public void encode(IoSession ioSession, Object msg, ProtocolEncoderOutput protocolEncoderOutput) |
36 | + throws CharacterCodingException { | ||
26 | 37 | ||
27 | - if(! (msg instanceof MatrixCommand) ) { | 38 | + if (!(msg instanceof MatrixCommand)) { |
28 | log.error("error msg, msg is: {}", msg); | 39 | log.error("error msg, msg is: {}", msg); |
29 | return; | 40 | return; |
30 | - }else{ | ||
31 | - MatrixCommand mc = (MatrixCommand) msg; | ||
32 | - log.info("---发送数据参数!Attn = {},Col = {},Command = {},Row = {},MatrixId = {}", mc.getAttn(),mc.getCol(),mc.getCommand(),mc.getRow(),mc.getMatrixId()); | ||
33 | - IoBuffer buffer = IoBuffer.allocate(100, false).setAutoExpand(true); | ||
34 | - buffer.putInt(mc.getCommand()); | ||
35 | - buffer.putInt(mc.getAttn()); | ||
36 | - buffer.putInt(mc.getCol()); | ||
37 | - buffer.putInt(mc.getRow()); | ||
38 | - | ||
39 | - //buffer.put(lm.getContent().getBytes(charset)); | ||
40 | - | ||
41 | - buffer.flip(); | ||
42 | - protocolEncoderOutput.write(buffer); | ||
43 | - log.info("-=-=-=-=-=-=send finish=="); | ||
44 | } | 41 | } |
42 | + | ||
43 | + MatrixCommand mc = (MatrixCommand) msg; | ||
44 | + log.info("---发送数据参数!Attn = {},Col = {},Command = {},Row = {},MatrixId = {},type = {}", | ||
45 | + mc.getAttn(), | ||
46 | + mc.getCol(), | ||
47 | + mc.getCommand(), | ||
48 | + mc.getRow(), | ||
49 | + mc.getMatrixId(), | ||
50 | + mc.getType() | ||
51 | + ); | ||
52 | + MatrixCommand.Type mcType = mc.getType(); | ||
53 | + | ||
54 | + IoBuffer buffer = IoBuffer.allocate(100, false).setAutoExpand(true); | ||
55 | + | ||
56 | + if (MatrixCommand.Type.AERO_ATTN_ALL_MAX.equals(mcType)) { | ||
57 | + | ||
58 | + buffer.putString("ATTN ALL MAX", ENCODER); | ||
59 | + | ||
60 | + } else if (MatrixCommand.Type.AERO_GET_ATTN.equals(mcType)) { | ||
61 | + | ||
62 | + buffer.putString("ATTN?", ENCODER); | ||
63 | + buffer.putString(" ", ENCODER); | ||
64 | + buffer.putString(mc.getRow().toString(), ENCODER); | ||
65 | + | ||
66 | + } else if (MatrixCommand.Type.AERO_SET_ATTN.equals(mcType)) { | ||
67 | + | ||
68 | + buffer.putString("ATTN", ENCODER); | ||
69 | + buffer.putString(" ", ENCODER); | ||
70 | + buffer.putString(mc.getRow().toString(), ENCODER); | ||
71 | + buffer.putString(" ", ENCODER); | ||
72 | + buffer.putString(mc.getAttn().toString(), ENCODER); | ||
73 | + buffer.putString(";", ENCODER); | ||
74 | + } | ||
75 | + | ||
76 | + buffer.flip(); | ||
77 | + protocolEncoderOutput.write(buffer); | ||
45 | } | 78 | } |
46 | } | 79 | } |
47 | 80 | ||
48 | - | ||
49 | public static class AeroFlexProtocolDecoder extends ProtocolDecoderAdapter { | 81 | public static class AeroFlexProtocolDecoder extends ProtocolDecoderAdapter { |
50 | 82 | ||
51 | @Override | 83 | @Override |
52 | - public void decode(IoSession ioSession, IoBuffer ioBuffer, ProtocolDecoderOutput protocolDecoderOutput) throws Exception { | ||
53 | - log.info("--server返回给----client ------IoBuffer{}" , ioBuffer); | 84 | + public void decode(IoSession ioSession, IoBuffer ioBuffer, ProtocolDecoderOutput protocolDecoderOutput) |
85 | + throws Exception { | ||
86 | + log.info("--server返回给----client ------IoBuffer{}", ioBuffer); | ||
54 | int cmd = ioBuffer.get(); | 87 | int cmd = ioBuffer.get(); |
55 | MatrixResponse response = new MatrixResponse(); // todo | 88 | MatrixResponse response = new MatrixResponse(); // todo |
56 | 89 | ||
57 | protocolDecoderOutput.write(ioBuffer); | 90 | protocolDecoderOutput.write(ioBuffer); |
58 | } | 91 | } |
92 | + | ||
59 | } | 93 | } |
94 | + | ||
60 | } | 95 | } |