From e19617961c2f7257f54e1e93a64d6524364663c7 Mon Sep 17 00:00:00 2001 From: anlicheng <244108715@qq.com> Date: Mon, 14 Jul 2025 17:10:55 +0800 Subject: [PATCH] fix warning --- Sources/sdlan/SDLNoticeClient.swift | 35 +++++++++++++---------------- Sources/sdlan/SDLSuperClient.swift | 16 ++++++------- Sources/sdlan/SDLUDPHole.swift | 24 ++++++-------------- 3 files changed, 30 insertions(+), 45 deletions(-) diff --git a/Sources/sdlan/SDLNoticeClient.swift b/Sources/sdlan/SDLNoticeClient.swift index 71a12de..77b29f6 100644 --- a/Sources/sdlan/SDLNoticeClient.swift +++ b/Sources/sdlan/SDLNoticeClient.swift @@ -19,11 +19,10 @@ import NIOCore import NIOPosix // 处理和sn-server服务器之间的通讯 -class SDLNoticeClient: ChannelInboundHandler { +class SDLNoticeClient: ChannelInboundHandler, @unchecked Sendable { public typealias InboundIn = AddressedEnvelope public typealias OutboundOut = AddressedEnvelope - private var thread: Thread? var context: ChannelHandlerContext? private let group = MultiThreadedEventLoopGroup(numberOfThreads: 1) private let remoteAddress: SocketAddress @@ -34,21 +33,18 @@ class SDLNoticeClient: ChannelInboundHandler { // 启动函数 func start() { - self.thread = Thread { - let bootstrap = DatagramBootstrap(group: self.group) - .channelOption(ChannelOptions.socketOption(.so_reuseaddr), value: 1) - .channelInitializer { channel in - // 接收缓冲区 - channel.pipeline.addHandler(self) - } - - let channel = try! bootstrap.bind(host: "0.0.0.0", port: 0).wait() - SDLLogger.log("[SDLNoticeClient] started and listening on: \(channel.localAddress!)", level: .debug) - - // This will never unblock as we don't close the channel - try! channel.closeFuture.wait() - } - self.thread?.start() + let bootstrap = DatagramBootstrap(group: self.group) + .channelOption(ChannelOptions.socketOption(.so_reuseaddr), value: 1) + .channelInitializer { channel in + // 接收缓冲区 + channel.pipeline.addHandler(self) + } + + let channel = try! bootstrap.bind(host: "0.0.0.0", port: 0).wait() + SDLLogger.log("[SDLNoticeClient] started and listening on: \(channel.localAddress!)", level: .debug) + + // This will never unblock as we don't close the channel + try! channel.closeFuture.wait() } // -- MARK: ChannelInboundHandler Methods @@ -80,16 +76,15 @@ class SDLNoticeClient: ChannelInboundHandler { return } + let remoteAddress = self.remoteAddress context.eventLoop.execute { let buffer = context.channel.allocator.buffer(bytes: data) - - let envelope = AddressedEnvelope(remoteAddress: self.remoteAddress, data: buffer) + let envelope = AddressedEnvelope(remoteAddress: remoteAddress, data: buffer) context.writeAndFlush(self.wrapOutboundOut(envelope), promise: nil) } } deinit { - self.thread?.cancel() try? self.group.syncShutdownGracefully() } } diff --git a/Sources/sdlan/SDLSuperClient.swift b/Sources/sdlan/SDLSuperClient.swift index e673619..dd18751 100644 --- a/Sources/sdlan/SDLSuperClient.swift +++ b/Sources/sdlan/SDLSuperClient.swift @@ -11,7 +11,7 @@ import NIOPosix import Combine // --MARK: 和SuperNode的客户端 -class SDLSuperClient: ChannelInboundHandler { +class SDLSuperClient: ChannelInboundHandler, @unchecked Sendable { public typealias InboundIn = ByteBuffer public typealias OutboundOut = ByteBuffer @@ -302,21 +302,21 @@ extension SDLSuperClient { return .init(msgId: msgId, packet: .empty) case .registerSuperAck: guard let bytes = buffer.readBytes(length: buffer.readableBytes), - let registerSuperAck = try? SDLRegisterSuperAck(serializedData: Data(bytes)) else { + let registerSuperAck = try? SDLRegisterSuperAck(serializedBytes: bytes) else { return nil } return .init(msgId: msgId, packet: .registerSuperAck(registerSuperAck)) case .registerSuperNak: guard let bytes = buffer.readBytes(length: buffer.readableBytes), - let registerSuperNak = try? SDLRegisterSuperNak(serializedData: Data(bytes)) else { + let registerSuperNak = try? SDLRegisterSuperNak(serializedBytes: bytes) else { return nil } return .init(msgId: msgId, packet: .registerSuperNak(registerSuperNak)) case .peerInfo: guard let bytes = buffer.readBytes(length: buffer.readableBytes), - let peerInfo = try? SDLPeerInfo(serializedData: Data(bytes)) else { + let peerInfo = try? SDLPeerInfo(serializedBytes: bytes) else { return nil } @@ -333,7 +333,7 @@ extension SDLSuperClient { switch command { case .changeNetwork: - guard let changeNetworkCommand = try? SDLChangeNetworkCommand(serializedData: Data(bytes)) else { + guard let changeNetworkCommand = try? SDLChangeNetworkCommand(serializedBytes: bytes) else { return nil } @@ -349,17 +349,17 @@ extension SDLSuperClient { switch event { case .natChanged: - guard let natChangedEvent = try? SDLNatChangedEvent(serializedData: Data(bytes)) else { + guard let natChangedEvent = try? SDLNatChangedEvent(serializedBytes: bytes) else { return nil } return .init(msgId: msgId, packet: .event(.natChanged(natChangedEvent))) case .sendRegister: - guard let sendRegisterEvent = try? SDLSendRegisterEvent(serializedData: Data(bytes)) else { + guard let sendRegisterEvent = try? SDLSendRegisterEvent(serializedBytes: bytes) else { return nil } return .init(msgId: msgId, packet: .event(.sendRegister(sendRegisterEvent))) case .networkShutdown: - guard let networkShutdownEvent = try? SDLNetworkShutdownEvent(serializedData: Data(bytes)) else { + guard let networkShutdownEvent = try? SDLNetworkShutdownEvent(serializedBytes: bytes) else { return nil } return .init(msgId: msgId, packet: .event(.networkShutdown(networkShutdownEvent))) diff --git a/Sources/sdlan/SDLUDPHole.swift b/Sources/sdlan/SDLUDPHole.swift index 3c941c1..2819932 100644 --- a/Sources/sdlan/SDLUDPHole.swift +++ b/Sources/sdlan/SDLUDPHole.swift @@ -11,7 +11,7 @@ import NIOPosix import Combine // 处理和sn-server服务器之间的通讯 -class SDLUDPHole: ChannelInboundHandler { +class SDLUDPHole: ChannelInboundHandler, @unchecked Sendable { public typealias InboundIn = AddressedEnvelope public typealias OutboundOut = AddressedEnvelope @@ -219,23 +219,13 @@ class SDLUDPHole: ChannelInboundHandler { return } - // 在Eventloop中时直接写入数据避免线程切换 - if channel.eventLoop.inEventLoop { + channel.eventLoop.execute { var buffer = channel.allocator.buffer(capacity: data.count + 1) buffer.writeBytes([type.rawValue]) buffer.writeBytes(data) let envelope = AddressedEnvelope(remoteAddress: remoteAddress, data: buffer) channel.writeAndFlush(self.wrapOutboundOut(envelope), promise: nil) - } else { - channel.eventLoop.execute { - var buffer = channel.allocator.buffer(capacity: data.count + 1) - buffer.writeBytes([type.rawValue]) - buffer.writeBytes(data) - - let envelope = AddressedEnvelope(remoteAddress: remoteAddress, data: buffer) - channel.writeAndFlush(self.wrapOutboundOut(envelope), promise: nil) - } } } @@ -257,19 +247,19 @@ extension SDLUDPHole { switch packetType { case .data: - let dataPacket = try SDLData(serializedData: Data(bytes)) + let dataPacket = try SDLData(serializedBytes: bytes) return .data(dataPacket) case .register: - let registerPacket = try SDLRegister(serializedData: Data(bytes)) + let registerPacket = try SDLRegister(serializedBytes: bytes) return .register(registerPacket) case .registerAck: - let registerAck = try SDLRegisterAck(serializedData: Data(bytes)) + let registerAck = try SDLRegisterAck(serializedBytes: bytes) return .registerAck(registerAck) case .stunReply: - let stunReply = try SDLStunReply(serializedData: Data(bytes)) + let stunReply = try SDLStunReply(serializedBytes: bytes) return .stunReply(stunReply) case .stunProbeReply: - let stunProbeReply = try SDLStunProbeReply(serializedData: Data(bytes)) + let stunProbeReply = try SDLStunProbeReply(serializedBytes: bytes) return .stunProbeReply(stunProbeReply) default: return nil