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,9 +3,9 @@ package com.example.mina.client.aeroflex; | ||
3 | import com.example.mina.client.base.AbstractClient; | 3 | import com.example.mina.client.base.AbstractClient; |
4 | import com.example.mina.client.base.AbstractVirtualBoxClientHandler; | 4 | import com.example.mina.client.base.AbstractVirtualBoxClientHandler; |
5 | import com.example.mina.client.coder.ByteFactory; | 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 | import org.apache.mina.filter.codec.ProtocolCodecFactory; | 8 | import org.apache.mina.filter.codec.ProtocolCodecFactory; |
8 | -import org.springframework.boot.ApplicationArguments; | ||
9 | 9 | ||
10 | /** | 10 | /** |
11 | * @author dy | 11 | * @author dy |
@@ -13,13 +13,19 @@ import org.springframework.boot.ApplicationArguments; | @@ -13,13 +13,19 @@ import org.springframework.boot.ApplicationArguments; | ||
13 | */ | 13 | */ |
14 | public class AeroflexClient extends AbstractClient { | 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 | @Override | 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 | package com.example.mina.client.aeroflex; | 1 | package com.example.mina.client.aeroflex; |
2 | 2 | ||
3 | import com.example.mina.client.base.AbstractVirtualBoxClientHandler; | 3 | import com.example.mina.client.base.AbstractVirtualBoxClientHandler; |
4 | +import com.example.mina.client.entity.AbstractClientMessage; | ||
4 | import com.example.mina.client.entity.Command; | 5 | import com.example.mina.client.entity.Command; |
5 | 6 | ||
6 | /** | 7 | /** |
@@ -9,13 +10,12 @@ import com.example.mina.client.entity.Command; | @@ -9,13 +10,12 @@ import com.example.mina.client.entity.Command; | ||
9 | */ | 10 | */ |
10 | public class AeroflexClientHandler extends AbstractVirtualBoxClientHandler { | 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 | package com.example.mina.client.base; | 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 | import org.apache.mina.core.service.IoConnector; | 6 | import org.apache.mina.core.service.IoConnector; |
4 | import org.apache.mina.filter.codec.ProtocolCodecFactory; | 7 | import org.apache.mina.filter.codec.ProtocolCodecFactory; |
5 | import org.apache.mina.filter.codec.ProtocolCodecFilter; | 8 | import org.apache.mina.filter.codec.ProtocolCodecFilter; |
6 | import org.apache.mina.transport.socket.nio.NioSocketConnector; | 9 | import org.apache.mina.transport.socket.nio.NioSocketConnector; |
7 | -import org.springframework.boot.ApplicationArguments; | ||
8 | -import org.springframework.boot.ApplicationRunner; | ||
9 | 10 | ||
10 | import java.net.InetSocketAddress; | 11 | import java.net.InetSocketAddress; |
12 | +import java.util.List; | ||
11 | 13 | ||
12 | /** | 14 | /** |
13 | * @author dy | 15 | * @author dy |
@@ -15,17 +17,25 @@ import java.net.InetSocketAddress; | @@ -15,17 +17,25 @@ import java.net.InetSocketAddress; | ||
15 | */ | 17 | */ |
16 | public abstract class AbstractClient { | 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 | public void start() { | 40 | public void start() { |
31 | //1、创建客户端IoService | 41 | //1、创建客户端IoService |
@@ -37,8 +47,8 @@ public abstract class AbstractClient { | @@ -37,8 +47,8 @@ public abstract class AbstractClient { | ||
37 | //3、客户端IoHandler,发生消息 | 47 | //3、客户端IoHandler,发生消息 |
38 | connector.setHandler(abstractVirtualBoxClientHandler); | 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 | public boolean isConnected() { | 54 | public boolean isConnected() { |
src/main/java/com/example/mina/client/base/AbstractVirtualBoxClientHandler.java
1 | package com.example.mina.client.base; | 1 | package com.example.mina.client.base; |
2 | 2 | ||
3 | 3 | ||
4 | +import com.example.mina.client.entity.AbstractClientMessage; | ||
4 | import com.example.mina.client.entity.Command; | 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 | import org.apache.mina.core.service.IoConnector; | 9 | import org.apache.mina.core.service.IoConnector; |
6 | import org.apache.mina.core.service.IoHandlerAdapter; | 10 | import org.apache.mina.core.service.IoHandlerAdapter; |
7 | import org.apache.mina.core.session.IdleStatus; | 11 | import org.apache.mina.core.session.IdleStatus; |
@@ -11,19 +15,19 @@ import org.apache.mina.filter.codec.textline.LineDelimiter; | @@ -11,19 +15,19 @@ import org.apache.mina.filter.codec.textline.LineDelimiter; | ||
11 | import org.apache.mina.filter.codec.textline.TextLineCodecFactory; | 15 | import org.apache.mina.filter.codec.textline.TextLineCodecFactory; |
12 | import org.apache.mina.transport.socket.nio.NioSocketConnector; | 16 | import org.apache.mina.transport.socket.nio.NioSocketConnector; |
13 | 17 | ||
18 | +import java.io.IOException; | ||
14 | import java.net.InetSocketAddress; | 19 | import java.net.InetSocketAddress; |
15 | import java.nio.charset.Charset; | 20 | import java.nio.charset.Charset; |
16 | 21 | ||
22 | +@Data | ||
17 | public abstract class AbstractVirtualBoxClientHandler extends IoHandlerAdapter { | 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 | @Override | 31 | @Override |
28 | public void exceptionCaught(IoSession session, Throwable throwable) { | 32 | public void exceptionCaught(IoSession session, Throwable throwable) { |
29 | System.out.println("客户端exceptionCaught被调用!"); | 33 | System.out.println("客户端exceptionCaught被调用!"); |
@@ -32,6 +36,7 @@ public abstract class AbstractVirtualBoxClientHandler extends IoHandlerAdapter { | @@ -32,6 +36,7 @@ public abstract class AbstractVirtualBoxClientHandler extends IoHandlerAdapter { | ||
32 | 36 | ||
33 | @Override | 37 | @Override |
34 | public void messageReceived(IoSession session, Object message) { | 38 | public void messageReceived(IoSession session, Object message) { |
39 | + handleCommandResponse(clientMessage.getCommands().get(1).getBytes(), (byte[]) message, ((byte[]) message).length); | ||
35 | System.out.println("客户端messageReceived被调用!"); | 40 | System.out.println("客户端messageReceived被调用!"); |
36 | System.out.println("client端接收信息:" + message.toString()); | 41 | System.out.println("client端接收信息:" + message.toString()); |
37 | } | 42 | } |
@@ -69,9 +74,21 @@ public abstract class AbstractVirtualBoxClientHandler extends IoHandlerAdapter { | @@ -69,9 +74,21 @@ public abstract class AbstractVirtualBoxClientHandler extends IoHandlerAdapter { | ||
69 | 74 | ||
70 | @Override | 75 | @Override |
71 | public void sessionOpened(IoSession session) { | 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 | System.out.println("客户端sessionOpened被调用!"); | 81 | System.out.println("客户端sessionOpened被调用!"); |
74 | System.out.println("client端打开连接"); | 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 @@ | @@ -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,16 +11,14 @@ import lombok.Data; | ||
11 | @Data | 11 | @Data |
12 | @Builder | 12 | @Builder |
13 | public class Command { | 13 | public class Command { |
14 | + | ||
14 | private String description; | 15 | private String description; |
16 | + | ||
15 | private byte[] bytes; | 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 | this.description = description; | 20 | this.description = description; |
21 | this.bytes = bytes; | 21 | this.bytes = bytes; |
22 | - this.host = host; | ||
23 | - this.port = port; | ||
24 | } | 22 | } |
25 | 23 | ||
26 | @Override | 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 @@ | @@ -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 @@ | @@ -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,6 +3,7 @@ package com.example.mina.client.test; | ||
3 | import com.example.mina.client.aeroflex.AeroflexClient; | 3 | import com.example.mina.client.aeroflex.AeroflexClient; |
4 | import com.example.mina.client.aeroflex.AeroflexClientHandler; | 4 | import com.example.mina.client.aeroflex.AeroflexClientHandler; |
5 | import com.example.mina.client.coder.ByteFactory; | 5 | import com.example.mina.client.coder.ByteFactory; |
6 | +import com.example.mina.client.lte3000.Lte3000Client; | ||
6 | 7 | ||
7 | public class MinaClient { | 8 | public class MinaClient { |
8 | 9 | ||
@@ -32,7 +33,7 @@ public class MinaClient { | @@ -32,7 +33,7 @@ public class MinaClient { | ||
32 | // cf.getSession().getCloseFuture().awaitUninterruptibly(); | 33 | // cf.getSession().getCloseFuture().awaitUninterruptibly(); |
33 | // | 34 | // |
34 | // connector.dispose(); | 35 | // connector.dispose(); |
35 | - new AeroflexClient(new ByteFactory(), new AeroflexClientHandler()).start(); | 36 | + new Lte3000Client().start(); |
36 | 37 | ||
37 | 38 | ||
38 | } | 39 | } |