Commit 24aee0286dfc227c7ee260153913ac058a0edf86

Authored by 杜云山
1 parent a37ded0a
Exists in develop

feat: 修改message的解析放DeCoder中

src/main/java/com/example/mina/base/BaseRequestMessage.java
@@ -21,4 +21,6 @@ public abstract class BaseRequestMessage { @@ -21,4 +21,6 @@ public abstract class BaseRequestMessage {
21 21
22 protected int out; 22 protected int out;
23 23
  24 + protected boolean hasError;
  25 +
24 } 26 }
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