From eb3dd00b0b7fcda477229d518d250f9c842b790b Mon Sep 17 00:00:00 2001
From: feiyu02 <risaku@163.com>
Date: 星期二, 21 十月 2025 17:45:44 +0800
Subject: [PATCH] 2025.10.21 1. 走航季度报告相关数据计算逻辑调整
---
src/main/kotlin/com/flightfeather/uav/socket/UnderwaySocketServer.kt | 90 +++++++++++++++++++++++++++++++++++---------
1 files changed, 71 insertions(+), 19 deletions(-)
diff --git a/src/main/kotlin/com/flightfeather/uav/socket/UnderwaySocketServer.kt b/src/main/kotlin/com/flightfeather/uav/socket/UnderwaySocketServer.kt
index 699f09e..f3248ef 100644
--- a/src/main/kotlin/com/flightfeather/uav/socket/UnderwaySocketServer.kt
+++ b/src/main/kotlin/com/flightfeather/uav/socket/UnderwaySocketServer.kt
@@ -1,26 +1,49 @@
package com.flightfeather.uav.socket
+import com.flightfeather.uav.domain.repository.SceneInfoRep
+import com.flightfeather.uav.domain.repository.SourceTraceRep
+import com.flightfeather.uav.socket.handler.ServerHandler
+import com.flightfeather.uav.socket.handler.UnderwayWebSocketServerHandler
+import com.flightfeather.uav.socket.processor.BaseProcessor
import io.netty.bootstrap.ServerBootstrap
+import io.netty.channel.ChannelHandler
import io.netty.channel.ChannelInitializer
import io.netty.channel.ChannelOption
import io.netty.channel.nio.NioEventLoopGroup
import io.netty.channel.socket.nio.NioServerSocketChannel
import io.netty.channel.socket.nio.NioSocketChannel
+import io.netty.handler.codec.LineBasedFrameDecoder
+import io.netty.handler.codec.http.HttpObjectAggregator
+import io.netty.handler.codec.http.HttpServerCodec
+import io.netty.handler.codec.http.websocketx.WebSocketServerProtocolHandler
import io.netty.handler.codec.string.StringDecoder
import io.netty.handler.codec.string.StringEncoder
+import org.springframework.stereotype.Component
import java.nio.charset.Charset
/*********************************************************************************
* 璧拌埅鐩戞祴鏁版嵁socket闀胯繛鎺ユ湇鍔$
* 鐢ㄤ簬鎺ユ敹瑙f瀽璧拌埅鐩戞祴鏁版嵁锛屽墠绔洃娴嬭澶囩洰鍓嶅寘鎷溅杞借蛋鑸�佹棤浜烘満璧拌埅浠ュ強鏃犱汉鑸硅蛋鑸笁绉嶇被鍨�
* *******************************************************************************/
-class UnderwaySocketServer {
+@Component
+class UnderwaySocketServer(
+ private val sceneInfoRep: SceneInfoRep,
+ private val sourceTraceRep: SourceTraceRep
+) {
private val bossGroup = NioEventLoopGroup()
private val workerGroup = NioEventLoopGroup()
- fun startServer(port: Int) {
- initialize()?.bind(port)?.sync()
+ fun startUnderwayServer(port: Int, processor: BaseProcessor) {
+ underwayServer(processor)?.bind(port)?.sync()
+ }
+
+ fun startElectricServer(port: Int, processor: BaseProcessor) {
+ electricServer(processor)?.bind(port)?.sync()
+ }
+
+ fun startWebSocketServer(port: Int) {
+ webSocketServer()?.bind(port)?.sync()
}
fun stopServer() {
@@ -28,28 +51,57 @@
workerGroup.shutdownGracefully()
}
- private fun initialize(): ServerBootstrap? {
-
+ private fun newServer(childHandler: ChannelHandler): ServerBootstrap? {
try {
return ServerBootstrap()
- .group(bossGroup, workerGroup)
- .channel(NioServerSocketChannel::class.java)
- .option(ChannelOption.SO_BACKLOG, 128)
- .childOption(ChannelOption.SO_KEEPALIVE, true)
- .childOption(ChannelOption.TCP_NODELAY, true)
- .childHandler(object : ChannelInitializer<NioSocketChannel>() {
- override fun initChannel(p0: NioSocketChannel?) {
- p0?.pipeline()
-// ?.addLast("decoder", StringDecoder())
- ?.addLast(UAVByteDataDecoder())
- ?.addLast("encoder", StringEncoder(Charset.forName("UTF-8")))
- ?.addLast(ServerHandler())
- }
- })
+ .group(bossGroup, workerGroup)
+ .channel(NioServerSocketChannel::class.java)
+ .option(ChannelOption.SO_BACKLOG, 128)
+ .childOption(ChannelOption.SO_KEEPALIVE, true)
+ .childOption(ChannelOption.TCP_NODELAY, true)
+ .childHandler(childHandler)
} catch (e: Throwable) {
e.printStackTrace()
}
return null
}
+
+ /**
+ * 鐢ㄧ數閲忔湇鍔$
+ */
+ private fun electricServer(processor: BaseProcessor): ServerBootstrap? = newServer(object : ChannelInitializer<NioSocketChannel>() {
+ override fun initChannel(p0: NioSocketChannel?) {
+ p0?.pipeline()
+ ?.addLast("lineDecoder", LineBasedFrameDecoder(1024))
+ ?.addLast("stringDecoder", StringDecoder())
+ ?.addLast("encoder", StringEncoder(Charset.forName("UTF-8")))
+ ?.addLast(ServerHandler(processor))
+ }
+ })
+
+ /**
+ * 澶氬弬鏁拌蛋鑸湇鍔$
+ */
+ private fun underwayServer(processor: BaseProcessor):ServerBootstrap? = newServer(object : ChannelInitializer<NioSocketChannel>() {
+ override fun initChannel(p0: NioSocketChannel?) {
+ p0?.pipeline()
+ ?.addLast(UAVByteDataDecoder())
+ ?.addLast("encoder", StringEncoder(Charset.forName("UTF-8")))
+ ?.addLast(ServerHandler(processor))
+ }
+ })
+
+ /**
+ * 澶氬弬鏁拌蛋鑸湇鍔$
+ */
+ private fun webSocketServer():ServerBootstrap? = newServer(object : ChannelInitializer<NioSocketChannel>() {
+ override fun initChannel(p0: NioSocketChannel?) {
+ p0?.pipeline()
+ ?.addLast(HttpServerCodec())
+ ?.addLast(HttpObjectAggregator(65535))
+ ?.addLast(WebSocketServerProtocolHandler("/ws"))
+ ?.addLast(UnderwayWebSocketServerHandler(sceneInfoRep, sourceTraceRep))
+ }
+ })
}
\ No newline at end of file
--
Gitblit v1.9.3