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,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
@@ -0,0 +1,8 @@ @@ -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 @@ @@ -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 }