Commit 37821ab202e0ff2d9414e68099c67d359a0b253d
1 parent
5938f6b5
Exists in
develop
feat: 完成REC6000客户端发送HTTP消息
Showing
5 changed files
with
163 additions
and
4 deletions
Show diff stats
src/main/java/com/example/mina/Application.java
1 | 1 | package com.example.mina; |
2 | 2 | |
3 | -import com.example.mina.client.base.ClientManager; | |
4 | -import com.example.mina.client.base.MatrixClient; | |
5 | -import com.example.mina.client.base.MatrixCommand; | |
6 | -import com.example.mina.client.base.MatrixConnectConfig; | |
3 | +import com.example.mina.client.base.*; | |
7 | 4 | import org.springframework.boot.SpringApplication; |
8 | 5 | import org.springframework.boot.autoconfigure.SpringBootApplication; |
9 | 6 | import org.springframework.context.ConfigurableApplicationContext; |
... | ... | @@ -42,6 +39,17 @@ public class Application { |
42 | 39 | |
43 | 40 | client.setAttenuation(1,2,3, MatrixCommand.Type.AERO_GET_ATTN); |
44 | 41 | |
42 | + MatrixConnectConfig REC3000 = MatrixConnectConfig.builder() | |
43 | + .deviceId("158") | |
44 | + .deviceType(MatrixConstants.MATRIX_TYPE_REC3000) | |
45 | + .host("127.0.0.1") | |
46 | + .port(9099) | |
47 | + .build(); | |
48 | + | |
49 | + MatrixClient REC3000Client = clientManager.getOrCreateClient(REC3000); | |
50 | + | |
51 | + REC3000Client.setAttenuation(1, 2, 3, null); | |
52 | + | |
45 | 53 | } |
46 | 54 | |
47 | 55 | } | ... | ... |
src/main/java/com/example/mina/client/base/MatrixConstants.java
... | ... | @@ -8,6 +8,8 @@ public class MatrixConstants { |
8 | 8 | |
9 | 9 | public static final String MATRIX_TYPE_LTE3000 = "LTE3000"; |
10 | 10 | |
11 | + public static final String MATRIX_TYPE_REC3000 = "REC3000"; | |
12 | + | |
11 | 13 | public static final int COMMAND_RESET = 1; |
12 | 14 | |
13 | 15 | public static final int COMMAND_SET_ATTN = 2; | ... | ... |
src/main/java/com/example/mina/client/box/rec6000/REC3000ClientFactory.java
0 → 100644
... | ... | @@ -0,0 +1,23 @@ |
1 | +package com.example.mina.client.box.rec6000; | |
2 | + | |
3 | +import com.example.mina.client.base.AbstractClientFactory; | |
4 | +import com.example.mina.client.base.MatrixConstants; | |
5 | +import org.apache.mina.core.filterchain.IoFilterChain; | |
6 | +import org.apache.mina.filter.codec.ProtocolCodecFilter; | |
7 | +import org.springframework.stereotype.Component; | |
8 | + | |
9 | +@Component(MatrixConstants.MATRIX_TYPE_REC3000) | |
10 | +public class REC3000ClientFactory extends AbstractClientFactory { | |
11 | + | |
12 | + @Override | |
13 | + public REC3000ClientIoHandler getClientHandler() { | |
14 | + System.out.println("=============getClientHandler=================="); | |
15 | + return new REC3000ClientIoHandler(); | |
16 | + } | |
17 | + | |
18 | + @Override | |
19 | + public void buildFilterChain(IoFilterChain ioFilterChain) { | |
20 | + // java.lang.IllegalArgumentException: Other filter is using the same name 'codec' | |
21 | + ioFilterChain.addLast("codec", new ProtocolCodecFilter(new REC3000ProtocolFactory())); | |
22 | + } | |
23 | +} | ... | ... |
src/main/java/com/example/mina/client/box/rec6000/REC3000ClientIoHandler.java
0 → 100644
... | ... | @@ -0,0 +1,37 @@ |
1 | +package com.example.mina.client.box.rec6000; | |
2 | + | |
3 | +import com.example.mina.client.base.AbstractMatrixIoHandler; | |
4 | +import com.example.mina.client.base.MatrixDataProxy; | |
5 | +import lombok.extern.slf4j.Slf4j; | |
6 | +import org.apache.mina.core.session.IoSession; | |
7 | + | |
8 | +/** | |
9 | + * @author dy | |
10 | + * @date 2021/3/10 | |
11 | + */ | |
12 | +@Slf4j | |
13 | +public class REC3000ClientIoHandler extends AbstractMatrixIoHandler { | |
14 | + | |
15 | + //public AeroflexClientIoHandler(MatrixDataProxy matrixDataProxy) { | |
16 | + // super(matrixDataProxy); | |
17 | + // } | |
18 | + | |
19 | + public REC3000ClientIoHandler() { | |
20 | + super(new MatrixDataProxy()); | |
21 | + } | |
22 | + | |
23 | + | |
24 | + @Override | |
25 | + public boolean handleCommandResponse(byte[] response) { | |
26 | + log.info("------REC3000ClientIoHandler-----{}",response); | |
27 | + return false; | |
28 | + } | |
29 | + | |
30 | + @Override | |
31 | + public void sessionCreated(IoSession session) { | |
32 | + System.out.println("=========111========"); | |
33 | + } | |
34 | + | |
35 | + | |
36 | + | |
37 | +} | ... | ... |
src/main/java/com/example/mina/client/box/rec6000/REC3000ProtocolFactory.java
0 → 100644
... | ... | @@ -0,0 +1,89 @@ |
1 | +package com.example.mina.client.box.rec6000; | |
2 | + | |
3 | +import com.example.mina.client.base.MatrixCommand; | |
4 | +import com.example.mina.client.base.MatrixResponse; | |
5 | +import lombok.extern.slf4j.Slf4j; | |
6 | +import org.apache.mina.core.buffer.IoBuffer; | |
7 | +import org.apache.mina.core.session.IoSession; | |
8 | +import org.apache.mina.filter.codec.*; | |
9 | +import org.apache.mina.http.api.DefaultHttpResponse; | |
10 | +import org.apache.mina.http.api.HttpResponse; | |
11 | +import org.apache.mina.http.api.HttpStatus; | |
12 | +import org.apache.mina.http.api.HttpVersion; | |
13 | + | |
14 | +import java.nio.charset.StandardCharsets; | |
15 | +import java.util.HashMap; | |
16 | +import java.util.Map; | |
17 | + | |
18 | +@Slf4j | |
19 | +public class REC3000ProtocolFactory implements ProtocolCodecFactory { | |
20 | + | |
21 | + @Override | |
22 | + public ProtocolEncoder getEncoder(IoSession ioSession) throws Exception { | |
23 | + return new REC3000ProtocolEncoder(); | |
24 | + } | |
25 | + | |
26 | + @Override | |
27 | + public ProtocolDecoder getDecoder(IoSession ioSession) throws Exception { | |
28 | + return new REC3000ProtocolDecoder(); | |
29 | + } | |
30 | + | |
31 | + public static class REC3000ProtocolEncoder extends ProtocolEncoderAdapter { | |
32 | + | |
33 | + @Override | |
34 | + public void encode(IoSession ioSession, Object msg, ProtocolEncoderOutput protocolEncoderOutput) { | |
35 | + | |
36 | + if (!(msg instanceof MatrixCommand)) { | |
37 | + log.error("error msg, msg is: {}", msg); | |
38 | + return; | |
39 | + } | |
40 | + | |
41 | + MatrixCommand mc = (MatrixCommand) msg; | |
42 | + log.info("---发送数据参数!Attn = {},Col = {},Command = {},Row = {},MatrixId = {},type = {}", | |
43 | + mc.getAttn(), | |
44 | + mc.getCol(), | |
45 | + mc.getCommand(), | |
46 | + mc.getRow(), | |
47 | + mc.getMatrixId(), | |
48 | + mc.getType() | |
49 | + ); | |
50 | + | |
51 | + // 响应HTML | |
52 | + String responseJson = "{\n \"row\": 2,\n \"col\": 5\n}"; | |
53 | + byte[] responseBytes = responseJson.getBytes(StandardCharsets.UTF_8); | |
54 | + int contentLength = responseBytes.length; | |
55 | + | |
56 | + // 构造HttpResponse对象,HttpResponse只包含响应的status line和header部分 | |
57 | + Map<String, String> headers = new HashMap<>(8); | |
58 | + headers.put("Content-Type", "application/json"); | |
59 | + headers.put("Content-Length", Integer.toString(contentLength)); | |
60 | + HttpResponse response = new DefaultHttpResponse(HttpVersion.HTTP_1_1, HttpStatus.SUCCESS_OK, headers); | |
61 | + | |
62 | + // 响应BODY | |
63 | + IoBuffer responseIoBuffer = IoBuffer.allocate(contentLength); | |
64 | + responseIoBuffer.put(responseBytes); | |
65 | + responseIoBuffer.flip(); | |
66 | + | |
67 | + // 响应的status line和header部分 | |
68 | + ioSession.write(response); | |
69 | + // 响应body部分 | |
70 | + ioSession.write(responseIoBuffer); | |
71 | + | |
72 | + } | |
73 | + | |
74 | + } | |
75 | + | |
76 | + public static class REC3000ProtocolDecoder extends ProtocolDecoderAdapter { | |
77 | + | |
78 | + @Override | |
79 | + public void decode(IoSession ioSession, IoBuffer ioBuffer, ProtocolDecoderOutput protocolDecoderOutput) { | |
80 | + log.info("--server返回给----client ------IoBuffer{}", ioBuffer); | |
81 | + int cmd = ioBuffer.get(); | |
82 | + MatrixResponse response = new MatrixResponse(); // todo | |
83 | + | |
84 | + protocolDecoderOutput.write(ioBuffer); | |
85 | + } | |
86 | + | |
87 | + } | |
88 | + | |
89 | +} | ... | ... |