RmasmVirtualBoxHandler.java
3.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
package com.example.mina.server.box.rmasm;
import com.example.mina.server.base.AbstractVirtualBoxHandler;
import com.example.mina.server.entity.RmasmDataBuffer;
import com.example.mina.server.util.RmasmCommandHelper;
import lombok.extern.slf4j.Slf4j;
import org.apache.mina.core.session.IoSession;
import java.nio.charset.StandardCharsets;
import java.util.Random;
/**
* @author 杜云山
* @date 21/03/05
*/
@Slf4j
public class RmasmVirtualBoxHandler extends AbstractVirtualBoxHandler<RmasmRequestMessage, RmasmResponseMessage> {
private RmasmDataBuffer dataBuffer;
@Override
protected void initMatrix() {
int row = 32;
int col = 32;
int maxAttenuate = 30;
dataBuffer = new RmasmDataBuffer(row, col,maxAttenuate);
}
@Override
protected RmasmResponseMessage handleMessage(RmasmRequestMessage requestMessage) {
String command = requestMessage.getCmd();
//String[] split = command.replaceAll("\r\n", "").split(" ");
int maxOutput = dataBuffer.getMaxCol();
if ("SA".equals(requestMessage.getType())) {
// Set Attenuator
String index = requestMessage.getIndex();
String atten = requestMessage.getAttn();
int i = Integer.parseInt(index);
int input = RmasmCommandHelper.getInput(i, maxOutput);
int output = RmasmCommandHelper.getOutput(i, maxOutput);
dataBuffer.setAttenuation(input, output, Integer.parseInt(atten));
int attenuation = dataBuffer.getAttenuation(input, output);
byte[] resultBytes = String.format("A%d:%ddB;\r\n", i, attenuation).getBytes(StandardCharsets.UTF_8);
return RmasmResponseMessage.builder().result(resultBytes).build();
}
if ("RA".equals(requestMessage.getType())) {
// Read Attenuator
String index = requestMessage.getIndex();
int startIndex;
int endIndex;
if (index.contains("-")) {
String[] splitIndex = index.split("-");
startIndex = Integer.parseInt(splitIndex[0]);
endIndex = Integer.parseInt(splitIndex[1]);
} else {
startIndex = Integer.parseInt(index);
endIndex = startIndex;
}
StringBuilder result = new StringBuilder();
for (int i = startIndex; i <= endIndex; i++) {
int input = RmasmCommandHelper.getInput(i, maxOutput);
int output = RmasmCommandHelper.getOutput(i, maxOutput);
int attenuation = dataBuffer.getAttenuation(input, output);
result.append(String.format("A%d:%ddB;", i, attenuation));
}
byte[] resultBytes = result.append("\r\n").toString().getBytes(StandardCharsets.UTF_8);
return RmasmResponseMessage.builder().result(resultBytes).build();
}
if ("RP".equals(requestMessage.getType())) {
// Read power meter
String index = requestMessage.getIndex();
byte[] resultBytes = String.format
("P%s:%.2f;\r\n", index, new Random().nextInt(99) + new Random().nextFloat() - 50)
.getBytes(StandardCharsets.UTF_8);
return RmasmResponseMessage.builder().result(resultBytes).build();
}
byte[] resultBytes = new byte[0];
return RmasmResponseMessage.builder().result(resultBytes).build();
}
@Override
public void sessionCreated(IoSession session) {
log.info("--- abstractVirtual server session created");
}
@Override
public void sessionOpened(IoSession session) {
log.info("--- abstractVirtual server session Opened");
}
@Override
public void sessionClosed(IoSession session) {
log.info("--- abstractVirtual server session Closed");
}
@Override
public void messageSent(IoSession session, Object message) {
log.info("--- abstractVirtual 发送数据成功!{}", message);
}
}