fix warning
This commit is contained in:
parent
83ae28387e
commit
e19617961c
@ -19,11 +19,10 @@ import NIOCore
|
|||||||
import NIOPosix
|
import NIOPosix
|
||||||
|
|
||||||
// 处理和sn-server服务器之间的通讯
|
// 处理和sn-server服务器之间的通讯
|
||||||
class SDLNoticeClient: ChannelInboundHandler {
|
class SDLNoticeClient: ChannelInboundHandler, @unchecked Sendable {
|
||||||
public typealias InboundIn = AddressedEnvelope<ByteBuffer>
|
public typealias InboundIn = AddressedEnvelope<ByteBuffer>
|
||||||
public typealias OutboundOut = AddressedEnvelope<ByteBuffer>
|
public typealias OutboundOut = AddressedEnvelope<ByteBuffer>
|
||||||
|
|
||||||
private var thread: Thread?
|
|
||||||
var context: ChannelHandlerContext?
|
var context: ChannelHandlerContext?
|
||||||
private let group = MultiThreadedEventLoopGroup(numberOfThreads: 1)
|
private let group = MultiThreadedEventLoopGroup(numberOfThreads: 1)
|
||||||
private let remoteAddress: SocketAddress
|
private let remoteAddress: SocketAddress
|
||||||
@ -34,21 +33,18 @@ class SDLNoticeClient: ChannelInboundHandler {
|
|||||||
|
|
||||||
// 启动函数
|
// 启动函数
|
||||||
func start() {
|
func start() {
|
||||||
self.thread = Thread {
|
let bootstrap = DatagramBootstrap(group: self.group)
|
||||||
let bootstrap = DatagramBootstrap(group: self.group)
|
.channelOption(ChannelOptions.socketOption(.so_reuseaddr), value: 1)
|
||||||
.channelOption(ChannelOptions.socketOption(.so_reuseaddr), value: 1)
|
.channelInitializer { channel in
|
||||||
.channelInitializer { channel in
|
// 接收缓冲区
|
||||||
// 接收缓冲区
|
channel.pipeline.addHandler(self)
|
||||||
channel.pipeline.addHandler(self)
|
}
|
||||||
}
|
|
||||||
|
let channel = try! bootstrap.bind(host: "0.0.0.0", port: 0).wait()
|
||||||
let channel = try! bootstrap.bind(host: "0.0.0.0", port: 0).wait()
|
SDLLogger.log("[SDLNoticeClient] started and listening on: \(channel.localAddress!)", level: .debug)
|
||||||
SDLLogger.log("[SDLNoticeClient] started and listening on: \(channel.localAddress!)", level: .debug)
|
|
||||||
|
// This will never unblock as we don't close the channel
|
||||||
// This will never unblock as we don't close the channel
|
try! channel.closeFuture.wait()
|
||||||
try! channel.closeFuture.wait()
|
|
||||||
}
|
|
||||||
self.thread?.start()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// -- MARK: ChannelInboundHandler Methods
|
// -- MARK: ChannelInboundHandler Methods
|
||||||
@ -80,16 +76,15 @@ class SDLNoticeClient: ChannelInboundHandler {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let remoteAddress = self.remoteAddress
|
||||||
context.eventLoop.execute {
|
context.eventLoop.execute {
|
||||||
let buffer = context.channel.allocator.buffer(bytes: data)
|
let buffer = context.channel.allocator.buffer(bytes: data)
|
||||||
|
let envelope = AddressedEnvelope<ByteBuffer>(remoteAddress: remoteAddress, data: buffer)
|
||||||
let envelope = AddressedEnvelope<ByteBuffer>(remoteAddress: self.remoteAddress, data: buffer)
|
|
||||||
context.writeAndFlush(self.wrapOutboundOut(envelope), promise: nil)
|
context.writeAndFlush(self.wrapOutboundOut(envelope), promise: nil)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
deinit {
|
deinit {
|
||||||
self.thread?.cancel()
|
|
||||||
try? self.group.syncShutdownGracefully()
|
try? self.group.syncShutdownGracefully()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -11,7 +11,7 @@ import NIOPosix
|
|||||||
import Combine
|
import Combine
|
||||||
|
|
||||||
// --MARK: 和SuperNode的客户端
|
// --MARK: 和SuperNode的客户端
|
||||||
class SDLSuperClient: ChannelInboundHandler {
|
class SDLSuperClient: ChannelInboundHandler, @unchecked Sendable {
|
||||||
public typealias InboundIn = ByteBuffer
|
public typealias InboundIn = ByteBuffer
|
||||||
public typealias OutboundOut = ByteBuffer
|
public typealias OutboundOut = ByteBuffer
|
||||||
|
|
||||||
@ -302,21 +302,21 @@ extension SDLSuperClient {
|
|||||||
return .init(msgId: msgId, packet: .empty)
|
return .init(msgId: msgId, packet: .empty)
|
||||||
case .registerSuperAck:
|
case .registerSuperAck:
|
||||||
guard let bytes = buffer.readBytes(length: buffer.readableBytes),
|
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 nil
|
||||||
}
|
}
|
||||||
return .init(msgId: msgId, packet: .registerSuperAck(registerSuperAck))
|
return .init(msgId: msgId, packet: .registerSuperAck(registerSuperAck))
|
||||||
|
|
||||||
case .registerSuperNak:
|
case .registerSuperNak:
|
||||||
guard let bytes = buffer.readBytes(length: buffer.readableBytes),
|
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 nil
|
||||||
}
|
}
|
||||||
return .init(msgId: msgId, packet: .registerSuperNak(registerSuperNak))
|
return .init(msgId: msgId, packet: .registerSuperNak(registerSuperNak))
|
||||||
|
|
||||||
case .peerInfo:
|
case .peerInfo:
|
||||||
guard let bytes = buffer.readBytes(length: buffer.readableBytes),
|
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
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -333,7 +333,7 @@ extension SDLSuperClient {
|
|||||||
|
|
||||||
switch command {
|
switch command {
|
||||||
case .changeNetwork:
|
case .changeNetwork:
|
||||||
guard let changeNetworkCommand = try? SDLChangeNetworkCommand(serializedData: Data(bytes)) else {
|
guard let changeNetworkCommand = try? SDLChangeNetworkCommand(serializedBytes: bytes) else {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -349,17 +349,17 @@ extension SDLSuperClient {
|
|||||||
|
|
||||||
switch event {
|
switch event {
|
||||||
case .natChanged:
|
case .natChanged:
|
||||||
guard let natChangedEvent = try? SDLNatChangedEvent(serializedData: Data(bytes)) else {
|
guard let natChangedEvent = try? SDLNatChangedEvent(serializedBytes: bytes) else {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
return .init(msgId: msgId, packet: .event(.natChanged(natChangedEvent)))
|
return .init(msgId: msgId, packet: .event(.natChanged(natChangedEvent)))
|
||||||
case .sendRegister:
|
case .sendRegister:
|
||||||
guard let sendRegisterEvent = try? SDLSendRegisterEvent(serializedData: Data(bytes)) else {
|
guard let sendRegisterEvent = try? SDLSendRegisterEvent(serializedBytes: bytes) else {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
return .init(msgId: msgId, packet: .event(.sendRegister(sendRegisterEvent)))
|
return .init(msgId: msgId, packet: .event(.sendRegister(sendRegisterEvent)))
|
||||||
case .networkShutdown:
|
case .networkShutdown:
|
||||||
guard let networkShutdownEvent = try? SDLNetworkShutdownEvent(serializedData: Data(bytes)) else {
|
guard let networkShutdownEvent = try? SDLNetworkShutdownEvent(serializedBytes: bytes) else {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
return .init(msgId: msgId, packet: .event(.networkShutdown(networkShutdownEvent)))
|
return .init(msgId: msgId, packet: .event(.networkShutdown(networkShutdownEvent)))
|
||||||
|
|||||||
@ -11,7 +11,7 @@ import NIOPosix
|
|||||||
import Combine
|
import Combine
|
||||||
|
|
||||||
// 处理和sn-server服务器之间的通讯
|
// 处理和sn-server服务器之间的通讯
|
||||||
class SDLUDPHole: ChannelInboundHandler {
|
class SDLUDPHole: ChannelInboundHandler, @unchecked Sendable {
|
||||||
public typealias InboundIn = AddressedEnvelope<ByteBuffer>
|
public typealias InboundIn = AddressedEnvelope<ByteBuffer>
|
||||||
public typealias OutboundOut = AddressedEnvelope<ByteBuffer>
|
public typealias OutboundOut = AddressedEnvelope<ByteBuffer>
|
||||||
|
|
||||||
@ -219,23 +219,13 @@ class SDLUDPHole: ChannelInboundHandler {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// 在Eventloop中时直接写入数据避免线程切换
|
channel.eventLoop.execute {
|
||||||
if channel.eventLoop.inEventLoop {
|
|
||||||
var buffer = channel.allocator.buffer(capacity: data.count + 1)
|
var buffer = channel.allocator.buffer(capacity: data.count + 1)
|
||||||
buffer.writeBytes([type.rawValue])
|
buffer.writeBytes([type.rawValue])
|
||||||
buffer.writeBytes(data)
|
buffer.writeBytes(data)
|
||||||
|
|
||||||
let envelope = AddressedEnvelope<ByteBuffer>(remoteAddress: remoteAddress, data: buffer)
|
let envelope = AddressedEnvelope<ByteBuffer>(remoteAddress: remoteAddress, data: buffer)
|
||||||
channel.writeAndFlush(self.wrapOutboundOut(envelope), promise: nil)
|
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<ByteBuffer>(remoteAddress: remoteAddress, data: buffer)
|
|
||||||
channel.writeAndFlush(self.wrapOutboundOut(envelope), promise: nil)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -257,19 +247,19 @@ extension SDLUDPHole {
|
|||||||
|
|
||||||
switch packetType {
|
switch packetType {
|
||||||
case .data:
|
case .data:
|
||||||
let dataPacket = try SDLData(serializedData: Data(bytes))
|
let dataPacket = try SDLData(serializedBytes: bytes)
|
||||||
return .data(dataPacket)
|
return .data(dataPacket)
|
||||||
case .register:
|
case .register:
|
||||||
let registerPacket = try SDLRegister(serializedData: Data(bytes))
|
let registerPacket = try SDLRegister(serializedBytes: bytes)
|
||||||
return .register(registerPacket)
|
return .register(registerPacket)
|
||||||
case .registerAck:
|
case .registerAck:
|
||||||
let registerAck = try SDLRegisterAck(serializedData: Data(bytes))
|
let registerAck = try SDLRegisterAck(serializedBytes: bytes)
|
||||||
return .registerAck(registerAck)
|
return .registerAck(registerAck)
|
||||||
case .stunReply:
|
case .stunReply:
|
||||||
let stunReply = try SDLStunReply(serializedData: Data(bytes))
|
let stunReply = try SDLStunReply(serializedBytes: bytes)
|
||||||
return .stunReply(stunReply)
|
return .stunReply(stunReply)
|
||||||
case .stunProbeReply:
|
case .stunProbeReply:
|
||||||
let stunProbeReply = try SDLStunProbeReply(serializedData: Data(bytes))
|
let stunProbeReply = try SDLStunProbeReply(serializedBytes: bytes)
|
||||||
return .stunProbeReply(stunProbeReply)
|
return .stunProbeReply(stunProbeReply)
|
||||||
default:
|
default:
|
||||||
return nil
|
return nil
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user