Commit 41434f303c4aff01a351be9e7dedac9904abc172

Authored by dy
1 parent 7af2683e
Exists in develop

feat: lte3000初版

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
... ... @@ -0,0 +1,8 @@
  1 +package com.example.mina.client.entity;
  2 +
  3 +/**
  4 + * @author dy
  5 + * @date 2021/3/11
  6 + */
  7 +public class Lte3000Message extends AbstractClientMessage{
  8 +}
... ...
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 }
... ...