Commit 24aee0286dfc227c7ee260153913ac058a0edf86
1 parent
a37ded0a
Exists in
develop
feat: 修改message的解析放DeCoder中
Showing
6 changed files
with
118 additions
and
56 deletions
Show diff stats
src/main/java/com/example/mina/base/BaseRequestMessage.java
src/main/java/com/example/mina/base/BaseResponseMessage.java
@@ -15,6 +15,10 @@ import lombok.experimental.SuperBuilder; | @@ -15,6 +15,10 @@ import lombok.experimental.SuperBuilder; | ||
15 | @NoArgsConstructor | 15 | @NoArgsConstructor |
16 | public abstract class BaseResponseMessage { | 16 | public abstract class BaseResponseMessage { |
17 | 17 | ||
18 | + public static final byte[] ERROR = "ERROR".getBytes(); | ||
19 | + | ||
20 | + public static final byte[] NONE = "OK".getBytes(); | ||
21 | + | ||
18 | protected byte[] result; | 22 | protected byte[] result; |
19 | 23 | ||
20 | protected int in; | 24 | protected int in; |
src/main/java/com/example/mina/box/aeroflex/AeroflexCodecFactory.java
1 | package com.example.mina.box.aeroflex; | 1 | package com.example.mina.box.aeroflex; |
2 | 2 | ||
3 | +import com.example.mina.util.StrUtil; | ||
3 | import org.apache.mina.core.buffer.IoBuffer; | 4 | import org.apache.mina.core.buffer.IoBuffer; |
4 | import org.apache.mina.core.session.IoSession; | 5 | import org.apache.mina.core.session.IoSession; |
5 | import org.apache.mina.filter.codec.*; | 6 | import org.apache.mina.filter.codec.*; |
@@ -46,11 +47,66 @@ public class AeroflexCodecFactory implements ProtocolCodecFactory { | @@ -46,11 +47,66 @@ public class AeroflexCodecFactory implements ProtocolCodecFactory { | ||
46 | byte[] bytes = new byte[in.limit()]; | 47 | byte[] bytes = new byte[in.limit()]; |
47 | in.get(bytes); | 48 | in.get(bytes); |
48 | 49 | ||
50 | + AeroflexRequestMessage requestMessage = getAeroflexRequestMessage(bytes); | ||
51 | + out.write(requestMessage); | ||
52 | + } | ||
53 | + | ||
54 | + private AeroflexRequestMessage getAeroflexRequestMessage(byte[] bytes) { | ||
55 | + | ||
56 | + String cmd = new String(bytes).trim(); | ||
57 | + | ||
49 | AeroflexRequestMessage requestMessage = AeroflexRequestMessage.builder() | 58 | AeroflexRequestMessage requestMessage = AeroflexRequestMessage.builder() |
50 | - .cmd(new String(bytes)) | 59 | + .cmd(cmd) |
51 | .build(); | 60 | .build(); |
52 | 61 | ||
53 | - out.write(requestMessage); | 62 | + // eg: "ATTN ALL MAX" |
63 | + if (cmd.startsWith(AeroflexRequestMessage.SET_ALL)) { | ||
64 | + requestMessage.setRequestSetAllMax(true); | ||
65 | + return requestMessage; | ||
66 | + } | ||
67 | + | ||
68 | + // eg: "ATTN? 1" | ||
69 | + if (cmd.startsWith(AeroflexRequestMessage.GET_ONE)) { | ||
70 | + | ||
71 | + // eg: ["ATTN?", "1"] | ||
72 | + String[] sss = cmd.split(AeroflexRequestMessage.SPACE_SPLIT); | ||
73 | + | ||
74 | + if (sss.length < 2) { | ||
75 | + requestMessage.setHasError(true); | ||
76 | + return requestMessage; | ||
77 | + } | ||
78 | + | ||
79 | + int row = StrUtil.toInt(sss[1]); | ||
80 | + requestMessage.setRequestGetOne(true); | ||
81 | + requestMessage.setRequestGetOneRow(row); | ||
82 | + return requestMessage; | ||
83 | + | ||
84 | + } | ||
85 | + | ||
86 | + // eg: "ATTN 2 3;" | ||
87 | + if (cmd.startsWith(AeroflexRequestMessage.SET_ONE)) { | ||
88 | + | ||
89 | + // eg: ["ATTN 2 3"] | ||
90 | + String[] aa = cmd.split(AeroflexRequestMessage.SEMICOLON_SPLIT); | ||
91 | + | ||
92 | + // eg: ["ATTN", "2", "3"] | ||
93 | + String[] sss = aa[0].split(AeroflexRequestMessage.SPACE_SPLIT); | ||
94 | + | ||
95 | + if (sss.length < 3) { | ||
96 | + requestMessage.setHasError(true); | ||
97 | + return requestMessage; | ||
98 | + } | ||
99 | + | ||
100 | + int row = StrUtil.toInt(sss[1]); | ||
101 | + int val = StrUtil.toInt(sss[2]); | ||
102 | + requestMessage.setRequestSetOne(true); | ||
103 | + requestMessage.setRequestSetOneRow(row); | ||
104 | + requestMessage.setRequestSetOneValue(val); | ||
105 | + return requestMessage; | ||
106 | + } | ||
107 | + | ||
108 | + requestMessage.setHasError(true); | ||
109 | + return requestMessage; | ||
54 | } | 110 | } |
55 | 111 | ||
56 | @Override | 112 | @Override |
src/main/java/com/example/mina/box/aeroflex/AeroflexRequestMessage.java
@@ -16,4 +16,26 @@ import lombok.experimental.SuperBuilder; | @@ -16,4 +16,26 @@ import lombok.experimental.SuperBuilder; | ||
16 | @AllArgsConstructor | 16 | @AllArgsConstructor |
17 | public class AeroflexRequestMessage extends BaseRequestMessage { | 17 | public class AeroflexRequestMessage extends BaseRequestMessage { |
18 | 18 | ||
19 | + public static final String SET_ALL = "ATTN ALL MAX"; | ||
20 | + | ||
21 | + public static final String SET_ONE = "ATTN"; | ||
22 | + | ||
23 | + public static final String GET_ONE = "ATTN?"; | ||
24 | + | ||
25 | + public static final String SPACE_SPLIT = " "; | ||
26 | + | ||
27 | + public static final String SEMICOLON_SPLIT = ";"; | ||
28 | + | ||
29 | + private boolean requestSetAllMax; | ||
30 | + | ||
31 | + private boolean requestSetOne; | ||
32 | + | ||
33 | + private int requestSetOneRow; | ||
34 | + | ||
35 | + private int requestSetOneValue; | ||
36 | + | ||
37 | + private boolean requestGetOne; | ||
38 | + | ||
39 | + private int requestGetOneRow; | ||
40 | + | ||
19 | } | 41 | } |
src/main/java/com/example/mina/box/aeroflex/AeroflexResponseMessage.java
@@ -16,4 +16,5 @@ import lombok.experimental.SuperBuilder; | @@ -16,4 +16,5 @@ import lombok.experimental.SuperBuilder; | ||
16 | @AllArgsConstructor | 16 | @AllArgsConstructor |
17 | public class AeroflexResponseMessage extends BaseResponseMessage { | 17 | public class AeroflexResponseMessage extends BaseResponseMessage { |
18 | 18 | ||
19 | + | ||
19 | } | 20 | } |
src/main/java/com/example/mina/box/aeroflex/AeroflexVirtualBoxHandler.java
@@ -2,7 +2,6 @@ package com.example.mina.box.aeroflex; | @@ -2,7 +2,6 @@ package com.example.mina.box.aeroflex; | ||
2 | 2 | ||
3 | import com.example.mina.base.AbstractVirtualBoxHandler; | 3 | import com.example.mina.base.AbstractVirtualBoxHandler; |
4 | import com.example.mina.entity.AeroflexDataBuffer; | 4 | import com.example.mina.entity.AeroflexDataBuffer; |
5 | -import com.example.mina.util.StrUtil; | ||
6 | import lombok.extern.slf4j.Slf4j; | 5 | import lombok.extern.slf4j.Slf4j; |
7 | import org.apache.mina.core.session.IoSession; | 6 | import org.apache.mina.core.session.IoSession; |
8 | 7 | ||
@@ -14,20 +13,6 @@ import org.apache.mina.core.session.IoSession; | @@ -14,20 +13,6 @@ import org.apache.mina.core.session.IoSession; | ||
14 | public class AeroflexVirtualBoxHandler | 13 | public class AeroflexVirtualBoxHandler |
15 | extends AbstractVirtualBoxHandler<AeroflexRequestMessage, AeroflexResponseMessage> { | 14 | extends AbstractVirtualBoxHandler<AeroflexRequestMessage, AeroflexResponseMessage> { |
16 | 15 | ||
17 | - private static final byte[] ERROR = "ERROR".getBytes(); | ||
18 | - | ||
19 | - private static final byte[] NONE = "OK".getBytes(); | ||
20 | - | ||
21 | - private static final String SET_ALL = "ATTN ALL MAX"; | ||
22 | - | ||
23 | - private static final String SET_ONE = "ATTN"; | ||
24 | - | ||
25 | - private static final String GET_ONE = "ATTN?"; | ||
26 | - | ||
27 | - private static final String SPACE_SPLIT = " "; | ||
28 | - | ||
29 | - private static final String SEMICOLON_SPLIT = ";"; | ||
30 | - | ||
31 | private AeroflexDataBuffer dataBuffer; | 16 | private AeroflexDataBuffer dataBuffer; |
32 | 17 | ||
33 | @Override | 18 | @Override |
@@ -40,61 +25,53 @@ public class AeroflexVirtualBoxHandler | @@ -40,61 +25,53 @@ public class AeroflexVirtualBoxHandler | ||
40 | dataBuffer = new AeroflexDataBuffer(row, maxAttenuate); | 25 | dataBuffer = new AeroflexDataBuffer(row, maxAttenuate); |
41 | } | 26 | } |
42 | 27 | ||
43 | - | ||
44 | @Override | 28 | @Override |
45 | - protected AeroflexResponseMessage handleMessage(AeroflexRequestMessage message) { | ||
46 | - String command = message.getCmd().trim(); | 29 | + protected AeroflexResponseMessage handleMessage(AeroflexRequestMessage requestMessage) { |
47 | 30 | ||
48 | - log.info("aeroflexVirtualBoxHandler receive: {}", command); | 31 | + log.info("aeroflexVirtualBoxHandler receive: {}", requestMessage.getCmd()); |
49 | 32 | ||
50 | - if (command.startsWith(SET_ALL)) { | ||
51 | - //set all to max | 33 | + if (requestMessage.isHasError()) { |
34 | + return AeroflexResponseMessage.builder().result(AeroflexResponseMessage.ERROR).build(); | ||
35 | + } | ||
36 | + | ||
37 | + // set all to max | ||
38 | + if (requestMessage.isRequestSetAllMax()) { | ||
52 | for (int i = 1; i < dataBuffer.getMaxRow(); i++) { | 39 | for (int i = 1; i < dataBuffer.getMaxRow(); i++) { |
53 | dataBuffer.setOffset(i, dataBuffer.getMaxAttenuate()); | 40 | dataBuffer.setOffset(i, dataBuffer.getMaxAttenuate()); |
54 | } | 41 | } |
42 | + return AeroflexResponseMessage.builder().result(AeroflexResponseMessage.NONE).build(); | ||
43 | + } | ||
55 | 44 | ||
56 | - return AeroflexResponseMessage.builder().result(NONE).build(); | ||
57 | - } else if (command.startsWith(GET_ONE)) { | ||
58 | - //get | ||
59 | - String[] sss = command.split(SPACE_SPLIT); | ||
60 | - if (sss.length >= 2) { | ||
61 | - | ||
62 | - int row = StrUtil.toInt(sss[1]); | ||
63 | - if (row >= 0 && row <= dataBuffer.getMaxRow()) { | ||
64 | - String str = String.valueOf(dataBuffer.getOffset(row)); | ||
65 | - log.info("aeroflexVirtualBoxHandler return: {}", str); | ||
66 | - return AeroflexResponseMessage.builder().result(str.getBytes()).build(); | ||
67 | - } | 45 | + // get one |
46 | + if (requestMessage.isRequestGetOne()) { | ||
47 | + int row = requestMessage.getRequestGetOneRow(); | ||
48 | + if (row >= 0 && row <= dataBuffer.getMaxRow()) { | ||
49 | + String str = String.valueOf(dataBuffer.getOffset(row)); | ||
50 | + log.info("aeroflexVirtualBoxHandler return: {}", str); | ||
51 | + return AeroflexResponseMessage.builder().result(str.getBytes()).build(); | ||
68 | } | 52 | } |
69 | - return AeroflexResponseMessage.builder().result(ERROR).build(); | ||
70 | - | ||
71 | - } else if (command.startsWith(SET_ONE)) { | ||
72 | - //Set, Follow by ATTN? | ||
73 | - String[] aa = command.split(SEMICOLON_SPLIT); | 53 | + return AeroflexResponseMessage.builder().result(AeroflexResponseMessage.NONE).build(); |
74 | 54 | ||
75 | - String[] sss = aa[0].split(SPACE_SPLIT); | ||
76 | - | ||
77 | - if (sss.length >= 3) { | 55 | + } |
78 | 56 | ||
79 | - int row = StrUtil.toInt(sss[1]); | ||
80 | - int val = StrUtil.toInt(sss[2]); | 57 | + // Set, Follow by ATTN? |
58 | + if (requestMessage.isRequestSetOne()) { | ||
81 | 59 | ||
82 | - if (row >= 0 && row <= dataBuffer.getMaxRow()) { | ||
83 | - if (val >= 0 && val <= dataBuffer.getMaxAttenuate()) { | ||
84 | - dataBuffer.setOffset(row, val); | 60 | + int row = requestMessage.getRequestSetOneRow(); |
61 | + int val = requestMessage.getRequestSetOneValue(); | ||
85 | 62 | ||
86 | - String str = String.valueOf(dataBuffer.getOffset(row)); | ||
87 | - log.info("aeroflexVirtualBoxHandler return =====> {}", str); | ||
88 | - return AeroflexResponseMessage.builder().result(str.getBytes()).build(); | ||
89 | - } | 63 | + if (row >= 0 && row <= dataBuffer.getMaxRow()) { |
64 | + if (val >= 0 && val <= dataBuffer.getMaxAttenuate()) { | ||
65 | + dataBuffer.setOffset(row, val); | ||
66 | + String str = String.valueOf(dataBuffer.getOffset(row)); | ||
67 | + log.info("aeroflexVirtualBoxHandler return =====> {}", str); | ||
68 | + return AeroflexResponseMessage.builder().result(str.getBytes()).build(); | ||
90 | } | 69 | } |
91 | } | 70 | } |
92 | - return AeroflexResponseMessage.builder().result(ERROR).build(); | ||
93 | - | ||
94 | - } else { | ||
95 | - return AeroflexResponseMessage.builder().result(ERROR).build(); | 71 | + return AeroflexResponseMessage.builder().result(AeroflexResponseMessage.ERROR).build(); |
96 | } | 72 | } |
97 | 73 | ||
74 | + return AeroflexResponseMessage.builder().result(AeroflexResponseMessage.ERROR).build(); | ||
98 | } | 75 | } |
99 | 76 | ||
100 | @Override | 77 | @Override |