From 41434f303c4aff01a351be9e7dedac9904abc172 Mon Sep 17 00:00:00 2001 From: dy <1351757011@qq.com> Date: Thu, 11 Mar 2021 15:32:49 +0800 Subject: [PATCH] feat: lte3000初版 --- src/main/java/com/example/mina/client/aeroflex/AeroflexClient.java | 18 ++++++++++++------ src/main/java/com/example/mina/client/aeroflex/AeroflexClientHandler.java | 14 +++++++------- src/main/java/com/example/mina/client/base/AbstractClient.java | 32 +++++++++++++++++++++----------- src/main/java/com/example/mina/client/base/AbstractVirtualBoxClientHandler.java | 29 +++++++++++++++++++++++------ src/main/java/com/example/mina/client/entity/AbstractClientMessage.java | 20 ++++++++++++++++++++ src/main/java/com/example/mina/client/entity/Command.java | 8 +++----- src/main/java/com/example/mina/client/entity/Lte3000Message.java | 8 ++++++++ src/main/java/com/example/mina/client/lte3000/Lte3000Client.java | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/example/mina/client/lte3000/Lte3000ClientHandler.java | 29 +++++++++++++++++++++++++++++ src/main/java/com/example/mina/client/test/MinaClient.java | 3 ++- 10 files changed, 191 insertions(+), 36 deletions(-) create mode 100644 src/main/java/com/example/mina/client/entity/AbstractClientMessage.java create mode 100644 src/main/java/com/example/mina/client/entity/Lte3000Message.java create mode 100644 src/main/java/com/example/mina/client/lte3000/Lte3000Client.java create mode 100644 src/main/java/com/example/mina/client/lte3000/Lte3000ClientHandler.java diff --git a/src/main/java/com/example/mina/client/aeroflex/AeroflexClient.java b/src/main/java/com/example/mina/client/aeroflex/AeroflexClient.java index d89e776..abb1c72 100644 --- a/src/main/java/com/example/mina/client/aeroflex/AeroflexClient.java +++ b/src/main/java/com/example/mina/client/aeroflex/AeroflexClient.java @@ -3,9 +3,9 @@ package com.example.mina.client.aeroflex; import com.example.mina.client.base.AbstractClient; import com.example.mina.client.base.AbstractVirtualBoxClientHandler; import com.example.mina.client.coder.ByteFactory; -import com.example.mina.client.entity.Command; +import com.example.mina.client.entity.AbstractClientMessage; +import com.example.mina.server.entity.AeroflexDataBuffer; import org.apache.mina.filter.codec.ProtocolCodecFactory; -import org.springframework.boot.ApplicationArguments; /** * @author dy @@ -13,13 +13,19 @@ import org.springframework.boot.ApplicationArguments; */ public class AeroflexClient extends AbstractClient { - public AeroflexClient(ProtocolCodecFactory protocolCodecFactory, - AbstractVirtualBoxClientHandler abstractVirtualBoxClientHandler) { - super(protocolCodecFactory, abstractVirtualBoxClientHandler); + @Override + protected void init(AbstractClientMessage abstractClientMessage) { + protocolCodecFactory = new ByteFactory(); + abstractVirtualBoxClientHandler = new AeroflexClientHandler(abstractClientMessage); + } + + @Override + protected void initHardwareDataBuffer() { + hardwareDataBuffer = new AeroflexDataBuffer(10, 10); } @Override - protected void getBoxName() { + protected void initClientMessage() { } diff --git a/src/main/java/com/example/mina/client/aeroflex/AeroflexClientHandler.java b/src/main/java/com/example/mina/client/aeroflex/AeroflexClientHandler.java index 6ab4d75..3a1e65a 100644 --- a/src/main/java/com/example/mina/client/aeroflex/AeroflexClientHandler.java +++ b/src/main/java/com/example/mina/client/aeroflex/AeroflexClientHandler.java @@ -1,6 +1,7 @@ package com.example.mina.client.aeroflex; import com.example.mina.client.base.AbstractVirtualBoxClientHandler; +import com.example.mina.client.entity.AbstractClientMessage; import com.example.mina.client.entity.Command; /** @@ -9,13 +10,12 @@ import com.example.mina.client.entity.Command; */ public class AeroflexClientHandler extends AbstractVirtualBoxClientHandler { - @Override - protected void addCommand() { - command = Command.builder().description("AeroflexClient") - .bytes("ATTN".getBytes()) - .host("localhost") - .port(9100) - .build(); + public AeroflexClientHandler(AbstractClientMessage clientMessage) { + super(clientMessage); + } + @Override + protected boolean handleCommandResponse(byte[] cmd, byte[] response, int responseLen) { + return false; } } diff --git a/src/main/java/com/example/mina/client/base/AbstractClient.java b/src/main/java/com/example/mina/client/base/AbstractClient.java index e683a19..4149e7e 100644 --- a/src/main/java/com/example/mina/client/base/AbstractClient.java +++ b/src/main/java/com/example/mina/client/base/AbstractClient.java @@ -1,13 +1,15 @@ package com.example.mina.client.base; +import com.example.mina.client.entity.AbstractClientMessage; +import com.example.mina.client.entity.Command; +import com.example.mina.server.base.AbstractHardwareDataBuffer; import org.apache.mina.core.service.IoConnector; import org.apache.mina.filter.codec.ProtocolCodecFactory; import org.apache.mina.filter.codec.ProtocolCodecFilter; import org.apache.mina.transport.socket.nio.NioSocketConnector; -import org.springframework.boot.ApplicationArguments; -import org.springframework.boot.ApplicationRunner; import java.net.InetSocketAddress; +import java.util.List; /** * @author dy @@ -15,17 +17,25 @@ import java.net.InetSocketAddress; */ public abstract class AbstractClient { - private final ProtocolCodecFactory protocolCodecFactory; + protected ProtocolCodecFactory protocolCodecFactory; - private final AbstractVirtualBoxClientHandler abstractVirtualBoxClientHandler; + protected AbstractVirtualBoxClientHandler abstractVirtualBoxClientHandler; - protected AbstractClient(ProtocolCodecFactory protocolCodecFactory, - AbstractVirtualBoxClientHandler abstractVirtualBoxClientHandler) { - this.protocolCodecFactory = protocolCodecFactory; - this.abstractVirtualBoxClientHandler = abstractVirtualBoxClientHandler; + protected AbstractHardwareDataBuffer hardwareDataBuffer; + + protected AbstractClientMessage abstractClientMessage; + + protected AbstractClient() { + initHardwareDataBuffer(); + initClientMessage(); + init(abstractClientMessage); } - protected abstract void getBoxName(); + protected abstract void init(AbstractClientMessage abstractClientMessage); + + protected abstract void initHardwareDataBuffer(); + + protected abstract void initClientMessage(); public void start() { //1、创建客户端IoService @@ -37,8 +47,8 @@ public abstract class AbstractClient { //3、客户端IoHandler,发生消息 connector.setHandler(abstractVirtualBoxClientHandler); //连接服务端 - connector.connect(new InetSocketAddress(abstractVirtualBoxClientHandler.command.getHost(), - abstractVirtualBoxClientHandler.command.getPort())); + connector.connect(new InetSocketAddress(abstractVirtualBoxClientHandler.getClientMessage().getHost(), + abstractVirtualBoxClientHandler.getClientMessage().getPort())); } public boolean isConnected() { diff --git a/src/main/java/com/example/mina/client/base/AbstractVirtualBoxClientHandler.java b/src/main/java/com/example/mina/client/base/AbstractVirtualBoxClientHandler.java index 964ddb7..7dd80c5 100644 --- a/src/main/java/com/example/mina/client/base/AbstractVirtualBoxClientHandler.java +++ b/src/main/java/com/example/mina/client/base/AbstractVirtualBoxClientHandler.java @@ -1,7 +1,11 @@ package com.example.mina.client.base; +import com.example.mina.client.entity.AbstractClientMessage; import com.example.mina.client.entity.Command; +import com.example.mina.server.util.LogUtils; +import com.example.mina.server.util.Lte3000CommandHelper; +import lombok.Data; import org.apache.mina.core.service.IoConnector; import org.apache.mina.core.service.IoHandlerAdapter; import org.apache.mina.core.session.IdleStatus; @@ -11,19 +15,19 @@ import org.apache.mina.filter.codec.textline.LineDelimiter; import org.apache.mina.filter.codec.textline.TextLineCodecFactory; import org.apache.mina.transport.socket.nio.NioSocketConnector; +import java.io.IOException; import java.net.InetSocketAddress; import java.nio.charset.Charset; +@Data public abstract class AbstractVirtualBoxClientHandler extends IoHandlerAdapter { - protected Command command; + protected AbstractClientMessage clientMessage; - public AbstractVirtualBoxClientHandler() { - addCommand(); + public AbstractVirtualBoxClientHandler(AbstractClientMessage clientMessage) { + this.clientMessage = clientMessage; } - protected abstract void addCommand(); - @Override public void exceptionCaught(IoSession session, Throwable throwable) { System.out.println("客户端exceptionCaught被调用!"); @@ -32,6 +36,7 @@ public abstract class AbstractVirtualBoxClientHandler extends IoHandlerAdapter { @Override public void messageReceived(IoSession session, Object message) { + handleCommandResponse(clientMessage.getCommands().get(1).getBytes(), (byte[]) message, ((byte[]) message).length); System.out.println("客户端messageReceived被调用!"); System.out.println("client端接收信息:" + message.toString()); } @@ -69,9 +74,21 @@ public abstract class AbstractVirtualBoxClientHandler extends IoHandlerAdapter { @Override public void sessionOpened(IoSession session) { - session.write(command.getBytes()); + // for (int i = 0; i < clientMessage.getCommands().size(); i++) { +// handleOneCommand(i, session); +// } + handleOneCommand(1, session); System.out.println("客户端sessionOpened被调用!"); System.out.println("client端打开连接"); } + protected void handleOneCommand(int i, IoSession session) { + + Command command = clientMessage.getCommands().get(i); + + session.write(command.getBytes()); + } + + protected abstract boolean handleCommandResponse(byte[] cmd, byte[] response, int responseLen); + } diff --git a/src/main/java/com/example/mina/client/entity/AbstractClientMessage.java b/src/main/java/com/example/mina/client/entity/AbstractClientMessage.java new file mode 100644 index 0000000..4974b4b --- /dev/null +++ b/src/main/java/com/example/mina/client/entity/AbstractClientMessage.java @@ -0,0 +1,20 @@ +package com.example.mina.client.entity; + +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author dy + * @date 2021/3/11 + */ +@Data +public abstract class AbstractClientMessage { + + protected String host; + + protected int port; + + protected List commands = new ArrayList<>(); +} diff --git a/src/main/java/com/example/mina/client/entity/Command.java b/src/main/java/com/example/mina/client/entity/Command.java index d85bcc4..c871680 100644 --- a/src/main/java/com/example/mina/client/entity/Command.java +++ b/src/main/java/com/example/mina/client/entity/Command.java @@ -11,16 +11,14 @@ import lombok.Data; @Data @Builder public class Command { + private String description; + private byte[] bytes; - private String host; - private int port; - public Command(String description, byte[] bytes, String host, int port) { + public Command(String description, byte[] bytes) { this.description = description; this.bytes = bytes; - this.host = host; - this.port = port; } @Override diff --git a/src/main/java/com/example/mina/client/entity/Lte3000Message.java b/src/main/java/com/example/mina/client/entity/Lte3000Message.java new file mode 100644 index 0000000..55c71a9 --- /dev/null +++ b/src/main/java/com/example/mina/client/entity/Lte3000Message.java @@ -0,0 +1,8 @@ +package com.example.mina.client.entity; + +/** + * @author dy + * @date 2021/3/11 + */ +public class Lte3000Message extends AbstractClientMessage{ +} diff --git a/src/main/java/com/example/mina/client/lte3000/Lte3000Client.java b/src/main/java/com/example/mina/client/lte3000/Lte3000Client.java new file mode 100644 index 0000000..05973db --- /dev/null +++ b/src/main/java/com/example/mina/client/lte3000/Lte3000Client.java @@ -0,0 +1,66 @@ +package com.example.mina.client.lte3000; + +import com.example.mina.client.aeroflex.AeroflexClientHandler; +import com.example.mina.client.base.AbstractClient; +import com.example.mina.client.coder.ByteFactory; +import com.example.mina.client.entity.AbstractClientMessage; +import com.example.mina.client.entity.Command; +import com.example.mina.client.entity.Lte3000Message; +import com.example.mina.server.entity.Lte3000DataBuffer; +import com.example.mina.server.util.Lte3000CommandHelper; + +/** + * @author dy + * @date 2021/3/10 + */ +public class Lte3000Client extends AbstractClient { + + @Override + protected void init(AbstractClientMessage abstractClientMessage) { + protocolCodecFactory = new ByteFactory(); + abstractVirtualBoxClientHandler = new Lte3000ClientHandler(abstractClientMessage); + } + + @Override + protected void initHardwareDataBuffer() { + hardwareDataBuffer = new Lte3000DataBuffer(32, 32, 30); + } + + @Override + protected void initClientMessage() { + abstractClientMessage = new Lte3000Message(); + abstractClientMessage.setHost("localhost"); + abstractClientMessage.setPort(9102); + for (int i = 0; i < this.hardwareDataBuffer.getMaxRow(); i++) { + abstractClientMessage.getCommands().add(new Command("", Lte3000CommandHelper.genCommandGetCross(i + 1))); + } + + // query attenuation + // the LTE attenuation is bound to column + for (int j = 0; j < this.hardwareDataBuffer.getMaxCol(); j++) { + abstractClientMessage.getCommands().add(new Command("", Lte3000CommandHelper.genCommandGetAttn(j + 1))); + } + + } + + @Override + public boolean setAttenuation(int row, int col, int attenuation) { + return false; + } + + @Override + public int getAttenuation(int row, int col) { + return 0; + } + + @Override + public Boolean reset() { + return null; + } + + @Override + public int[][] getAll() { + return new int[0][]; + } + +} diff --git a/src/main/java/com/example/mina/client/lte3000/Lte3000ClientHandler.java b/src/main/java/com/example/mina/client/lte3000/Lte3000ClientHandler.java new file mode 100644 index 0000000..59af2a3 --- /dev/null +++ b/src/main/java/com/example/mina/client/lte3000/Lte3000ClientHandler.java @@ -0,0 +1,29 @@ +package com.example.mina.client.lte3000; + +import com.example.mina.client.base.AbstractVirtualBoxClientHandler; +import com.example.mina.client.entity.AbstractClientMessage; +import lombok.extern.slf4j.Slf4j; +import org.apache.mina.core.session.IoSession; + +/** + * @author dy + * @date 2021/3/10 + */ +@Slf4j +public class Lte3000ClientHandler extends AbstractVirtualBoxClientHandler { + + public Lte3000ClientHandler(AbstractClientMessage clientMessage) { + super(clientMessage); + } + + @Override + public void sessionOpened(IoSession session) { + super.sessionOpened(session); + } + + @Override + protected boolean handleCommandResponse(byte[] cmd, byte[] response, int responseLen) { + log.info("收到服务器回传的消息了"); + return false; + } +} diff --git a/src/main/java/com/example/mina/client/test/MinaClient.java b/src/main/java/com/example/mina/client/test/MinaClient.java index eabbb24..f3256e6 100644 --- a/src/main/java/com/example/mina/client/test/MinaClient.java +++ b/src/main/java/com/example/mina/client/test/MinaClient.java @@ -3,6 +3,7 @@ package com.example.mina.client.test; import com.example.mina.client.aeroflex.AeroflexClient; import com.example.mina.client.aeroflex.AeroflexClientHandler; import com.example.mina.client.coder.ByteFactory; +import com.example.mina.client.lte3000.Lte3000Client; public class MinaClient { @@ -32,7 +33,7 @@ public class MinaClient { // cf.getSession().getCloseFuture().awaitUninterruptibly(); // // connector.dispose(); - new AeroflexClient(new ByteFactory(), new AeroflexClientHandler()).start(); + new Lte3000Client().start(); } -- libgit2 0.21.2