Commit 69bfaf7fde391a8b793a0c2f065328e5b5f7f473

Authored by wu
1 parent 90e60467
Exists in develop

feat: 重构客户端

1,改为命令模式;
2,抽象client;
Showing 30 changed files with 294 additions and 628 deletions   Show diff stats
pom.xml
... ... @@ -40,6 +40,11 @@
40 40 <artifactId>mina-core</artifactId>
41 41 <version>2.1.4</version>
42 42 </dependency>
  43 + <dependency>
  44 + <groupId>org.apache.mina</groupId>
  45 + <artifactId>mina-http</artifactId>
  46 + <version>2.1.4</version>
  47 + </dependency>
43 48  
44 49 <dependency>
45 50 <groupId>org.springframework.boot</groupId>
... ...
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.ClientDTO;
5   -import com.example.mina.client.service.ServerService;
6   -import com.example.mina.client.service.impl.ServerServiceImpl;
7 3 import com.example.mina.server.base.AbstractHardwareDataBuffer;
8 4 import org.apache.mina.core.future.ConnectFuture;
9 5 import org.apache.mina.core.service.IoConnector;
... ... @@ -13,6 +9,7 @@ import org.apache.mina.filter.codec.ProtocolCodecFilter;
13 9 import org.apache.mina.transport.socket.nio.NioSocketConnector;
14 10  
15 11 import java.net.InetSocketAddress;
  12 +import java.util.concurrent.ArrayBlockingQueue;
