diff --git a/config/application-local.properties b/config/application-local.properties index 121e252..4ff70ba 100644 --- a/config/application-local.properties +++ b/config/application-local.properties @@ -24,4 +24,4 @@ mybatis.mapper-locations=classpath*:mappers/*.xml mybatis.type-aliases-package=com.zjyr.beidouservice.pojo.entry #mybatis.configuration.default-enum-type-handler=com.dispose.common.CommonEnumHandler #config log -#logging.config= \ No newline at end of file +logging.config=file:config/logback.xml \ No newline at end of file diff --git a/config/application.properties b/config/application.properties index 07f154c..7f4256f 100644 --- a/config/application.properties +++ b/config/application.properties @@ -1 +1 @@ -spring.profiles.active=local \ No newline at end of file +spring.profiles.active=local,user \ No newline at end of file diff --git a/config/logback.xml b/config/logback.xml new file mode 100644 index 0000000..13a00dc --- /dev/null +++ b/config/logback.xml @@ -0,0 +1,102 @@ + + + + + + + + + + [%d{yy-MM-dd HH:mm:ss:SSS}][%-5p][%c{0}][%M\(%L\)][%t]: %m%n + + + + + ${LOG_PATH}/biz.log + + ${LOG_PATH}/biz.log.%d{yyyyMMdd} + + + + [%d{yy-MM-dd HH:mm:ss:SSS}][%-5p][%c{0}][%M\(%L\)][%t]: %m%n + + + + ${LOG_PATH}/system.log + + ${LOG_PATH}/system.log.%d{yyyyMMdd} + + + + [%d{yy-MM-dd HH:mm:ss:SSS}][%-5p][%c{0}][%M\(%L\)][%t]: %m%n + + + + + ${LOG_PATH}/data.log + + ${LOG_PATH}/data.log.%d{yyyyMMdd} + + + + [%d{yy-MM-dd HH:mm:ss:SSS}][%-5p][%c{0}][%M\(%L\)][%t]: %m%n + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pom.xml b/pom.xml index dcbbc90..26601e0 100644 --- a/pom.xml +++ b/pom.xml @@ -70,7 +70,7 @@ mapper-spring-boot-starter 4.2.3 - + diff --git a/src/main/java/com/zjyr/beidouservice/BaidouServiceApplication.java b/src/main/java/com/zjyr/beidouservice/BaidouServiceApplication.java new file mode 100644 index 0000000..474d290 --- /dev/null +++ b/src/main/java/com/zjyr/beidouservice/BaidouServiceApplication.java @@ -0,0 +1,24 @@ +package com.zjyr.beidouservice; + +import com.zjyr.beidouservice.adapter.impl.netty.impl.TcpServer; +import jakarta.annotation.Resource; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.boot.ApplicationArguments; +import org.springframework.boot.ApplicationRunner; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +@MapperScan(basePackages = {"com.zjyr.beidouservice.mapper"}) +public class BaidouServiceApplication implements ApplicationRunner { + @Resource + private TcpServer tcpServer; + public static void main(String[] args) { + SpringApplication.run(BaidouServiceApplication.class, args); + } + + @Override + public void run(ApplicationArguments args) throws Exception { + tcpServer.start(); + } +} diff --git a/src/main/java/com/zjyr/beidouservice/TunnelServiceApplication.java b/src/main/java/com/zjyr/beidouservice/TunnelServiceApplication.java deleted file mode 100644 index 7257c23..0000000 --- a/src/main/java/com/zjyr/beidouservice/TunnelServiceApplication.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.zjyr.beidouservice; - -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -@SpringBootApplication -@MapperScan(basePackages = {"com.zjyr.beidouservice.mapper"}) -public class TunnelServiceApplication { - - public static void main(String[] args) { - SpringApplication.run(TunnelServiceApplication.class, args); - } - -} diff --git a/src/main/java/com/zjyr/beidouservice/adapter/impl/netty/ChannelInit.java b/src/main/java/com/zjyr/beidouservice/adapter/impl/netty/ChannelInit.java new file mode 100644 index 0000000..f318a73 --- /dev/null +++ b/src/main/java/com/zjyr/beidouservice/adapter/impl/netty/ChannelInit.java @@ -0,0 +1,30 @@ +package com.zjyr.beidouservice.adapter.impl.netty; + +import com.zjyr.beidouservice.adapter.impl.netty.decode.YuanRongProtocolDecode; +import io.netty.channel.ChannelInitializer; +import io.netty.channel.socket.SocketChannel; +import io.netty.handler.codec.string.StringDecoder; +import io.netty.handler.codec.string.StringEncoder; +import io.netty.handler.timeout.IdleStateHandler; +import io.netty.util.CharsetUtil; +import jakarta.annotation.Resource; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +import java.util.concurrent.TimeUnit; + +@Component +@RequiredArgsConstructor +public class ChannelInit extends ChannelInitializer { + @Resource + private MessageHandler messageHandler; + + @Override + protected void initChannel(SocketChannel channel) { + channel.pipeline() + .addLast("idle", new IdleStateHandler(0, 0, 60, TimeUnit.SECONDS)) + .addLast("encode", new YuanRongProtocolDecode()) + .addLast("decode", new StringDecoder(CharsetUtil.UTF_8)) + .addLast("message", messageHandler); + } +} diff --git a/src/main/java/com/zjyr/beidouservice/adapter/impl/netty/ISocketServer.java b/src/main/java/com/zjyr/beidouservice/adapter/impl/netty/ISocketServer.java new file mode 100644 index 0000000..67d81e0 --- /dev/null +++ b/src/main/java/com/zjyr/beidouservice/adapter/impl/netty/ISocketServer.java @@ -0,0 +1,10 @@ +package com.zjyr.beidouservice.adapter.impl.netty; + +import jakarta.annotation.PreDestroy; + +public interface ISocketServer { + void start() throws Exception; + + @PreDestroy + void destory() throws InterruptedException; +} diff --git a/src/main/java/com/zjyr/beidouservice/adapter/impl/netty/MessageHandler.java b/src/main/java/com/zjyr/beidouservice/adapter/impl/netty/MessageHandler.java new file mode 100644 index 0000000..60c5fd5 --- /dev/null +++ b/src/main/java/com/zjyr/beidouservice/adapter/impl/netty/MessageHandler.java @@ -0,0 +1,46 @@ +package com.zjyr.beidouservice.adapter.impl.netty; + +import com.zjyr.beidouservice.misc.HelperUtils; +import com.zjyr.beidouservice.pojo.vo.YuanRongBinProtocol; +import io.netty.channel.ChannelHandler; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.SimpleChannelInboundHandler; +import io.netty.handler.timeout.IdleStateEvent; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +@Slf4j +@Component +@ChannelHandler.Sharable +@RequiredArgsConstructor +public class MessageHandler extends SimpleChannelInboundHandler { + @Override + public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception { + log.info("{}:: Trigger Heart Signle", ctx.channel().id()); + + if (evt instanceof IdleStateEvent) { + + } else { + super.userEventTriggered(ctx, evt); + } + } + + @Override + public void channelRead0(ChannelHandlerContext ctx, YuanRongBinProtocol message) throws Exception { + log.info("{}:: Receive Message: {}", ctx.channel().id(), HelperUtils.bytesToHexString(message.getStart())); + } + + @Override + public void channelActive(ChannelHandlerContext ctx) throws Exception { + log.info("{}:: Connected", ctx.channel().id()); + super.channelActive(ctx); + } + + @Override + public void channelInactive(ChannelHandlerContext ctx) throws Exception { + log.info("{}:: Disonnected", ctx.channel().id()); + super.channelActive(ctx); + ctx.close(); + } +} diff --git a/src/main/java/com/zjyr/beidouservice/adapter/impl/netty/decode/YuanRongProtocolDecode.java b/src/main/java/com/zjyr/beidouservice/adapter/impl/netty/decode/YuanRongProtocolDecode.java new file mode 100644 index 0000000..a4319f0 --- /dev/null +++ b/src/main/java/com/zjyr/beidouservice/adapter/impl/netty/decode/YuanRongProtocolDecode.java @@ -0,0 +1,25 @@ +package com.zjyr.beidouservice.adapter.impl.netty.decode; + +import com.zjyr.beidouservice.pojo.vo.YuanRongBinProtocol; +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.ByteToMessageDecoder; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component +@RequiredArgsConstructor +public class YuanRongProtocolDecode extends ByteToMessageDecoder { + @Override + protected void decode(ChannelHandlerContext ctx, ByteBuf buffer, List out) throws Exception { + if (buffer.readableBytes() > 0) { + byte[] val = new byte[buffer.readableBytes()]; + buffer.readBytes(val, 0, buffer.readableBytes()); + YuanRongBinProtocol v = new YuanRongBinProtocol(); + v.setStart(val); + out.add(v); + } + } +} diff --git a/src/main/java/com/zjyr/beidouservice/adapter/impl/netty/impl/TcpServer.java b/src/main/java/com/zjyr/beidouservice/adapter/impl/netty/impl/TcpServer.java new file mode 100644 index 0000000..7828b40 --- /dev/null +++ b/src/main/java/com/zjyr/beidouservice/adapter/impl/netty/impl/TcpServer.java @@ -0,0 +1,63 @@ +package com.zjyr.beidouservice.adapter.impl.netty.impl; + +import com.zjyr.beidouservice.adapter.impl.netty.ChannelInit; +import com.zjyr.beidouservice.adapter.impl.netty.ISocketServer; +import com.zjyr.beidouservice.config.NettySocketConfigure; +import io.netty.bootstrap.ServerBootstrap; +import io.netty.channel.ChannelOption; +import io.netty.channel.EventLoopGroup; +import io.netty.channel.nio.NioEventLoopGroup; +import io.netty.channel.socket.nio.NioServerSocketChannel; +import jakarta.annotation.PreDestroy; +import jakarta.annotation.Resource; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.net.InetSocketAddress; + +@Component +@Slf4j +@RequiredArgsConstructor +public class TcpServer implements ISocketServer { + @Resource + private final ChannelInit channelInit; + + @Resource + private final NettySocketConfigure nettySocketConfigure; + private EventLoopGroup boosGroup; + private EventLoopGroup workerGroup; + + private void tcpServer(int port) { + try { + new ServerBootstrap() + .group(boosGroup, workerGroup) + .channel(NioServerSocketChannel.class) + .localAddress(new InetSocketAddress(port)) + .childHandler(channelInit) + .option(ChannelOption.SO_BACKLOG, 128) + .childOption(ChannelOption.TCP_NODELAY, false) + .childOption(ChannelOption.SO_KEEPALIVE, true) + .bind().sync(); + log.info("Netty TCP Server Beginning Listen: {}", port); + } catch (Exception e) { + log.error(e.getMessage()); + boosGroup.shutdownGracefully(); + workerGroup.shutdownGracefully(); + } + } + + @Override + public void start() { + log.info("Start Netty TCP Server"); + boosGroup = new NioEventLoopGroup(); + workerGroup = new NioEventLoopGroup(); + this.tcpServer(nettySocketConfigure.getServerPort()); + } + + @PreDestroy + @Override + public void destory() { + + } +} diff --git a/src/main/java/com/zjyr/beidouservice/config/NettySocketConfigure.java b/src/main/java/com/zjyr/beidouservice/config/NettySocketConfigure.java new file mode 100644 index 0000000..9740261 --- /dev/null +++ b/src/main/java/com/zjyr/beidouservice/config/NettySocketConfigure.java @@ -0,0 +1,22 @@ +package com.zjyr.beidouservice.config; + +import jakarta.annotation.PostConstruct; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Data +@ConfigurationProperties(prefix = "socket") +@Configuration +@Slf4j +public class NettySocketConfigure { + private String serverHost; + private Integer serverPort; + private String serverMode; + + @PostConstruct + private void initGlobalValue() { + log.debug("{}", serverHost); + } +} diff --git a/src/main/java/com/zjyr/beidouservice/misc/HelperUtils.java b/src/main/java/com/zjyr/beidouservice/misc/HelperUtils.java new file mode 100644 index 0000000..92ce41e --- /dev/null +++ b/src/main/java/com/zjyr/beidouservice/misc/HelperUtils.java @@ -0,0 +1,15 @@ +package com.zjyr.beidouservice.misc; + +public class HelperUtils { + public static String bytesToHexString(byte[] bArray) { + StringBuilder sb = new StringBuilder(bArray.length); + String sTemp; + for (byte b : bArray) { + sTemp = Integer.toHexString(0xFF & b); + if (sTemp.length() < 2) + sb.append(0); + sb.append(sTemp.toUpperCase()); + } + return sb.toString(); + } +} diff --git a/src/main/java/com/zjyr/beidouservice/pojo/vo/YuanRongBinProtocol.java b/src/main/java/com/zjyr/beidouservice/pojo/vo/YuanRongBinProtocol.java new file mode 100644 index 0000000..a40e700 --- /dev/null +++ b/src/main/java/com/zjyr/beidouservice/pojo/vo/YuanRongBinProtocol.java @@ -0,0 +1,8 @@ +package com.zjyr.beidouservice.pojo.vo; + +import lombok.Data; + +@Data +public class YuanRongBinProtocol { + private byte[] start; +} diff --git a/src/test/java/com/zjyr/beidouservice/TunnelServiceApplicationTests.java b/src/test/java/com/zjyr/beidouservice/BaidouServiceApplicationTests.java similarity index 82% rename from src/test/java/com/zjyr/beidouservice/TunnelServiceApplicationTests.java rename to src/test/java/com/zjyr/beidouservice/BaidouServiceApplicationTests.java index 65da33e..92969c7 100644 --- a/src/test/java/com/zjyr/beidouservice/TunnelServiceApplicationTests.java +++ b/src/test/java/com/zjyr/beidouservice/BaidouServiceApplicationTests.java @@ -4,7 +4,7 @@ import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest -class TunnelServiceApplicationTests { +class BaidouServiceApplicationTests { @Test void contextLoads() {