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 21  
22 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 15 @NoArgsConstructor
16 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 22 protected byte[] result;
19 23  
20 24 protected int in;
... ...
src/main/java/com/example/mina/box/aeroflex/AeroflexCodecFactory.java
1 1 package com.example.mina.box.aeroflex;
2 2  
  3 +import com.example.mina.util.StrUtil;
3 4 import org.apache.mina.core.buffer.IoBuffer;
4 5 import org.apache.mina.core.session.IoSession;
5 6 import org.apache.mina.filter.codec.*;
... ... @@ -46,11 +47,66 @@ public class AeroflexCodecFactory implements ProtocolCodecFactory {
46 47 byte[] bytes = new byte[in.limit()];
47 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 58 AeroflexRequestMessage requestMessage = AeroflexRequestMessage.builder()
50   - .cmd(new String(bytes))
  59 + .cmd(cmd)
51 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 112 @Override
... ...
src/main/java/com/example/mina/box/aeroflex/AeroflexRequestMessage.java
... ... @@ -16,4 +16,26 @@ import lombok.experimental.SuperBuilder;
16 16 @AllArgsConstructor
17 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 16 @AllArgsConstructor
17 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 2  
3 3 import com.example.mina.base.AbstractVirtualBoxHandler;
4 4 import com.example.mina.entity.AeroflexDataBuffer;
5   -import com.example.mina.util.StrUtil;
6 5 import lombok.extern.slf4j.Slf4j;
7 6 import org.apache.mina.core.session.IoSession;
8 7  
... ... @@ -14,20 +13,6 @@ import org.apache.mina.core.session.IoSession;
14 13 public class AeroflexVirtualBoxHandler
15 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 16 private AeroflexDataBuffer dataBuffer;
32 17  
33 18 @Override
... ... @@ -40,61 +25,53 @@ public class AeroflexVirtualBoxHandler
40 25 dataBuffer = new AeroflexDataBuffer(row, maxAttenuate);
41 26 }
42 27  
43   -
44 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 39 for (int i = 1; i < dataBuffer.getMaxRow(); i++) {
53 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 77 @Override
... ...