diff --git a/pom.xml b/pom.xml index 622b282..8679a6a 100644 --- a/pom.xml +++ b/pom.xml @@ -40,6 +40,11 @@ mina-core 2.1.4 + + org.apache.mina + mina-http + 2.1.4 + org.springframework.boot 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 d6d798e..6690654 100644 --- a/src/main/java/com/example/mina/client/base/AbstractClient.java +++ b/src/main/java/com/example/mina/client/base/AbstractClient.java @@ -1,9 +1,5 @@ package com.example.mina.client.base; -import com.example.mina.client.entity.AbstractClientMessage; -import com.example.mina.client.entity.ClientDTO; -import com.example.mina.client.service.ServerService; -import com.example.mina.client.service.impl.ServerServiceImpl; import com.example.mina.server.base.AbstractHardwareDataBuffer; import org.apache.mina.core.future.ConnectFuture; import org.apache.mina.core.service.IoConnector; @@ -13,6 +9,7 @@ import org.apache.mina.filter.codec.ProtocolCodecFilter; import org.apache.mina.transport.socket.nio.NioSocketConnector; import java.net.InetSocketAddress; +import java.util.concurrent.ArrayBlockingQueue; /** * @author dy @@ -20,59 +17,87 @@ import java.net.InetSocketAddress; */ public abstract class AbstractClient { - protected ProtocolCodecFactory protocolCodecFactory; + /** + * 客户端与设备端连接的配置信息 + */ + protected BoxConnectConfig boxConnectConfig; - protected AbstractVirtualBoxClientHandler abstractVirtualBoxClientHandler; + /** + * 存储设备返回的响应数据缓存 + */ + protected AbstractHardwareDataBuffer responsePool; - protected AbstractHardwareDataBuffer hardwareDataBuffer; - - protected AbstractClientMessage abstractClientMessage; + /** + * 存储客户端的请求指令的队列 + */ + protected ArrayBlockingQueue requestsPool; protected IoSession ioSession; - protected ServerService serverService = new ServerServiceImpl(); - protected AbstractClient() { - init(); + public AbstractClient(BoxConnectConfig connectConfig) { + this.boxConnectConfig = connectConfig; + this.requestsPool = new ArrayBlockingQueue(100); + //TODO 初始化响应缓存 + this.responsePool = null; + } + + /** + *获取设备的类型 + */ + abstract public String getDeviceType(); + + /** + * 返回客户端对响应的Handler + * @return + */ + abstract protected AbstractVirtualBoxClientHandler getIoHandler(); + + /** + * 返回该盒子的编解码器 + * @return + */ + abstract protected ProtocolCodecFactory getCodecFactory(); + + /** + * 返回缓存数据,提供给Request执行; + * @return + */ + public AbstractHardwareDataBuffer getResponsePool() { + return this.responsePool; } - protected abstract void init(); - public void start(ClientDTO clientDTO) { + public void start() { //1、创建客户端IoService IoConnector connector = new NioSocketConnector(); //客户端链接超时时间 connector.setConnectTimeoutMillis(30000); //2、客户端过滤器 - connector.getFilterChain().addLast("codec", new ProtocolCodecFilter(protocolCodecFactory)); + connector.getFilterChain().addLast("codec", new ProtocolCodecFilter(getCodecFactory())); //3、客户端IoHandler,发生消息 - connector.setHandler(abstractVirtualBoxClientHandler); + connector.setHandler(getIoHandler()); //连接服务端 - ConnectFuture connectFuture = connector.connect(new InetSocketAddress(abstractClientMessage.getServerMessage().getHost(), - abstractClientMessage.getServerMessage().getPort())); + ConnectFuture connectFuture = connector.connect(new InetSocketAddress(boxConnectConfig.getHost(), + boxConnectConfig.getPort())); // 等待建立连接 connectFuture.awaitUninterruptibly(); // 获取连接会话 this.ioSession = connectFuture.getSession(); + this.ioSession.setAttribute(BoxConstants.SESSION_CONFIG_NAME, boxConnectConfig); } + /** + * 执行指令 + * @param request + */ + public , R extends BaseResponse> R execute(Q request) { + requestsPool.offer(request); + ioSession.write(request); - abstract public int getAttenuation(int col); - - /*public boolean isConnected() { - return false; - }*/ - - //public void close() {} - - abstract public void setAttenuation(ClientDTO clientDTO); - - - - //abstract public Boolean reset(); - - //abstract public int[][] getAll(); + return request.execute(); + } } 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 38b905a..6d593b9 100644 --- a/src/main/java/com/example/mina/client/base/AbstractVirtualBoxClientHandler.java +++ b/src/main/java/com/example/mina/client/base/AbstractVirtualBoxClientHandler.java @@ -1,106 +1,84 @@ 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 com.example.mina.server.util.LogUtils; import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.apache.mina.core.buffer.IoBuffer; import org.apache.mina.core.service.IoHandlerAdapter; import org.apache.mina.core.session.IdleStatus; import org.apache.mina.core.session.IoSession; -import java.nio.charset.StandardCharsets; - /** * @author dy */ @Data -public abstract class AbstractVirtualBoxClientHandler - extends IoHandlerAdapter { +@Slf4j +public abstract class AbstractVirtualBoxClientHandler extends IoHandlerAdapter { + + protected String deviceType; - protected AbstractClientMessage clientMessage; + protected AbstractHardwareDataBuffer responsePool; - protected AbstractHardwareDataBuffer hardwareDataBuffer; - private SendMessage sendMessage = new SendMessage(); + public AbstractVirtualBoxClientHandler(String deviceType, AbstractHardwareDataBuffer abstractHardwareDataBuffer) { + this.deviceType = deviceType; + this.responsePool = abstractHardwareDataBuffer; + } - private BaseReceiveMessage receiveMessage; + protected BoxConnectConfig getConnectConfig(IoSession session) { + Object boxConnectConfig = session.getAttribute(BoxConstants.SESSION_CONFIG_NAME); - public AbstractVirtualBoxClientHandler(AbstractClientMessage clientMessage, - AbstractHardwareDataBuffer abstractHardwareDataBuffer) { - this.clientMessage = clientMessage; - this.hardwareDataBuffer = abstractHardwareDataBuffer; + if( boxConnectConfig instanceof BoxConnectConfig) { + return (BoxConnectConfig) boxConnectConfig; + } + return null; } @Override public void exceptionCaught(IoSession session, Throwable throwable) { - System.out.println("客户端exceptionCaught被调用!"); - throwable.printStackTrace(); } @Override public void messageReceived(IoSession session, Object message) { - if (message instanceof BaseReceiveMessage) { - receiveMessage = (RECEIVE) message; + if (!(message instanceof IoBuffer)) { + log.error("客户端接收到的消息不为定义的响应类! message:" + message); + throw new RuntimeException("Unsupported response message"); } - handleCommandResponse(sendMessage, receiveMessage); - System.out.println("客户端messageReceived被调用!"); - System.out.println("client端接收信息:" + new String(receiveMessage.getReceiveMessage(), StandardCharsets.UTF_8)); - LogUtils.println("client端接收信息hex:" , receiveMessage.getReceiveMessage()); + //TODO 客户端将数据服务器的字符串数组读取出来 + byte[] response = null; + log.info("the client recieved the device response, deviceType: {}, device:{}, response is: {}", deviceType, + getConnectConfig(session), response); + handleCommandResponse(response); } @Override public void messageSent(IoSession session, Object message) { - System.out.println("客户端messageSent被调用!"); - System.out.println("client端发送信息:" + new String((byte[]) message, StandardCharsets.UTF_8)); - LogUtils.println("client端发送信息hex:", (byte[]) message); - this.sendMessage = SendMessage.builder().sendMessage((byte[]) message).build(); } @Override public void inputClosed(IoSession session) { - System.out.println("客户端inputClosed被调用!"); - System.out.println("client端:" + session.getId() + " 关闭输入"); } @Override public void sessionClosed(IoSession session) { - System.out.println("客户端sessionClosed被调用!"); - System.out.println("client端与:" + session.getRemoteAddress().toString() + " 关闭连接"); - System.exit(0); } @Override public void sessionCreated(IoSession session) { - System.out.println("客户端sessionCreated被调用!"); - System.out.println("client端与:" + session.getRemoteAddress().toString() + " 建立连接"); + } @Override public void sessionIdle(IoSession session, IdleStatus status) { - System.out.println("客户端sessionIdle被调用!"); - System.out.println("client端闲置连接:会话 " + session.getId() + " 被触发 " + session.getIdleCount(status) + " 次"); + log.info("the session with box was idle, deviceType:{}, device is {}", deviceType, getConnectConfig(session)); } @Override public void sessionOpened(IoSession session) { - // for (int i = 0; i < clientMessage.getCommands().size(); i++) { -// handleOneCommand(i, session); -// } -// handleOneCommand(1, session); - System.out.println("客户端sessionOpened被调用!"); - System.out.println("client端打开连接"); + log.info("the system has connected to device, deviceType: {}, device is {}", deviceType, getConnectConfig(session)); } - protected void handleOneCommand(int i, IoSession session) { - - Command command = clientMessage.getCommands().get(i); - - session.write(command.getBytes()); - } - - protected abstract boolean handleCommandResponse(SendMessage sendMessage, BaseReceiveMessage receiveMessage); - + abstract public boolean handleCommandResponse(byte[] response); } diff --git a/src/main/java/com/example/mina/client/base/BaseReceiveMessage.java b/src/main/java/com/example/mina/client/base/BaseReceiveMessage.java deleted file mode 100644 index ac31d32..0000000 --- a/src/main/java/com/example/mina/client/base/BaseReceiveMessage.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.example.mina.client.base; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import lombok.experimental.SuperBuilder; - -/** - * @author dy - * @date 2021/3/12 - */ -@SuperBuilder -@Data -@AllArgsConstructor -@NoArgsConstructor -public abstract class BaseReceiveMessage { - - private byte[] receiveMessage; -} diff --git a/src/main/java/com/example/mina/client/base/BaseRequest.java b/src/main/java/com/example/mina/client/base/BaseRequest.java new file mode 100644 index 0000000..cd1ec98 --- /dev/null +++ b/src/main/java/com/example/mina/client/base/BaseRequest.java @@ -0,0 +1,28 @@ +package com.example.mina.client.base; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +/** + * @author dy + * @date 2021/3/12 + */ +@SuperBuilder +@Data +@AllArgsConstructor +@NoArgsConstructor +public abstract class BaseRequest { + + protected AbstractClient client; + + /** + * 指令名称 + * @return + */ + abstract public String getCommandName(); + + abstract public R execute(); + +} diff --git a/src/main/java/com/example/mina/client/base/BaseResponse.java b/src/main/java/com/example/mina/client/base/BaseResponse.java new file mode 100644 index 0000000..725ebcd --- /dev/null +++ b/src/main/java/com/example/mina/client/base/BaseResponse.java @@ -0,0 +1,9 @@ +package com.example.mina.client.base; + +import lombok.Data; + +@Data +public abstract class BaseResponse { + private String responseType; + +} diff --git a/src/main/java/com/example/mina/client/base/BoxConnectConfig.java b/src/main/java/com/example/mina/client/base/BoxConnectConfig.java new file mode 100644 index 0000000..3a7c30e --- /dev/null +++ b/src/main/java/com/example/mina/client/base/BoxConnectConfig.java @@ -0,0 +1,24 @@ +package com.example.mina.client.base; + + +import lombok.Builder; +import lombok.Data; + +import java.util.Map; + +@Data +@Builder +public class BoxConnectConfig { + + private String host; + + private Integer port; + + private Integer rows; + + private Integer cols; + + private Integer maxAttenuation; + + private Map options; +} diff --git a/src/main/java/com/example/mina/client/base/BoxConstants.java b/src/main/java/com/example/mina/client/base/BoxConstants.java new file mode 100644 index 0000000..9a105d7 --- /dev/null +++ b/src/main/java/com/example/mina/client/base/BoxConstants.java @@ -0,0 +1,13 @@ +package com.example.mina.client.base; + +public class BoxConstants { + + public static final String SESSION_CONFIG_NAME = "SESSION_CONFIG"; + + public static final String DEVICE_TYPE_AERO = "AEROFLEX"; + + public static final String DEVICE_TYPE_LTE3000 = "LTE3000"; + + public static final String COMMAND_RESET = "RESET"; + +} diff --git a/src/main/java/com/example/mina/client/base/ByteProtocolFactory.java b/src/main/java/com/example/mina/client/base/ByteProtocolFactory.java new file mode 100644 index 0000000..0af01be --- /dev/null +++ b/src/main/java/com/example/mina/client/base/ByteProtocolFactory.java @@ -0,0 +1,61 @@ +package com.example.mina.client.base; + +import org.apache.mina.core.buffer.IoBuffer; +import org.apache.mina.core.session.IoSession; +import org.apache.mina.filter.codec.*; + +public class ByteProtocolFactory implements ProtocolCodecFactory { + + private final ByteEncoder encoder; + private final ByteDecoder decoder; + + //构造 + public ByteProtocolFactory() { + encoder = new ByteEncoder(); + decoder = new ByteDecoder(); + } + + @Override + public ProtocolDecoder getDecoder(IoSession arg0) throws Exception { + return decoder; + } + + @Override + public ProtocolEncoder getEncoder(IoSession arg0) throws Exception { + return encoder; + } + + public class ByteEncoder extends ProtocolEncoderAdapter { + + //编码 将数据包转成字节数组 + @Override + public void encode(IoSession session, Object message, ProtocolEncoderOutput out) throws Exception { + byte[] bytes = (byte[]) message; + + IoBuffer buffer = IoBuffer.allocate(bytes.length); + buffer.setAutoExpand(true); + + // 将数据放入缓冲IoBuffer + buffer.put(bytes); + // 写状态切换到读状态 + buffer.flip(); + + out.write(buffer); + } + + } + + public class ByteDecoder extends ProtocolDecoderAdapter { + + @Override + public void decode(IoSession session, IoBuffer in, ProtocolDecoderOutput out) throws Exception { + int limit = in.limit(); + byte[] bytes = new byte[limit]; + + in.get(bytes); + + out.write(bytes); + } + } + +} diff --git a/src/main/java/com/example/mina/client/base/request/ResetRequest.java b/src/main/java/com/example/mina/client/base/request/ResetRequest.java new file mode 100644 index 0000000..25ec226 --- /dev/null +++ b/src/main/java/com/example/mina/client/base/request/ResetRequest.java @@ -0,0 +1,17 @@ +package com.example.mina.client.base.request; + +import com.example.mina.client.base.BaseRequest; +import com.example.mina.client.base.BoxConstants; +import com.example.mina.client.base.response.ResetResponse; + +public class ResetRequest extends BaseRequest { + @Override + public String getCommandName() { + return BoxConstants.COMMAND_RESET; + } + + @Override + public ResetResponse execute() { + return null; + } +} diff --git a/src/main/java/com/example/mina/client/base/response/ResetResponse.java b/src/main/java/com/example/mina/client/base/response/ResetResponse.java new file mode 100644 index 0000000..e556dab --- /dev/null +++ b/src/main/java/com/example/mina/client/base/response/ResetResponse.java @@ -0,0 +1,7 @@ +package com.example.mina.client.base.response; + +import com.example.mina.client.base.BaseResponse; + +public class ResetResponse extends BaseResponse { + +} diff --git a/src/main/java/com/example/mina/client/box/aeroflex/AeroflexByteDecoder.java b/src/main/java/com/example/mina/client/box/aeroflex/AeroflexByteDecoder.java deleted file mode 100644 index 692c7ef..0000000 --- a/src/main/java/com/example/mina/client/box/aeroflex/AeroflexByteDecoder.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.example.mina.client.box.aeroflex; - -import org.apache.mina.core.buffer.IoBuffer; -import org.apache.mina.core.session.IoSession; -import org.apache.mina.filter.codec.ProtocolDecoder; -import org.apache.mina.filter.codec.ProtocolDecoderAdapter; -import org.apache.mina.filter.codec.ProtocolDecoderOutput; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * @author dy - * @date 2021/3/3 - */ -public class AeroflexByteDecoder extends ProtocolDecoderAdapter { - //打印日志信息 - private final static Logger log = LoggerFactory - .getLogger(ProtocolDecoder.class); - - @Override - public void decode(IoSession session, IoBuffer in, ProtocolDecoderOutput out) throws Exception { - int limit = in.limit(); - byte[] bytes = new byte[limit]; - - in.get(bytes); - - out.write(bytes); - } -} diff --git a/src/main/java/com/example/mina/client/box/aeroflex/AeroflexByteEnCoder.java b/src/main/java/com/example/mina/client/box/aeroflex/AeroflexByteEnCoder.java deleted file mode 100644 index 1b45ffd..0000000 --- a/src/main/java/com/example/mina/client/box/aeroflex/AeroflexByteEnCoder.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.example.mina.client.box.aeroflex; - -import org.apache.mina.core.buffer.IoBuffer; -import org.apache.mina.core.session.IoSession; -import org.apache.mina.filter.codec.ProtocolEncoder; -import org.apache.mina.filter.codec.ProtocolEncoderAdapter; -import org.apache.mina.filter.codec.ProtocolEncoderOutput; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * @author dy - * @date 2021/3/3 - */ -public class AeroflexByteEnCoder extends ProtocolEncoderAdapter { - //用于打印日志信息 - private final static Logger log = LoggerFactory - .getLogger(ProtocolEncoder.class); - - //编码 将数据包转成字节数组 - @Override - public void encode(IoSession session, Object message, ProtocolEncoderOutput out) throws Exception { - byte[] bytes = (byte[]) message; - - IoBuffer buffer = IoBuffer.allocate(bytes.length); - buffer.setAutoExpand(true); - - // 将数据放入缓冲IoBuffer - buffer.put(bytes); - // 写状态切换到读状态 - buffer.flip(); - - out.write(buffer); -// out.flush(); -// -// buffer.free(); - } - -} diff --git a/src/main/java/com/example/mina/client/box/aeroflex/AeroflexByteFactory.java b/src/main/java/com/example/mina/client/box/aeroflex/AeroflexByteFactory.java deleted file mode 100644 index c4fdf0b..0000000 --- a/src/main/java/com/example/mina/client/box/aeroflex/AeroflexByteFactory.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.example.mina.client.box.aeroflex; - -import org.apache.mina.core.session.IoSession; -import org.apache.mina.filter.codec.ProtocolCodecFactory; -import org.apache.mina.filter.codec.ProtocolDecoder; -import org.apache.mina.filter.codec.ProtocolEncoder; - -/** - * @author dy - * @date 2021/3/3 - */ -public class AeroflexByteFactory implements ProtocolCodecFactory { - private final AeroflexByteDecoder decoder; - private final AeroflexByteEnCoder encoder; - - //构造 - public AeroflexByteFactory() { - encoder = new AeroflexByteEnCoder(); - decoder = new AeroflexByteDecoder(); - } - - @Override - public ProtocolDecoder getDecoder(IoSession arg0) throws Exception { - // TODO Auto-generated method stub - return decoder; - } - - @Override - public ProtocolEncoder getEncoder(IoSession arg0) throws Exception { - // TODO Auto-generated method stub - return encoder; - } - -} diff --git a/src/main/java/com/example/mina/client/box/aeroflex/AeroflexClient.java b/src/main/java/com/example/mina/client/box/aeroflex/AeroflexClient.java index 0b86e5b..cd20785 100644 --- a/src/main/java/com/example/mina/client/box/aeroflex/AeroflexClient.java +++ b/src/main/java/com/example/mina/client/box/aeroflex/AeroflexClient.java @@ -1,10 +1,10 @@ package com.example.mina.client.box.aeroflex; import com.example.mina.client.base.AbstractClient; -import com.example.mina.client.entity.AeroflexMessage; -import com.example.mina.client.entity.ClientDTO; -import com.example.mina.client.entity.ServerMessage; -import com.example.mina.server.entity.AeroflexDataBuffer; +import com.example.mina.client.base.AbstractVirtualBoxClientHandler; +import com.example.mina.client.base.BoxConnectConfig; +import com.example.mina.client.base.BoxConstants; +import org.apache.mina.filter.codec.ProtocolCodecFactory; /** * @author dy @@ -12,44 +12,24 @@ import com.example.mina.server.entity.AeroflexDataBuffer; */ public class AeroflexClient extends AbstractClient { - @Override - protected void init() { - ServerMessage serverMessage = serverService.getServerService(this.getClass().getSimpleName()); - hardwareDataBuffer = new AeroflexDataBuffer(10, 10); - abstractClientMessage = new AeroflexMessage(); - abstractClientMessage.setServerMessage(serverMessage); - - protocolCodecFactory = new AeroflexByteFactory(); - abstractVirtualBoxClientHandler = new AeroflexClientHandler(abstractClientMessage, hardwareDataBuffer); + public AeroflexClient(BoxConnectConfig boxConnectConfig) { + super(boxConnectConfig); } @Override - public void setAttenuation(ClientDTO clientDTO) { - - } - - /*@Override - public boolean setAttenuation(int row, int col, int attenuation) { - return false; + public String getDeviceType() { + return BoxConstants.DEVICE_TYPE_AERO; } @Override - public int getAttenuation(int row, int col) { - return 0; + protected ProtocolCodecFactory getCodecFactory() { + return null; } @Override - public Boolean reset() { + protected AbstractVirtualBoxClientHandler getIoHandler() { return null; } - @Override - public int[][] getAll() { - return new int[0][]; - }*/ - @Override - public int getAttenuation(int col) { - return 0; - } } diff --git a/src/main/java/com/example/mina/client/box/aeroflex/AeroflexClientHandler.java b/src/main/java/com/example/mina/client/box/aeroflex/AeroflexClientHandler.java index 1ff972b..27816d8 100644 --- a/src/main/java/com/example/mina/client/box/aeroflex/AeroflexClientHandler.java +++ b/src/main/java/com/example/mina/client/box/aeroflex/AeroflexClientHandler.java @@ -1,10 +1,7 @@ package com.example.mina.client.box.aeroflex; import com.example.mina.client.base.AbstractVirtualBoxClientHandler; -import com.example.mina.client.base.BaseReceiveMessage; -import com.example.mina.client.base.SendMessage; -import com.example.mina.client.entity.AbstractClientMessage; -import com.example.mina.server.base.AbstractHardwareDataBuffer; +import com.example.mina.client.base.BaseResponse; /** * @author dy @@ -12,13 +9,10 @@ import com.example.mina.server.base.AbstractHardwareDataBuffer; */ public class AeroflexClientHandler extends AbstractVirtualBoxClientHandler { - public AeroflexClientHandler(AbstractClientMessage clientMessage, - AbstractHardwareDataBuffer abstractHardwareDataBuffer) { - super(clientMessage, abstractHardwareDataBuffer); - } - @Override - protected boolean handleCommandResponse(SendMessage sendMessage, BaseReceiveMessage receiveMessage) { + public boolean handleCommandResponse(byte[] response) { + return false; } + } diff --git a/src/main/java/com/example/mina/client/box/lte3000/Lte3000ByteDecoder.java b/src/main/java/com/example/mina/client/box/lte3000/Lte3000ByteDecoder.java deleted file mode 100644 index 415a53c..0000000 --- a/src/main/java/com/example/mina/client/box/lte3000/Lte3000ByteDecoder.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.example.mina.client.box.lte3000; - -import org.apache.mina.core.buffer.IoBuffer; -import org.apache.mina.core.session.IoSession; -import org.apache.mina.filter.codec.ProtocolDecoder; -import org.apache.mina.filter.codec.ProtocolDecoderAdapter; -import org.apache.mina.filter.codec.ProtocolDecoderOutput; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * @author dy - * @date 2021/3/3 - */ -public class Lte3000ByteDecoder extends ProtocolDecoderAdapter { - //打印日志信息 - private final static Logger log = LoggerFactory - .getLogger(ProtocolDecoder.class); - - @Override - public void decode(IoSession session, IoBuffer in, ProtocolDecoderOutput out) throws Exception { - int limit = in.limit(); - byte[] bytes = new byte[limit]; - - in.get(bytes); - - Lte3000ReceiveMessage receiveMessage = Lte3000ReceiveMessage.builder().receiveMessage(bytes).build(); - - out.write(receiveMessage); - } -} diff --git a/src/main/java/com/example/mina/client/box/lte3000/Lte3000ByteEnCoder.java b/src/main/java/com/example/mina/client/box/lte3000/Lte3000ByteEnCoder.java deleted file mode 100644 index 2be5a0f..0000000 --- a/src/main/java/com/example/mina/client/box/lte3000/Lte3000ByteEnCoder.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.example.mina.client.box.lte3000; - -import org.apache.mina.core.buffer.IoBuffer; -import org.apache.mina.core.session.IoSession; -import org.apache.mina.filter.codec.ProtocolEncoder; -import org.apache.mina.filter.codec.ProtocolEncoderAdapter; -import org.apache.mina.filter.codec.ProtocolEncoderOutput; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * @author dy - * @date 2021/3/3 - */ -public class Lte3000ByteEnCoder extends ProtocolEncoderAdapter { - //用于打印日志信息 - private final static Logger log = LoggerFactory - .getLogger(ProtocolEncoder.class); - - //编码 将数据包转成字节数组 - @Override - public void encode(IoSession session, Object message, ProtocolEncoderOutput out) throws Exception { - byte[] bytes = (byte[]) message; - - IoBuffer buffer = IoBuffer.allocate(bytes.length); - buffer.setAutoExpand(true); - - // 将数据放入缓冲IoBuffer - buffer.put(bytes); - // 写状态切换到读状态 - buffer.flip(); - - out.write(buffer); -// out.flush(); -// -// buffer.free(); - } - -} diff --git a/src/main/java/com/example/mina/client/box/lte3000/Lte3000ByteFactory.java b/src/main/java/com/example/mina/client/box/lte3000/Lte3000ByteFactory.java deleted file mode 100644 index f9ba037..0000000 --- a/src/main/java/com/example/mina/client/box/lte3000/Lte3000ByteFactory.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.example.mina.client.box.lte3000; - -import org.apache.mina.core.session.IoSession; -import org.apache.mina.filter.codec.ProtocolCodecFactory; -import org.apache.mina.filter.codec.ProtocolDecoder; -import org.apache.mina.filter.codec.ProtocolEncoder; - -/** - * @author dy - * @date 2021/3/3 - */ -public class Lte3000ByteFactory implements ProtocolCodecFactory { - private final Lte3000ByteDecoder decoder; - private final Lte3000ByteEnCoder encoder; - - //构造 - public Lte3000ByteFactory() { - encoder = new Lte3000ByteEnCoder(); - decoder = new Lte3000ByteDecoder(); - } - - @Override - public ProtocolDecoder getDecoder(IoSession arg0) throws Exception { - // TODO Auto-generated method stub - return decoder; - } - - @Override - public ProtocolEncoder getEncoder(IoSession arg0) throws Exception { - // TODO Auto-generated method stub - return encoder; - } - -} diff --git a/src/main/java/com/example/mina/client/box/lte3000/Lte3000Client.java b/src/main/java/com/example/mina/client/box/lte3000/Lte3000Client.java index 23504fa..49d1e00 100644 --- a/src/main/java/com/example/mina/client/box/lte3000/Lte3000Client.java +++ b/src/main/java/com/example/mina/client/box/lte3000/Lte3000Client.java @@ -1,81 +1,31 @@ package com.example.mina.client.box.lte3000; import com.example.mina.client.base.AbstractClient; -import com.example.mina.client.entity.ClientDTO; -import com.example.mina.client.entity.Command; -import com.example.mina.client.entity.Lte3000Message; -import com.example.mina.client.entity.ServerMessage; -import com.example.mina.server.entity.Entry; -import com.example.mina.server.entity.Lte3000DataBuffer; -import com.example.mina.server.util.Lte3000CommandHelper; +import com.example.mina.client.base.AbstractVirtualBoxClientHandler; +import com.example.mina.client.base.BoxConnectConfig; +import org.apache.mina.filter.codec.ProtocolCodecFactory; /** * @author dy * @date 2021/3/10 */ public class Lte3000Client extends AbstractClient { - - @Override - protected void init() { - ServerMessage serverMessage = serverService.getServerService(this.getClass().getSimpleName()); - hardwareDataBuffer = new Lte3000DataBuffer(32, 32, 30); - abstractClientMessage = new Lte3000Message(); - abstractClientMessage.setServerMessage(serverMessage); - - 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))); - } - protocolCodecFactory = new Lte3000ByteFactory(); - abstractVirtualBoxClientHandler = new Lte3000ClientHandler(abstractClientMessage, hardwareDataBuffer); + public Lte3000Client(BoxConnectConfig connectConfig) { + super(connectConfig); } - @Override - public void setAttenuation(ClientDTO clientDTO) { - byte[] cmd; - if (clientDTO.getRow() == 0) { - cmd = Lte3000CommandHelper.genCommandSetAttn(clientDTO.getCol(), clientDTO.getMaxAttn()); - } else { - cmd = Lte3000CommandHelper.genCommandSetCross(clientDTO.getRow(), clientDTO.getCol()); - } - ioSession.write(cmd); - } - - public boolean isCrossPointOn(int row, int col) { - return hardwareDataBuffer.getAttenuation(row, col) >= 1; + public String getDeviceType() { + return null; } @Override - public int getAttenuation(int col) { - return hardwareDataBuffer.getOffset(col); - } - - public byte[] genCloseCommand(){ - return Lte3000CommandHelper.genCommandGetCross(1); - } - - public Entry[][] getMatrix(){ - return hardwareDataBuffer.getMatrixData(); - } - - public Entry[] getOffsetData(){ - return hardwareDataBuffer.getOffsetData(); - } - - /*@Override - public Boolean reset() { + protected AbstractVirtualBoxClientHandler getIoHandler() { return null; } @Override - public int[][] getAll() { - return new int[0][]; - }*/ - + protected ProtocolCodecFactory getCodecFactory() { + return null; + } } diff --git a/src/main/java/com/example/mina/client/box/lte3000/Lte3000ClientHandler.java b/src/main/java/com/example/mina/client/box/lte3000/Lte3000ClientHandler.java index d8296e6..c423558 100644 --- a/src/main/java/com/example/mina/client/box/lte3000/Lte3000ClientHandler.java +++ b/src/main/java/com/example/mina/client/box/lte3000/Lte3000ClientHandler.java @@ -1,9 +1,7 @@ package com.example.mina.client.box.lte3000; import com.example.mina.client.base.AbstractVirtualBoxClientHandler; -import com.example.mina.client.base.BaseReceiveMessage; -import com.example.mina.client.base.SendMessage; -import com.example.mina.client.entity.AbstractClientMessage; +import com.example.mina.client.base.BaseRequest; import com.example.mina.server.base.AbstractHardwareDataBuffer; import com.example.mina.server.util.Lte3000CommandHelper; import lombok.extern.slf4j.Slf4j; @@ -14,26 +12,14 @@ import org.apache.mina.core.session.IoSession; * @date 2021/3/10 */ @Slf4j -public class Lte3000ClientHandler extends AbstractVirtualBoxClientHandler { - - public Lte3000ClientHandler(AbstractClientMessage clientMessage, - AbstractHardwareDataBuffer abstractHardwareDataBuffer) { - super(clientMessage, abstractHardwareDataBuffer); - } - - @Override - public void sessionOpened(IoSession session) { - super.sessionOpened(session); - } +public class Lte3000ClientHandler extends AbstractVirtualBoxClientHandler { protected boolean isSameValue(byte value, int expect) { return ((0xFF & value) == expect); } @Override - protected boolean handleCommandResponse(SendMessage sendMessage, BaseReceiveMessage receiveMessage) { - byte[] cmd = sendMessage.getSendMessage(); - byte[] response = receiveMessage.getReceiveMessage(); + public boolean handleCommandResponse(byte[] response) { int responseLen = response.length; if (response[0] != Lte3000CommandHelper.ACK || responseLen < 6) { return false; @@ -44,14 +30,14 @@ public class Lte3000ClientHandler extends AbstractVirtualBoxClientHandler commands = new ArrayList<>(); -} diff --git a/src/main/java/com/example/mina/client/entity/AeroflexMessage.java b/src/main/java/com/example/mina/client/entity/AeroflexMessage.java deleted file mode 100644 index 317b3b9..0000000 --- a/src/main/java/com/example/mina/client/entity/AeroflexMessage.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.example.mina.client.entity; - -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.util.List; - -/** - * @author dy - * @date 2021/3/11 - */ -public class AeroflexMessage extends AbstractClientMessage{ -} diff --git a/src/main/java/com/example/mina/client/entity/ClientDTO.java b/src/main/java/com/example/mina/client/entity/ClientDTO.java deleted file mode 100644 index 3edebf3..0000000 --- a/src/main/java/com/example/mina/client/entity/ClientDTO.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.example.mina.client.entity; - -import lombok.Builder; -import lombok.Data; - -/** - * @author dy - * @date 2021/3/12 - */ -@Data -@Builder -public class ClientDTO { - - private Integer row; - - private Integer col; - - private Integer maxAttn; - - private String description; - -} diff --git a/src/main/java/com/example/mina/client/entity/Lte3000Message.java b/src/main/java/com/example/mina/client/entity/Lte3000Message.java deleted file mode 100644 index 2539736..0000000 --- a/src/main/java/com/example/mina/client/entity/Lte3000Message.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.example.mina.client.entity; - -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - -/** - * @author dy - * @date 2021/3/11 - */ -public class Lte3000Message extends AbstractClientMessage{ -} diff --git a/src/main/java/com/example/mina/client/entity/ServerMessage.java b/src/main/java/com/example/mina/client/entity/ServerMessage.java deleted file mode 100644 index 1a553b3..0000000 --- a/src/main/java/com/example/mina/client/entity/ServerMessage.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.example.mina.client.entity; - -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - -/** - * @author dy - * @date 2021/3/12 - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -@Builder -public class ServerMessage { - - protected String host; - - protected int port; -} diff --git a/src/main/java/com/example/mina/client/service/ServerService.java b/src/main/java/com/example/mina/client/service/ServerService.java deleted file mode 100644 index 4174d4c..0000000 --- a/src/main/java/com/example/mina/client/service/ServerService.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.example.mina.client.service; - -import com.example.mina.client.entity.AbstractClientMessage; -import com.example.mina.client.entity.ServerMessage; - -/** - * @author dy - * @date 2021/3/12 - */ -public interface ServerService { - ServerMessage getServerService(String serverName); -} diff --git a/src/main/java/com/example/mina/client/service/impl/ServerServiceImpl.java b/src/main/java/com/example/mina/client/service/impl/ServerServiceImpl.java deleted file mode 100644 index 426b8a3..0000000 --- a/src/main/java/com/example/mina/client/service/impl/ServerServiceImpl.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.example.mina.client.service.impl; - -import com.example.mina.client.entity.ServerMessage; -import com.example.mina.client.service.ServerService; - -/** - * @author dy - * @date 2021/3/12 - */ -public class ServerServiceImpl implements ServerService { - - @Override - public ServerMessage getServerService(String serverName) { - // 根据服务器名称获取数据库ip,port - // todo - ServerMessage serverMessage = ServerMessage.builder() - .host("localhost") - .port(9102) - .build(); - return serverMessage; - } -} diff --git a/src/main/java/com/example/mina/client/test/MinaClient.java b/src/main/java/com/example/mina/client/test/MinaClient.java deleted file mode 100644 index b04bc10..0000000 --- a/src/main/java/com/example/mina/client/test/MinaClient.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.example.mina.client.test; - -import com.example.mina.client.box.lte3000.Lte3000Client; -import com.example.mina.client.entity.ClientDTO; -import com.example.mina.server.entity.Entry; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -@Controller -@RequestMapping("/client") -@ResponseBody -public class MinaClient { - - @RequestMapping("/isCrossPointOn") - public void index() { - ClientDTO clientDTO = ClientDTO.builder().row(2).col(3).maxAttn(5).build(); - Lte3000Client lte3000Client = new Lte3000Client(); - lte3000Client.start(clientDTO); - - boolean a = lte3000Client.isCrossPointOn(clientDTO.getRow(),clientDTO.getCol()); - System.out.println(a); - } - - public static void main(String[] args) { - - ClientDTO clientDTO = ClientDTO.builder().row(2).col(3).maxAttn(5).build(); - Lte3000Client lte3000Client = new Lte3000Client(); - lte3000Client.start(clientDTO); - - boolean a = lte3000Client.isCrossPointOn(clientDTO.getRow(),clientDTO.getCol()); - int c = lte3000Client.getAttenuation(clientDTO.getCol()); - byte[] bytes = lte3000Client.genCloseCommand(); - Entry[][] entries =lte3000Client.getMatrix(); - Entry[] entry =lte3000Client.getOffsetData(); - int q = lte3000Client.getAttenuation(clientDTO.getCol()); - clientDTO.setRow(0); - lte3000Client.setAttenuation(clientDTO); - int w = lte3000Client.getAttenuation(clientDTO.getCol()); - - - } -} -- libgit2 0.21.2