16 13  
17 14 /**
18 15 * @author dy
... ... @@ -20,59 +17,87 @@ import java.net.InetSocketAddress;
20 17 */
21 18 public abstract class AbstractClient {
22 19  
23   - protected ProtocolCodecFactory protocolCodecFactory;
  20 + /**
  21 + * 客户端与设备端连接的配置信息
  22 + */
  23 + protected BoxConnectConfig boxConnectConfig;
24 24  
25   - protected AbstractVirtualBoxClientHandler abstractVirtualBoxClientHandler;
  25 + /**
  26 + * 存储设备返回的响应数据缓存
  27 + */
  28 + protected AbstractHardwareDataBuffer responsePool;
26 29  
27   - protected AbstractHardwareDataBuffer hardwareDataBuffer;
28   -
29   - protected AbstractClientMessage abstractClientMessage;
  30 + /**
  31 + * 存储客户端的请求指令的队列
  32 + */
  33 + protected ArrayBlockingQueue<BaseRequest> requestsPool;
30 34  
31 35 protected IoSession ioSession;
32 36  
33   - protected ServerService serverService = new ServerServiceImpl();
34 37  
35   - protected AbstractClient() {
36   - init();
  38 + public AbstractClient(BoxConnectConfig connectConfig) {
  39 + this.boxConnectConfig = connectConfig;
  40 + this.requestsPool = new ArrayBlockingQueue<BaseRequest>(100);
  41 + //TODO 初始化响应缓存
  42 + this.responsePool = null;
  43 + }
  44 +
  45 + /**
  46 + *获取设备的类型
  47 + */
  48 + abstract public String getDeviceType();
  49 +
  50 + /**
  51 + * 返回客户端对响应的Handler
  52 + * @return
  53 + */
  54 + abstract protected AbstractVirtualBoxClientHandler getIoHandler();
  55 +
  56 + /**
  57 + * 返回该盒子的编解码器
  58 + * @return
  59 + */
  60 + abstract protected ProtocolCodecFactory getCodecFactory();
  61 +
  62 + /**
  63 + * 返回缓存数据,提供给Request执行;
  64 + * @return
  65 + */
  66 + public AbstractHardwareDataBuffer getResponsePool() {
  67 + return this.responsePool;
37 68 }
38 69  
39   - protected abstract void init();
40 70  
41   - public void start(ClientDTO clientDTO) {
  71 + public void start() {
42 72 //1、创建客户端IoService
43 73 IoConnector connector = new NioSocketConnector();
44 74 //客户端链接超时时间
45 75 connector.setConnectTimeoutMillis(30000);
46 76 //2、客户端过滤器
47   - connector.getFilterChain().addLast("codec", new ProtocolCodecFilter(protocolCodecFactory));
  77 + connector.getFilterChain().addLast("codec", new ProtocolCodecFilter(getCodecFactory()));
48 78 //3、客户端IoHandler,发生消息
49   - connector.setHandler(abstractVirtualBoxClientHandler);
  79 + connector.setHandler(getIoHandler());
50 80  
51 81 //连接服务端
52   - ConnectFuture connectFuture = connector.connect(new InetSocketAddress(abstractClientMessage.getServerMessage().getHost(),
53   - abstractClientMessage.getServerMessage().getPort()));
  82 + ConnectFuture connectFuture = connector.connect(new InetSocketAddress(boxConnectConfig.getHost(),
  83 + boxConnectConfig.getPort()));
54 84 // 等待建立连接
55 85 connectFuture.awaitUninterruptibly();
56 86 // 获取连接会话
57 87 this.ioSession = connectFuture.getSession();
  88 + this.ioSession.setAttribute(BoxConstants.SESSION_CONFIG_NAME, boxConnectConfig);
58 89  
59 90 }
60 91  
  92 + /**
  93 + * 执行指令
  94 + * @param request
  95 + */
  96 + public <Q extends BaseRequest<R>, R extends BaseResponse> R execute(Q request) {
  97 + requestsPool.offer(request);
  98 + ioSession.write(request);
61 99  
62   - abstract public int getAttenuation(int col);
63   -
64   - /*public boolean isConnected() {
65   - return false;
66   - }*/
67   -
68   - //public void close() {}
69   -
70   - abstract public void setAttenuation(ClientDTO clientDTO);
71   -
72   -
73   -
74   - //abstract public Boolean reset();
75   -
76   - //abstract public int[][] getAll();
  100 + return request.execute();
  101 + }
77 102  
78 103 }
... ...
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;
5   -import com.example.mina.client.entity.Command;
6 4 import com.example.mina.server.base.AbstractHardwareDataBuffer;
7   -import com.example.mina.server.util.LogUtils;
8 5 import lombok.Data;
  6 +import lombok.extern.slf4j.Slf4j;
  7 +import org.apache.mina.core.buffer.IoBuffer;
9 8 import org.apache.mina.core.service.IoHandlerAdapter;
10 9 import org.apache.mina.core.session.IdleStatus;
11 10 import org.apache.mina.core.session.IoSession;
12 11  
13   -import java.nio.charset.StandardCharsets;
14   -
15 12 /**
16 13 * @author dy
17 14 */
18 15 @Data
19   -public abstract class AbstractVirtualBoxClientHandler<RECEIVE extends BaseReceiveMessage>
20   - extends IoHandlerAdapter {
  16 +@Slf4j
  17 +public abstract class AbstractVirtualBoxClientHandler extends IoHandlerAdapter {
  18 +
  19 + protected String deviceType;
21 20  
22   - protected AbstractClientMessage clientMessage;
  21 + protected AbstractHardwareDataBuffer responsePool;
23 22  
24   - protected AbstractHardwareDataBuffer hardwareDataBuffer;
25 23  
26   - private SendMessage sendMessage = new SendMessage();
  24 + public AbstractVirtualBoxClientHandler(String deviceType, AbstractHardwareDataBuffer abstractHardwareDataBuffer) {
  25 + this.deviceType = deviceType;
  26 + this.responsePool = abstractHardwareDataBuffer;
  27 + }
27 28  
28   - private BaseReceiveMessage receiveMessage;
  29 + protected BoxConnectConfig getConnectConfig(IoSession session) {
  30 + Object boxConnectConfig = session.getAttribute(BoxConstants.SESSION_CONFIG_NAME);
29 31  
30   - public AbstractVirtualBoxClientHandler(AbstractClientMessage clientMessage,
31   - AbstractHardwareDataBuffer abstractHardwareDataBuffer) {
32   - this.clientMessage = clientMessage;
33   - this.hardwareDataBuffer = abstractHardwareDataBuffer;
  32 + if( boxConnectConfig instanceof BoxConnectConfig) {
  33 + return (BoxConnectConfig) boxConnectConfig;
  34 + }
  35 + return null;
34 36 }
35 37  
36 38 @Override
37 39 public void exceptionCaught(IoSession session, Throwable throwable) {
38   - System.out.println("客户端exceptionCaught被调用!");
39   - throwable.printStackTrace();
40 40 }
41 41  
42 42 @Override
43 43 public void messageReceived(IoSession session, Object message) {
44   - if (message instanceof BaseReceiveMessage) {
45   - receiveMessage = (RECEIVE) message;
  44 + if (!(message instanceof IoBuffer)) {
  45 + log.error("客户端接收到的消息不为定义的响应类! message:" + message);
  46 + throw new RuntimeException("Unsupported response message");
46 47 }
47   - handleCommandResponse(sendMessage, receiveMessage);
48   - System.out.println("客户端messageReceived被调用!");
49 48  
50   - System.out.println("client端接收信息:" + new String(receiveMessage.getReceiveMessage(), StandardCharsets.UTF_8));
51   - LogUtils.println("client端接收信息hex:" , receiveMessage.getReceiveMessage());
  49 + //TODO 客户端将数据服务器的字符串数组读取出来
  50 + byte[] response = null;
  51 + log.info("the client recieved the device response, deviceType: {}, device:{}, response is: {}", deviceType,
  52 + getConnectConfig(session), response);
  53 + handleCommandResponse(response);
52 54 }
53 55  
54 56 @Override
55 57 public void messageSent(IoSession session, Object message) {
56   - System.out.println("客户端messageSent被调用!");
57   - System.out.println("client端发送信息:" + new String((byte[]) message, StandardCharsets.UTF_8));
58   - LogUtils.println("client端发送信息hex:", (byte[]) message);
59   - this.sendMessage = SendMessage.builder().sendMessage((byte[]) message).build();
60 58 }
61 59  
62 60 @Override
63 61 public void inputClosed(IoSession session) {
64   - System.out.println("客户端inputClosed被调用!");
65   - System.out.println("client端:" + session.getId() + " 关闭输入");
66 62 }
67 63  
68 64 @Override
69 65 public void sessionClosed(IoSession session) {
70   - System.out.println("客户端sessionClosed被调用!");
71   - System.out.println("client端与:" + session.getRemoteAddress().toString() + " 关闭连接");
72   - System.exit(0);
73 66 }
74 67  
75 68 @Override
76 69 public void sessionCreated(IoSession session) {
77   - System.out.println("客户端sessionCreated被调用!");
78   - System.out.println("client端与:" + session.getRemoteAddress().toString() + " 建立连接");
  70 +
79 71 }
80 72  
81 73 @Override
82 74 public void sessionIdle(IoSession session, IdleStatus status) {
83   - System.out.println("客户端sessionIdle被调用!");
84   - System.out.println("client端闲置连接:会话 " + session.getId() + " 被触发 " + session.getIdleCount(status) + " 次");
  75 + log.info("the session with box was idle, deviceType:{}, device is {}", deviceType, getConnectConfig(session));
85 76 }
86 77  
87 78 @Override
88 79 public void sessionOpened(IoSession session) {
89   - // for (int i = 0; i < clientMessage.getCommands().size(); i++) {
90   -// handleOneCommand(i, session);
91   -// }
92   -// handleOneCommand(1, session);
93   - System.out.println("客户端sessionOpened被调用!");
94   - System.out.println("client端打开连接");
  80 + log.info("the system has connected to device, deviceType: {}, device is {}", deviceType, getConnectConfig(session));
95 81 }
96 82  
97   - protected void handleOneCommand(int i, IoSession session) {
98   -
99   - Command command = clientMessage.getCommands().get(i);
100   -
101   - session.write(command.getBytes());
102   - }
103   -
104   - protected abstract boolean handleCommandResponse(SendMessage sendMessage, BaseReceiveMessage receiveMessage);
105   -
  83 + abstract public boolean handleCommandResponse(byte[] response);
106 84 }
... ...
src/main/java/com/example/mina/client/base/BaseReceiveMessage.java
... ... @@ -1,19 +0,0 @@
1   -package com.example.mina.client.base;
2   -
3   -import lombok.AllArgsConstructor;
4   -import lombok.Data;
5   -import lombok.NoArgsConstructor;
6   -import lombok.experimental.SuperBuilder;
7   -
8   -/**
9   - * @author dy
10   - * @date 2021/3/12
11   - */
12   -@SuperBuilder
13   -@Data
14   -@AllArgsConstructor
15   -@NoArgsConstructor
16   -public abstract class BaseReceiveMessage {
17   -
18   - private byte[] receiveMessage;
19   -}
src/main/java/com/example/mina/client/base/BaseRequest.java 0 → 100644
... ... @@ -0,0 +1,28 @@
  1 +package com.example.mina.client.base;
  2 +
  3 +import lombok.AllArgsConstructor;
  4 +import lombok.Data;
  5 +import lombok.NoArgsConstructor;
  6 +import lombok.experimental.SuperBuilder;
  7 +
  8 +/**
  9 + * @author dy
  10 + * @date 2021/3/12
  11 + */
  12 +@SuperBuilder
  13 +@Data
  14 +@AllArgsConstructor
  15 +@NoArgsConstructor
  16 +public abstract class BaseRequest <R extends BaseResponse>{
  17 +
  18 + protected AbstractClient client;
  19 +
  20 + /**
  21 + * 指令名称
  22 + * @return
  23 + */
  24 + abstract public String getCommandName();
  25 +
  26 + abstract public R execute();
  27 +
  28 +}
... ...
src/main/java/com/example/mina/client/base/BaseResponse.java 0 → 100644
... ... @@ -0,0 +1,9 @@
  1 +package com.example.mina.client.base;
  2 +
  3 +import lombok.Data;
  4 +
  5 +@Data
  6 +public abstract class BaseResponse {
  7 + private String responseType;
  8 +
  9 +}
... ...
src/main/java/com/example/mina/client/base/BoxConnectConfig.java 0 → 100644
... ... @@ -0,0 +1,24 @@
  1 +package com.example.mina.client.base;
  2 +
  3 +
  4 +import lombok.Builder;
  5 +import lombok.Data;
  6 +
  7 +import java.util.Map;
  8 +
  9 +@Data
  10 +@Builder
  11 +public class BoxConnectConfig {
  12 +
  13 + private String host;
  14 +
  15 + private Integer port;
  16 +
  17 + private Integer rows;
  18 +
  19 + private Integer cols;
  20 +
  21 + private Integer maxAttenuation;
  22 +
  23 + private Map<String, Object> options;
  24 +}
... ...
src/main/java/com/example/mina/client/base/BoxConstants.java 0 → 100644
... ... @@ -0,0 +1,13 @@
  1 +package com.example.mina.client.base;
  2 +
  3 +public class BoxConstants {
  4 +
  5 + public static final String SESSION_CONFIG_NAME = "SESSION_CONFIG";
  6 +
  7 + public static final String DEVICE_TYPE_AERO = "AEROFLEX";
  8 +
  9 + public static final String DEVICE_TYPE_LTE3000 = "LTE3000";
  10 +
  11 + public static final String COMMAND_RESET = "RESET";
  12 +
  13 +}
... ...
src/main/java/com/example/mina/client/base/ByteProtocolFactory.java 0 → 100644
... ... @@ -0,0 +1,61 @@
  1 +package com.example.mina.client.base;
  2 +
  3 +import org.apache.mina.core.buffer.IoBuffer;
  4 +import org.apache.mina.core.session.IoSession;
  5 +import org.apache.mina.filter.codec.*;
  6 +
  7 +public class ByteProtocolFactory implements ProtocolCodecFactory {
  8 +
  9 + private final ByteEncoder encoder;
  10 + private final ByteDecoder decoder;
  11 +
  12 + //构造
  13 + public ByteProtocolFactory() {
  14 + encoder = new ByteEncoder();
  15 + decoder = new ByteDecoder();
  16 + }
  17 +
  18 + @Override
  19 + public ProtocolDecoder getDecoder(IoSession arg0) throws Exception {
  20 + return decoder;
  21 + }
  22 +
  23 + @Override
  24 + public ProtocolEncoder getEncoder(IoSession arg0) throws Exception {
  25 + return encoder;
  26 + }
  27 +
  28 + public class ByteEncoder extends ProtocolEncoderAdapter {
  29 +
  30 + //编码 将数据包转成字节数组
  31 + @Override
  32 + public void encode(IoSession session, Object message, ProtocolEncoderOutput out) throws Exception {
  33 + byte[] bytes = (byte[]) message;
  34 +
  35 + IoBuffer buffer = IoBuffer.allocate(bytes.length);
  36 + buffer.setAutoExpand(true);
  37 +
  38 + // 将数据放入缓冲IoBuffer
  39 + buffer.put(bytes);
  40 + // 写状态切换到读状态
  41 + buffer.flip();
  42 +
  43 + out.write(buffer);
  44 + }
  45 +
  46 + }
  47 +
  48 + public class ByteDecoder extends ProtocolDecoderAdapter {
  49 +
  50 + @Override
  51 + public void decode(IoSession session, IoBuffer in, ProtocolDecoderOutput out) throws Exception {
  52 + int limit = in.limit();
  53 + byte[] bytes = new byte[limit];
  54 +
  55 + in.get(bytes);
  56 +
  57 + out.write(bytes);
  58 + }
  59 + }
  60 +
  61 +}
... ...
src/main/java/com/example/mina/client/base/request/ResetRequest.java 0 → 100644
... ... @@ -0,0 +1,17 @@
  1 +package com.example.mina.client.base.request;
  2 +
  3 +import com.example.mina.client.base.BaseRequest;
  4 +import com.example.mina.client.base.BoxConstants;
  5 +import com.example.mina.client.base.response.ResetResponse;
  6 +
  7 +public class ResetRequest extends BaseRequest<ResetResponse> {
  8 + @Override
  9 + public String getCommandName() {
  10 + return BoxConstants.COMMAND_RESET;
  11 + }
  12 +
  13 + @Override
  14 + public ResetResponse execute() {
  15 + return null;
  16 + }
  17 +}
... ...
src/main/java/com/example/mina/client/base/response/ResetResponse.java 0 → 100644
... ... @@ -0,0 +1,7 @@
  1 +package com.example.mina.client.base.response;
  2 +
  3 +import com.example.mina.client.base.BaseResponse;
  4 +
  5 +public class ResetResponse extends BaseResponse {
  6 +
  7 +}
... ...
src/main/java/com/example/mina/client/box/aeroflex/AeroflexByteDecoder.java
... ... @@ -1,29 +0,0 @@
1   -package com.example.mina.client.box.aeroflex;
2   -
3   -import org.apache.mina.core.buffer.IoBuffer;
4   -import org.apache.mina.core.session.IoSession;
5   -import org.apache.mina.filter.codec.ProtocolDecoder;
6   -import org.apache.mina.filter.codec.ProtocolDecoderAdapter;
7   -import org.apache.mina.filter.codec.ProtocolDecoderOutput;
8   -import org.slf4j.Logger;
9   -import org.slf4j.LoggerFactory;
10   -
11   -/**
12   - * @author dy
13   - * @date 2021/3/3
14   - */
15   -public class AeroflexByteDecoder extends ProtocolDecoderAdapter {
16   - //打印日志信息
17   - private final static Logger log = LoggerFactory
18   - .getLogger(ProtocolDecoder.class);
19   -
20   - @Override
21   - public void decode(IoSession session, IoBuffer in, ProtocolDecoderOutput out) throws Exception {
22   - int limit = in.limit();
23   - byte[] bytes = new byte[limit];
24   -
25   - in.get(bytes);
26   -
27   - out.write(bytes);
28   - }
29   -}
src/main/java/com/example/mina/client/box/aeroflex/AeroflexByteEnCoder.java
... ... @@ -1,39 +0,0 @@
1   -package com.example.mina.client.box.aeroflex;
2   -
3   -import org.apache.mina.core.buffer.IoBuffer;
4   -import org.apache.mina.core.session.IoSession;
5   -import org.apache.mina.filter.codec.ProtocolEncoder;
6   -import org.apache.mina.filter.codec.ProtocolEncoderAdapter;
7   -import org.apache.mina.filter.codec.ProtocolEncoderOutput;
8   -import org.slf4j.Logger;
9   -import org.slf4j.LoggerFactory;
10   -
11   -/**
12   - * @author dy
13   - * @date 2021/3/3
14   - */
15   -public class AeroflexByteEnCoder extends ProtocolEncoderAdapter {
16   - //用于打印日志信息
17   - private final static Logger log = LoggerFactory
18   - .getLogger(ProtocolEncoder.class);
19   -
20   - //编码 将数据包转成字节数组
21   - @Override
22   - public void encode(IoSession session, Object message, ProtocolEncoderOutput out) throws Exception {
23   - byte[] bytes = (byte[]) message;
24   -
25   - IoBuffer buffer = IoBuffer.allocate(bytes.length);
26   - buffer.setAutoExpand(true);
27   -
28   - // 将数据放入缓冲IoBuffer
29   - buffer.put(bytes);
30   - // 写状态切换到读状态
31   - buffer.flip();
32   -
33   - out.write(buffer);
34   -// out.flush();
35   -//
36   -// buffer.free();
37   - }
38   -
39   -}
src/main/java/com/example/mina/client/box/aeroflex/AeroflexByteFactory.java
... ... @@ -1,34 +0,0 @@
1   -package com.example.mina.client.box.aeroflex;
2   -
3   -import org.apache.mina.core.session.IoSession;
4   -import org.apache.mina.filter.codec.ProtocolCodecFactory;
5   -import org.apache.mina.filter.codec.ProtocolDecoder;
6   -import org.apache.mina.filter.codec.ProtocolEncoder;
7   -
8   -/**
9   - * @author dy
10   - * @date 2021/3/3
11   - */
12   -public class AeroflexByteFactory implements ProtocolCodecFactory {
13   - private final AeroflexByteDecoder decoder;
14   - private final AeroflexByteEnCoder encoder;
15   -
16   - //构造
17   - public AeroflexByteFactory() {
18   - encoder = new AeroflexByteEnCoder();
19   - decoder = new AeroflexByteDecoder();
20   - }
21   -
22   - @Override
23   - public ProtocolDecoder getDecoder(IoSession arg0) throws Exception {
24   - // TODO Auto-generated method stub
25   - return decoder;
26   - }
27   -
28   - @Override
29   - public ProtocolEncoder getEncoder(IoSession arg0) throws Exception {
30   - // TODO Auto-generated method stub
31   - return encoder;
32   - }
33   -
34   -}
src/main/java/com/example/mina/client/box/aeroflex/AeroflexClient.java
1 1 package com.example.mina.client.box.aeroflex;
2 2  
3 3 import com.example.mina.client.base.AbstractClient;
4   -import com.example.mina.client.entity.AeroflexMessage;
5   -import com.example.mina.client.entity.ClientDTO;
6   -import com.example.mina.client.entity.ServerMessage;
7   -import com.example.mina.server.entity.AeroflexDataBuffer;
  4 +import com.example.mina.client.base.AbstractVirtualBoxClientHandler;
  5 +import com.example.mina.client.base.BoxConnectConfig;
  6 +import com.example.mina.client.base.BoxConstants;
  7 +import org.apache.mina.filter.codec.ProtocolCodecFactory;
8 8  
9 9 /**
10 10 * @author dy
... ... @@ -12,44 +12,24 @@ import com.example.mina.server.entity.AeroflexDataBuffer;
12 12 */
13 13 public class AeroflexClient extends AbstractClient {
14 14  
15   - @Override
16   - protected void init() {
17   - ServerMessage serverMessage = serverService.getServerService(this.getClass().getSimpleName());
18   - hardwareDataBuffer = new AeroflexDataBuffer(10, 10);
19   - abstractClientMessage = new AeroflexMessage();
20   - abstractClientMessage.setServerMessage(serverMessage);
21   -
22   - protocolCodecFactory = new AeroflexByteFactory();
23   - abstractVirtualBoxClientHandler = new AeroflexClientHandler(abstractClientMessage, hardwareDataBuffer);
  15 + public AeroflexClient(BoxConnectConfig boxConnectConfig) {
  16 + super(boxConnectConfig);
24 17 }
25 18  
26 19 @Override
27   - public void setAttenuation(ClientDTO clientDTO) {
28   -
29   - }
30   -
31   - /*@Override
32   - public boolean setAttenuation(int row, int col, int attenuation) {
33   - return false;
  20 + public String getDeviceType() {
  21 + return BoxConstants.DEVICE_TYPE_AERO;
34 22 }
35 23  
36 24 @Override
37   - public int getAttenuation(int row, int col) {
38   - return 0;
  25 + protected ProtocolCodecFactory getCodecFactory() {
  26 + return null;
39 27 }
40 28  
41 29 @Override
42   - public Boolean reset() {
  30 + protected AbstractVirtualBoxClientHandler getIoHandler() {
43 31 return null;
44 32 }
45 33  
46   - @Override
47   - public int[][] getAll() {
48   - return new int[0][];
49   - }*/
50 34  
51   - @Override
52   - public int getAttenuation(int col) {
53   - return 0;
54   - }
55 35 }
... ...
src/main/java/com/example/mina/client/box/aeroflex/AeroflexClientHandler.java
1 1 package com.example.mina.client.box.aeroflex;
2 2  
3 3 import com.example.mina.client.base.AbstractVirtualBoxClientHandler;
4   -import com.example.mina.client.base.BaseReceiveMessage;
5   -import com.example.mina.client.base.SendMessage;
6   -import com.example.mina.client.entity.AbstractClientMessage;
7   -import com.example.mina.server.base.AbstractHardwareDataBuffer;
  4 +import com.example.mina.client.base.BaseResponse;
8 5  
9 6 /**
10 7 * @author dy
... ... @@ -12,13 +9,10 @@ import com.example.mina.server.base.AbstractHardwareDataBuffer;
12 9 */
13 10 public class AeroflexClientHandler extends AbstractVirtualBoxClientHandler {
14 11  
15   - public AeroflexClientHandler(AbstractClientMessage clientMessage,
16   - AbstractHardwareDataBuffer abstractHardwareDataBuffer) {
17   - super(clientMessage, abstractHardwareDataBuffer);
18   - }
19   -
20 12 @Override
21   - protected boolean handleCommandResponse(SendMessage sendMessage, BaseReceiveMessage receiveMessage) {
  13 + public boolean handleCommandResponse(byte[] response) {
  14 +
22 15 return false;
23 16 }
  17 +
24 18 }
... ...
src/main/java/com/example/mina/client/box/lte3000/Lte3000ByteDecoder.java
... ... @@ -1,31 +0,0 @@
1   -package com.example.mina.client.box.lte3000;
2   -
3   -import org.apache.mina.core.buffer.IoBuffer;
4   -import org.apache.mina.core.session.IoSession;
5   -import org.apache.mina.filter.codec.ProtocolDecoder;
6   -import org.apache.mina.filter.codec.ProtocolDecoderAdapter;
7   -import org.apache.mina.filter.codec.ProtocolDecoderOutput;
8   -import org.slf4j.Logger;
9   -import org.slf4j.LoggerFactory;
10   -
11   -/**
12   - * @author dy
13   - * @date 2021/3/3
14   - */
15   -public class Lte3000ByteDecoder extends ProtocolDecoderAdapter {
16   - //打印日志信息
17   - private final static Logger log = LoggerFactory
18   - .getLogger(ProtocolDecoder.class);
19   -
20   - @Override
21   - public void decode(IoSession session, IoBuffer in, ProtocolDecoderOutput out) throws Exception {
22   - int limit = in.limit();
23   - byte[] bytes = new byte[limit];
24   -
25   - in.get(bytes);
26   -
27   - Lte3000ReceiveMessage receiveMessage = Lte3000ReceiveMessage.builder().receiveMessage(bytes).build();
28   -
29   - out.write(receiveMessage);
30   - }
31   -}
src/main/java/com/example/mina/client/box/lte3000/Lte3000ByteEnCoder.java
... ... @@ -1,39 +0,0 @@
1   -package com.example.mina.client.box.lte3000;
2   -
3   -import org.apache.mina.core.buffer.IoBuffer;
4   -import org.apache.mina.core.session.IoSession;
5   -import org.apache.mina.filter.codec.ProtocolEncoder;
6   -import org.apache.mina.filter.codec.ProtocolEncoderAdapter;
7   -import org.apache.mina.filter.codec.ProtocolEncoderOutput;
8   -import org.slf4j.Logger;
9   -import org.slf4j.LoggerFactory;
10   -
11   -/**
12   - * @author dy
13   - * @date 2021/3/3
14   - */
15   -public class Lte3000ByteEnCoder extends ProtocolEncoderAdapter {
16   - //用于打印日志信息
17   - private final static Logger log = LoggerFactory
18   - .getLogger(ProtocolEncoder.class);
19   -
20   - //编码 将数据包转成字节数组
21   - @Override
22   - public void encode(IoSession session, Object message, ProtocolEncoderOutput out) throws Exception {
23   - byte[] bytes = (byte[]) message;
24   -
25   - IoBuffer buffer = IoBuffer.allocate(bytes.length);
26   - buffer.setAutoExpand(true);
27   -
28   - // 将数据放入缓冲IoBuffer
29   - buffer.put(bytes);
30   - // 写状态切换到读状态
31   - buffer.flip();
32   -
33   - out.write(buffer);
34   -// out.flush();
35   -//
36   -// buffer.free();
37   - }
38   -
39   -}
src/main/java/com/example/mina/client/box/lte3000/Lte3000ByteFactory.java
... ... @@ -1,34 +0,0 @@
1   -package com.example.mina.client.box.lte3000;
2   -
3   -import org.apache.mina.core.session.IoSession;
4   -import org.apache.mina.filter.codec.ProtocolCodecFactory;
5   -import org.apache.mina.filter.codec.ProtocolDecoder;
6   -import org.apache.mina.filter.codec.ProtocolEncoder;
7   -
8   -/**
9   - * @author dy
10   - * @date 2021/3/3
11   - */
12   -public class Lte3000ByteFactory implements ProtocolCodecFactory {
13   - private final Lte3000ByteDecoder decoder;
14   - private final Lte3000ByteEnCoder encoder;
15   -
16   - //构造
17   - public Lte3000ByteFactory() {
18   - encoder = new Lte3000ByteEnCoder();
19   - decoder = new Lte3000ByteDecoder();
20   - }
21   -
22   - @Override
23   - public ProtocolDecoder getDecoder(IoSession arg0) throws Exception {
24   - // TODO Auto-generated method stub
25   - return decoder;
26   - }
27   -
28   - @Override
29   - public ProtocolEncoder getEncoder(IoSession arg0) throws Exception {
30   - // TODO Auto-generated method stub
31   - return encoder;
32   - }
33   -
34   -}
src/main/java/com/example/mina/client/box/lte3000/Lte3000Client.java
1 1 package com.example.mina.client.box.lte3000;
2 2  
3 3 import com.example.mina.client.base.AbstractClient;
4   -import com.example.mina.client.entity.ClientDTO;
5   -import com.example.mina.client.entity.Command;
6   -import com.example.mina.client.entity.Lte3000Message;
7   -import com.example.mina.client.entity.ServerMessage;
8   -import com.example.mina.server.entity.Entry;
9   -import com.example.mina.server.entity.Lte3000DataBuffer;
10   -import com.example.mina.server.util.Lte3000CommandHelper;
  4 +import com.example.mina.client.base.AbstractVirtualBoxClientHandler;
  5 +import com.example.mina.client.base.BoxConnectConfig;
  6 +import org.apache.mina.filter.codec.ProtocolCodecFactory;
11 7  
12 8 /**
13 9 * @author dy
14 10 * @date 2021/3/10
15 11 */
16 12 public class Lte3000Client extends AbstractClient {
17   -
18   - @Override
19   - protected void init() {
20   - ServerMessage serverMessage = serverService.getServerService(this.getClass().getSimpleName());
21   - hardwareDataBuffer = new Lte3000DataBuffer(32, 32, 30);
22   - abstractClientMessage = new Lte3000Message();
23   - abstractClientMessage.setServerMessage(serverMessage);
24   -
25   - for (int i = 0; i < this.hardwareDataBuffer.getMaxRow(); i++) {
26   - abstractClientMessage.getCommands().add(new Command("", Lte3000CommandHelper.genCommandGetCross(i + 1)));
27   - }
28   -
29   - // query attenuation
30   - // the LTE attenuation is bound to column
31   - for (int j = 0; j < this.hardwareDataBuffer.getMaxCol(); j++) {
32   - abstractClientMessage.getCommands().add(new Command("", Lte3000CommandHelper.genCommandGetAttn(j + 1)));
33   - }
34   - protocolCodecFactory = new Lte3000ByteFactory();
35   - abstractVirtualBoxClientHandler = new Lte3000ClientHandler(abstractClientMessage, hardwareDataBuffer);
  13 + public Lte3000Client(BoxConnectConfig connectConfig) {
  14 + super(connectConfig);
36 15 }
37 16  
38   -
39 17 @Override
40   - public void setAttenuation(ClientDTO clientDTO) {
41   - byte[] cmd;
42   - if (clientDTO.getRow() == 0) {
43   - cmd = Lte3000CommandHelper.genCommandSetAttn(clientDTO.getCol(), clientDTO.getMaxAttn());
44   - } else {
45   - cmd = Lte3000CommandHelper.genCommandSetCross(clientDTO.getRow(), clientDTO.getCol());
46   - }
47   - ioSession.write(cmd);
48   - }
49   -
50   - public boolean isCrossPointOn(int row, int col) {
51   - return hardwareDataBuffer.getAttenuation(row, col) >= 1;
  18 + public String getDeviceType() {
  19 + return null;
52 20 }
53 21  
54 22 @Override
55   - public int getAttenuation(int col) {
56   - return hardwareDataBuffer.getOffset(col);
57   - }
58   -
59   - public byte[] genCloseCommand(){
60   - return Lte3000CommandHelper.genCommandGetCross(1);
61   - }
62   -
63   - public Entry[][] getMatrix(){
64   - return hardwareDataBuffer.getMatrixData();
65   - }
66   -
67   - public Entry[] getOffsetData(){
68   - return hardwareDataBuffer.getOffsetData();
69   - }
70   -
71   - /*@Override
72   - public Boolean reset() {
  23 + protected AbstractVirtualBoxClientHandler getIoHandler() {
73 24 return null;
74 25 }
75 26  
76 27 @Override
77   - public int[][] getAll() {
78   - return new int[0][];
79   - }*/
80   -
  28 + protected ProtocolCodecFactory getCodecFactory() {
  29 + return null;
  30 + }
81 31 }
... ...
src/main/java/com/example/mina/client/box/lte3000/Lte3000ClientHandler.java
No preview for this file type
src/main/java/com/example/mina/client/box/lte3000/Lte3000ReceiveMessage.java
... ... @@ -1,17 +0,0 @@
1   -package com.example.mina.client.box.lte3000;
2   -
3   -import com.example.mina.client.base.BaseReceiveMessage;
4   -import lombok.AllArgsConstructor;
5   -import lombok.Data;
6   -import lombok.NoArgsConstructor;
7   -import lombok.experimental.SuperBuilder;
8   -
9   -/**
10   - * @author dy
11   - * @date 2021/3/12
12   - */
13   -@SuperBuilder
14   -@Data
15   -@AllArgsConstructor
16   -public class Lte3000ReceiveMessage extends BaseReceiveMessage {
17   -}
src/main/java/com/example/mina/client/entity/AbstractClientMessage.java
... ... @@ -1,21 +0,0 @@
1   -package com.example.mina.client.entity;
2   -
3   -import lombok.AllArgsConstructor;
4   -import lombok.Builder;
5   -import lombok.Data;
6   -import lombok.NoArgsConstructor;
7   -
8   -import java.util.ArrayList;
9   -import java.util.List;
10   -
11   -/**
12   - * @author dy
13   - * @date 2021/3/11
14   - */
15   -@Data
16   -public abstract class AbstractClientMessage {
17   -
18   - protected ServerMessage serverMessage;
19   -
20   - protected List<Command> commands = new ArrayList<>();
21   -}
src/main/java/com/example/mina/client/entity/AeroflexMessage.java
... ... @@ -1,15 +0,0 @@
1   -package com.example.mina.client.entity;
2   -
3   -import lombok.AllArgsConstructor;
4   -import lombok.Builder;
5   -import lombok.Data;
6   -import lombok.NoArgsConstructor;
7   -
8   -import java.util.List;
9   -
10   -/**
11   - * @author dy
12   - * @date 2021/3/11
13   - */
14   -public class AeroflexMessage extends AbstractClientMessage{
15   -}
src/main/java/com/example/mina/client/entity/ClientDTO.java
... ... @@ -1,22 +0,0 @@
1   -package com.example.mina.client.entity;
2   -
3   -import lombok.Builder;
4   -import lombok.Data;
5   -
6   -/**
7   - * @author dy
8   - * @date 2021/3/12
9   - */
10   -@Data
11   -@Builder
12   -public class ClientDTO {
13   -
14   - private Integer row;
15   -
16   - private Integer col;
17   -
18   - private Integer maxAttn;
19   -
20   - private String description;
21   -
22   -}
src/main/java/com/example/mina/client/entity/Lte3000Message.java
... ... @@ -1,13 +0,0 @@
1   -package com.example.mina.client.entity;
2   -
3   -import lombok.AllArgsConstructor;
4   -import lombok.Builder;
5   -import lombok.Data;
6   -import lombok.NoArgsConstructor;
7   -
8   -/**
9   - * @author dy
10   - * @date 2021/3/11
11   - */
12   -public class Lte3000Message extends AbstractClientMessage{
13   -}
src/main/java/com/example/mina/client/entity/ServerMessage.java
... ... @@ -1,21 +0,0 @@
1   -package com.example.mina.client.entity;
2   -
3   -import lombok.AllArgsConstructor;
4   -import lombok.Builder;
5   -import lombok.Data;
6   -import lombok.NoArgsConstructor;
7   -
8   -/**
9   - * @author dy
10   - * @date 2021/3/12
11   - */
12   -@Data
13   -@NoArgsConstructor
14   -@AllArgsConstructor
15   -@Builder
16   -public class ServerMessage {
17   -
18   - protected String host;
19   -
20   - protected int port;
21   -}
src/main/java/com/example/mina/client/service/ServerService.java
... ... @@ -1,12 +0,0 @@
1   -package com.example.mina.client.service;
2   -
3   -import com.example.mina.client.entity.AbstractClientMessage;
4   -import com.example.mina.client.entity.ServerMessage;
5   -
6   -/**
7   - * @author dy
8   - * @date 2021/3/12
9   - */
10   -public interface ServerService {
11   - ServerMessage getServerService(String serverName);
12   -}
src/main/java/com/example/mina/client/service/impl/ServerServiceImpl.java
... ... @@ -1,22 +0,0 @@
1   -package com.example.mina.client.service.impl;
2   -
3   -import com.example.mina.client.entity.ServerMessage;
4   -import com.example.mina.client.service.ServerService;
5   -
6   -/**
7   - * @author dy
8   - * @date 2021/3/12
9   - */
10   -public class ServerServiceImpl implements ServerService {
11   -
12   - @Override
13   - public ServerMessage getServerService(String serverName) {
14   - // 根据服务器名称获取数据库ip,port
15   - // todo
16   - ServerMessage serverMessage = ServerMessage.builder()
17   - .host("localhost")
18   - .port(9102)
19   - .build();
20   - return serverMessage;
21   - }
22   -}
src/main/java/com/example/mina/client/test/MinaClient.java
... ... @@ -1,43 +0,0 @@
1   -package com.example.mina.client.test;
2   -
3   -import com.example.mina.client.box.lte3000.Lte3000Client;
4   -import com.example.mina.client.entity.ClientDTO;
5   -import com.example.mina.server.entity.Entry;
6   -import org.springframework.stereotype.Controller;
7   -import org.springframework.web.bind.annotation.RequestMapping;
8   -import org.springframework.web.bind.annotation.ResponseBody;
9   -
10   -@Controller
11   -@RequestMapping("/client")
12   -@ResponseBody
13   -public class MinaClient {
14   -
15   - @RequestMapping("/isCrossPointOn")
16   - public void index() {
17   - ClientDTO clientDTO = ClientDTO.builder().row(2).col(3).maxAttn(5).build();
18   - Lte3000Client lte3000Client = new Lte3000Client();
19   - lte3000Client.start(clientDTO);
20   -
21   - boolean a = lte3000Client.isCrossPointOn(clientDTO.getRow(),clientDTO.getCol());
22   - System.out.println(a);
23   - }
24   -
25   - public static void main(String[] args) {
26   -
27   - ClientDTO clientDTO = ClientDTO.builder().row(2).col(3).maxAttn(5).build();
28   - Lte3000Client lte3000Client = new Lte3000Client();
29   - lte3000Client.start(clientDTO);
30   -
31   - boolean a = lte3000Client.isCrossPointOn(clientDTO.getRow(),clientDTO.getCol());
32   - int c = lte3000Client.getAttenuation(clientDTO.getCol());
33   - byte[] bytes = lte3000Client.genCloseCommand();
34   - Entry[][] entries =lte3000Client.getMatrix();
35   - Entry[] entry =lte3000Client.getOffsetData();
36   - int q = lte3000Client.getAttenuation(clientDTO.getCol());
37   - clientDTO.setRow(0);
38   - lte3000Client.setAttenuation(clientDTO);
39   - int w = lte3000Client.getAttenuation(clientDTO.getCol());
40   -
41   -
42   - }
43   -}