Commit 41434f303c4aff01a351be9e7dedac9904abc172
1 parent
7af2683e
Exists in
develop
feat: lte3000初版
Showing
10 changed files
with
191 additions
and
36 deletions
Show diff stats
src/main/java/com/example/mina/client/aeroflex/AeroflexClient.java
... | ... | @@ -3,9 +3,9 @@ package com.example.mina.client.aeroflex; |
3 | 3 | import com.example.mina.client.base.AbstractClient; |
4 | 4 | import com.example.mina.client.base.AbstractVirtualBoxClientHandler; |
5 | 5 | import com.example.mina.client.coder.ByteFactory; |
6 | -import com.example.mina.client.entity.Command; | |
6 | +import com.example.mina.client.entity.AbstractClientMessage; | |
7 | +import com.example.mina.server.entity.AeroflexDataBuffer; | |
7 | 8 | import org.apache.mina.filter.codec.ProtocolCodecFactory; |
8 | -import org.springframework.boot.ApplicationArguments; | |
9 | 9 | |
10 | 10 | /** |
11 | 11 | * @author dy |
... | ... | @@ -13,13 +13,19 @@ import org.springframework.boot.ApplicationArguments; |
13 | 13 | */ |
14 | 14 | public class AeroflexClient extends AbstractClient { |
15 | 15 | |
16 | - public AeroflexClient(ProtocolCodecFactory protocolCodecFactory, | |
17 | - AbstractVirtualBoxClientHandler abstractVirtualBoxClientHandler) { | |
18 | - super(protocolCodecFactory, abstractVirtualBoxClientHandler); | |
16 | + @Override | |
17 | + protected void init(AbstractClientMessage abstractClientMessage) { | |
18 | + protocolCodecFactory = new ByteFactory(); | |
19 | + abstractVirtualBoxClientHandler = new AeroflexClientHandler(abstractClientMessage); | |
20 | + } | |
21 | + | |
22 | + @Override | |
23 | + protected void initHardwareDataBuffer() { | |
24 | + hardwareDataBuffer = new AeroflexDataBuffer(10, 10); | |
19 | 25 | } |
20 | 26 | |
21 | 27 | @Override |
22 | - protected void getBoxName() { | |
28 | + protected void initClientMessage() { | |
23 | 29 | |
24 | 30 | } |
25 | 31 | ... | ... |
src/main/java/com/example/mina/client/aeroflex/AeroflexClientHandler.java
1 | 1 | package com.example.mina.client.aeroflex; |
2 | 2 | |
3 | 3 | import com.example.mina.client.base.AbstractVirtualBoxClientHandler; |
4 | +import com.example.mina.client.entity.AbstractClientMessage; | |
4 | 5 | import com.example.mina.client.entity.Command; |
5 | 6 | |
6 | 7 | /** |
... | ... | @@ -9,13 +10,12 @@ import com.example.mina.client.entity.Command; |
9 | 10 | */ |
10 | 11 | public class AeroflexClientHandler extends AbstractVirtualBoxClientHandler { |
11 | 12 | |
12 | - @Override | |
13 | - protected void addCommand() { | |
14 | - command = Command.builder().description("AeroflexClient") | |
15 | - .bytes("ATTN".getBytes()) | |
16 | - .host("localhost") | |
17 | - .port(9100) | |
18 | - .build(); | |
13 | + public AeroflexClientHandler(AbstractClientMessage clientMessage) { | |
14 | + super(clientMessage); | |
15 | + } | |
19 | 16 | |
17 | + @Override | |
18 | + protected boolean handleCommandResponse(byte[] cmd, byte[] response, int responseLen) { | |
19 | + return false; | |
20 | 20 | } |
21 | 21 | } | ... | ... |
src/main/java/com/example/mina/client/base/AbstractClient.java
1 | 1 | package com.example.mina.client.base; |
2 | 2 | |
3 | +import com.example.mina.client.entity.AbstractClientMessage; | |
4 | +import com.example.mina.client.entity.Command; | |
5 | +import com.example.mina.server.base.AbstractHardwareDataBuffer; | |
3 | 6 | import org.apache.mina.core.service.IoConnector; |
4 | 7 | import org.apache.mina.filter.codec.ProtocolCodecFactory; |
5 | 8 | import org.apache.mina.filter.codec.ProtocolCodecFilter; |
6 | 9 | import org.apache.mina.transport.socket.nio.NioSocketConnector; |
7 | -import org.springframework.boot.ApplicationArguments; | |
8 | -import org.springframework.boot.ApplicationRunner; | |
9 | 10 | |
10 | 11 | import java.net.InetSocketAddress; |
12 | +import java.util.List; | |
11 | 13 | |
12 | 14 | /** |
13 | 15 | * @author dy |
... | ... | @@ -15,17 +17,25 @@ import java.net.InetSocketAddress; |
15 | 17 | */ |
16 | 18 | public abstract class AbstractClient { |
17 | 19 | |
18 | - private final ProtocolCodecFactory protocolCodecFactory; | |
20 | + protected ProtocolCodecFactory protocolCodecFactory; | |
19 | 21 | |
20 | - private final AbstractVirtualBoxClientHandler abstractVirtualBoxClientHandler; | |
22 | + protected AbstractVirtualBoxClientHandler abstractVirtualBoxClientHandler; | |
21 | 23 | |
22 | - protected AbstractClient(ProtocolCodecFactory protocolCodecFactory, | |
23 | - AbstractVirtualBoxClientHandler abstractVirtualBoxClientHandler) { | |
24 | - this.protocolCodecFactory = protocolCodecFactory; | |
25 | - this.abstractVirtualBoxClientHandler = abstractVirtualBoxClientHandler; | |
24 | + protected AbstractHardwareDataBuffer hardwareDataBuffer; | |
25 | + | |
26 | + protected AbstractClientMessage abstractClientMessage; | |
27 | + | |
28 | + protected AbstractClient() { | |
29 | + initHardwareDataBuffer(); | |
30 | + initClientMessage(); | |
31 | + init(abstractClientMessage); | |
26 | 32 | } |
27 | 33 | |
28 | - protected abstract void getBoxName(); | |
34 | + protected abstract void init(AbstractClientMessage abstractClientMessage); | |
35 | + | |
36 | + protected abstract void initHardwareDataBuffer(); | |
37 | + | |
38 | + protected abstract void initClientMessage(); | |
29 | 39 | |
30 | 40 | public void start() { |
31 | 41 | //1、创建客户端IoService |
... | ... | @@ -37,8 +47,8 @@ public abstract class AbstractClient { |
37 | 47 | //3、客户端IoHandler,发生消息 |
38 | 48 | connector.setHandler(abstractVirtualBoxClientHandler); |
39 | 49 | //连接服务端 |
40 | - connector.connect(new InetSocketAddress(abstractVirtualBoxClientHandler.command.getHost(), | |
41 | - abstractVirtualBoxClientHandler.command.getPort())); | |
50 | + connector.connect(new InetSocketAddress(abstractVirtualBoxClientHandler.getClientMessage().getHost(), | |
51 | + abstractVirtualBoxClientHandler.getClientMessage().getPort())); | |
42 | 52 | } |
43 | 53 | |
44 | 54 | public boolean isConnected() { | ... | ... |
src/main/java/com/example/mina/client/base/AbstractVirtualBoxClientHandler.java
1 | 1 | package com.example.mina.client.base; |
2 | 2 | |
3 | 3 | |
4 | +import com.example.mina.client.entity.AbstractClientMessage; | |
4 | 5 | import com.example.mina.client.entity.Command; |
6 | +import com.example.mina.server.util.LogUtils; | |
7 | +import com.example.mina.server.util.Lte3000CommandHelper; | |
8 | +import lombok.Data; | |
5 | 9 | import org.apache.mina.core.service.IoConnector; |
6 | 10 | import org.apache.mina.core.service.IoHandlerAdapter; |
7 | 11 | import org.apache.mina.core.session.IdleStatus; |
... | ... | @@ -11,19 +15,19 @@ import org.apache.mina.filter.codec.textline.LineDelimiter; |
11 | 15 | import org.apache.mina.filter.codec.textline.TextLineCodecFactory; |
12 | 16 | import org.apache.mina.transport.socket.nio.NioSocketConnector; |
13 | 17 | |
18 | +import java.io.IOException; | |
14 | 19 | import java.net.InetSocketAddress; |
15 | 20 | import java.nio.charset.Charset; |
16 | 21 | |
22 | +@Data | |
17 | 23 | public abstract class AbstractVirtualBoxClientHandler extends IoHandlerAdapter { |
18 | 24 | |
19 | - protected Command command; | |
25 | + protected AbstractClientMessage clientMessage; | |
20 | 26 | |
21 | - public AbstractVirtualBoxClientHandler() { | |
22 | - addCommand(); | |
27 | + public AbstractVirtualBoxClientHandler(AbstractClientMessage clientMessage) { | |
28 | + this.clientMessage = clientMessage; | |
23 | 29 | } |
24 | 30 | |
25 | - protected abstract void addCommand(); | |
26 | - | |
27 | 31 | @Override |
28 | 32 | public void exceptionCaught(IoSession session, Throwable throwable) { |
29 | 33 | System.out.println("客户端exceptionCaught被调用!"); |
... | ... | @@ -32,6 +36,7 @@ public abstract class AbstractVirtualBoxClientHandler extends IoHandlerAdapter { |
32 | 36 | |
33 | 37 | @Override |
34 | 38 | public void messageReceived(IoSession session, Object message) { |
39 | + handleCommandResponse(clientMessage.getCommands().get(1).getBytes(), (byte[]) message, ((byte[]) message).length); | |
35 | 40 | System.out.println("客户端messageReceived被调用!"); |
36 | 41 | System.out.println("client端接收信息:" + message.toString()); |
37 | 42 | } |
... | ... | @@ -69,9 +74,21 @@ public abstract class AbstractVirtualBoxClientHandler extends IoHandlerAdapter { |
69 | 74 | |
70 | 75 | @Override |
71 | 76 | public void sessionOpened(IoSession session) { |
72 | - session.write(command.getBytes()); | |
77 | + // for (int i = 0; i < clientMessage.getCommands().size(); i++) { | |
78 | +// handleOneCommand(i, session); | |
79 | +// } | |
80 | + handleOneCommand(1, session); | |
73 | 81 | System.out.println("客户端sessionOpened被调用!"); |
74 | 82 | System.out.println("client端打开连接"); |
75 | 83 | } |
76 | 84 | |
85 | + protected void handleOneCommand(int i, IoSession session) { | |
86 | + | |
87 | + Command command = clientMessage.getCommands().get(i); | |
88 | + | |
89 | + session.write(command.getBytes()); | |
90 | + } | |
91 | + | |
92 | + protected abstract boolean handleCommandResponse(byte[] cmd, byte[] response, int responseLen); | |
93 | + | |
77 | 94 | } | ... | ... |
src/main/java/com/example/mina/client/entity/AbstractClientMessage.java
0 → 100644
... | ... | @@ -0,0 +1,20 @@ |
1 | +package com.example.mina.client.entity; | |
2 | + | |
3 | +import lombok.Data; | |
4 | + | |
5 | +import java.util.ArrayList; | |
6 | +import java.util.List; | |
7 | + | |
8 | +/** | |
9 | + * @author dy | |
10 | + * @date 2021/3/11 | |
11 | + */ | |
12 | +@Data | |
13 | +public abstract class AbstractClientMessage { | |
14 | + | |
15 | + protected String host; | |
16 | + | |
17 | + protected int port; | |
18 | + | |
19 | + protected List<Command> commands = new ArrayList<>(); | |
20 | +} | ... | ... |
src/main/java/com/example/mina/client/entity/Command.java
... | ... | @@ -11,16 +11,14 @@ import lombok.Data; |
11 | 11 | @Data |
12 | 12 | @Builder |
13 | 13 | public class Command { |
14 | + | |
14 | 15 | private String description; |
16 | + | |
15 | 17 | private byte[] bytes; |
16 | - private String host; | |
17 | - private int port; | |
18 | 18 | |
19 | - public Command(String description, byte[] bytes, String host, int port) { | |
19 | + public Command(String description, byte[] bytes) { | |
20 | 20 | this.description = description; |
21 | 21 | this.bytes = bytes; |
22 | - this.host = host; | |
23 | - this.port = port; | |
24 | 22 | } |
25 | 23 | |
26 | 24 | @Override | ... | ... |
src/main/java/com/example/mina/client/entity/Lte3000Message.java
0 → 100644
src/main/java/com/example/mina/client/lte3000/Lte3000Client.java
0 → 100644
... | ... | @@ -0,0 +1,66 @@ |
1 | +package com.example.mina.client.lte3000; | |
2 | + | |
3 | +import com.example.mina.client.aeroflex.AeroflexClientHandler; | |
4 | +import com.example.mina.client.base.AbstractClient; | |
5 | +import com.example.mina.client.coder.ByteFactory; | |
6 | +import com.example.mina.client.entity.AbstractClientMessage; | |
7 | +import com.example.mina.client.entity.Command; | |
8 | +import com.example.mina.client.entity.Lte3000Message; | |
9 | +import com.example.mina.server.entity.Lte3000DataBuffer; | |
10 | +import com.example.mina.server.util.Lte3000CommandHelper; | |
11 | + | |
12 | +/** | |
13 | + * @author dy | |
14 | + * @date 2021/3/10 | |
15 | + */ | |
16 | +public class Lte3000Client extends AbstractClient { | |
17 | + | |
18 | + @Override | |
19 | + protected void init(AbstractClientMessage abstractClientMessage) { | |
20 | + protocolCodecFactory = new ByteFactory(); | |
21 | + abstractVirtualBoxClientHandler = new Lte3000ClientHandler(abstractClientMessage); | |
22 | + } | |
23 | + | |
24 | + @Override | |
25 | + protected void initHardwareDataBuffer() { | |
26 | + hardwareDataBuffer = new Lte3000DataBuffer(32, 32, 30); | |
27 | + } | |
28 | + | |
29 | + @Override | |
30 | + protected void initClientMessage() { | |
31 | + abstractClientMessage = new Lte3000Message(); | |
32 | + abstractClientMessage.setHost("localhost"); | |
33 | + abstractClientMessage.setPort(9102); | |
34 | + for (int i = 0; i < this.hardwareDataBuffer.getMaxRow(); i++) { | |
35 | + abstractClientMessage.getCommands().add(new Command("", Lte3000CommandHelper.genCommandGetCross(i + 1))); | |
36 | + } | |
37 | + | |
38 | + // query attenuation | |
39 | + // the LTE attenuation is bound to column | |
40 | + for (int j = 0; j < this.hardwareDataBuffer.getMaxCol(); j++) { | |
41 | + abstractClientMessage.getCommands().add(new Command("", Lte3000CommandHelper.genCommandGetAttn(j + 1))); | |
42 | + } | |
43 | + | |
44 | + } | |
45 | + | |
46 | + @Override | |
47 | + public boolean setAttenuation(int row, int col, int attenuation) { | |
48 | + return false; | |
49 | + } | |
50 | + | |
51 | + @Override | |
52 | + public int getAttenuation(int row, int col) { | |
53 | + return 0; | |
54 | + } | |
55 | + | |
56 | + @Override | |
57 | + public Boolean reset() { | |
58 | + return null; | |
59 | + } | |
60 | + | |
61 | + @Override | |
62 | + public int[][] getAll() { | |
63 | + return new int[0][]; | |
64 | + } | |
65 | + | |
66 | +} | ... | ... |
src/main/java/com/example/mina/client/lte3000/Lte3000ClientHandler.java
0 → 100644
... | ... | @@ -0,0 +1,29 @@ |
1 | +package com.example.mina.client.lte3000; | |
2 | + | |
3 | +import com.example.mina.client.base.AbstractVirtualBoxClientHandler; | |
4 | +import com.example.mina.client.entity.AbstractClientMessage; | |
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 Lte3000ClientHandler extends AbstractVirtualBoxClientHandler { | |
14 | + | |
15 | + public Lte3000ClientHandler(AbstractClientMessage clientMessage) { | |
16 | + super(clientMessage); | |
17 | + } | |
18 | + | |
19 | + @Override | |
20 | + public void sessionOpened(IoSession session) { | |
21 | + super.sessionOpened(session); | |
22 | + } | |
23 | + | |
24 | + @Override | |
25 | + protected boolean handleCommandResponse(byte[] cmd, byte[] response, int responseLen) { | |
26 | + log.info("收到服务器回传的消息了"); | |
27 | + return false; | |
28 | + } | |
29 | +} | ... | ... |
src/main/java/com/example/mina/client/test/MinaClient.java
... | ... | @@ -3,6 +3,7 @@ package com.example.mina.client.test; |
3 | 3 | import com.example.mina.client.aeroflex.AeroflexClient; |
4 | 4 | import com.example.mina.client.aeroflex.AeroflexClientHandler; |
5 | 5 | import com.example.mina.client.coder.ByteFactory; |
6 | +import com.example.mina.client.lte3000.Lte3000Client; | |
6 | 7 | |
7 | 8 | public class MinaClient { |
8 | 9 | |
... | ... | @@ -32,7 +33,7 @@ public class MinaClient { |
32 | 33 | // cf.getSession().getCloseFuture().awaitUninterruptibly(); |
33 | 34 | // |
34 | 35 | // connector.dispose(); |
35 | - new AeroflexClient(new ByteFactory(), new AeroflexClientHandler()).start(); | |
36 | + new Lte3000Client().start(); | |
36 | 37 | |
37 | 38 | |
38 | 39 | } | ... | ... |