fix task
This commit is contained in:
parent
6bc0f82169
commit
10278dfef0
@ -175,23 +175,8 @@ actor SDLContextActor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 处理心跳逻辑
|
|
||||||
let pingTask = Task.detached {
|
|
||||||
let timerStream = SDLAsyncTimerStream()
|
|
||||||
timerStream.start(interval: .seconds(5))
|
|
||||||
|
|
||||||
for await _ in timerStream.stream {
|
|
||||||
if Task.isCancelled {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
quicClient.send(type: .ping, data: Data())
|
|
||||||
}
|
|
||||||
|
|
||||||
SDLLogger.shared.log("[SDLContext] udp pingTask cancel")
|
|
||||||
}
|
|
||||||
|
|
||||||
self.quicClient = quicClient
|
self.quicClient = quicClient
|
||||||
self.quicWorkers = [messageTask, pingTask]
|
self.quicWorkers = [messageTask]
|
||||||
|
|
||||||
return quicClient
|
return quicClient
|
||||||
}
|
}
|
||||||
|
|||||||
@ -28,6 +28,7 @@ final class SDLQUICClient {
|
|||||||
public var messageStream: AsyncStream<SDLQUICInboundMessage>
|
public var messageStream: AsyncStream<SDLQUICInboundMessage>
|
||||||
private let messageCont: AsyncStream<SDLQUICInboundMessage>.Continuation
|
private let messageCont: AsyncStream<SDLQUICInboundMessage>.Continuation
|
||||||
private var readTask: Task<Void, Never>?
|
private var readTask: Task<Void, Never>?
|
||||||
|
private var pingTask: Task<Void, Never>?
|
||||||
|
|
||||||
private let connection: NWConnection
|
private let connection: NWConnection
|
||||||
private let queue = DispatchQueue(label: "com.sdl.QUICClient.queue") // 专用队列保证线程安全
|
private let queue = DispatchQueue(label: "com.sdl.QUICClient.queue") // 专用队列保证线程安全
|
||||||
@ -58,7 +59,7 @@ final class SDLQUICClient {
|
|||||||
|
|
||||||
func start() {
|
func start() {
|
||||||
connection.stateUpdateHandler = { state in
|
connection.stateUpdateHandler = { state in
|
||||||
SDLLogger.shared.log("[SDLQUICTransport] new state: \(state)")
|
SDLLogger.shared.log("[SDLQUICClient] new state: \(state)")
|
||||||
switch state {
|
switch state {
|
||||||
case .ready:
|
case .ready:
|
||||||
self.readyCont.yield()
|
self.readyCont.yield()
|
||||||
@ -103,6 +104,20 @@ final class SDLQUICClient {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 处理心跳逻辑
|
||||||
|
self.pingTask = Task {
|
||||||
|
let timerStream = SDLAsyncTimerStream()
|
||||||
|
timerStream.start(interval: .seconds(5))
|
||||||
|
|
||||||
|
for await _ in timerStream.stream {
|
||||||
|
if Task.isCancelled {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
self.send(type: .ping, data: Data())
|
||||||
|
}
|
||||||
|
|
||||||
|
SDLLogger.shared.log("[SDLQUICClient] udp pingTask cancel")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func send(type: SDLPacketType, data: Data) {
|
func send(type: SDLPacketType, data: Data) {
|
||||||
@ -223,26 +238,26 @@ final class SDLQUICClient {
|
|||||||
guard let eventVal = buffer.readInteger(as: UInt8.self),
|
guard let eventVal = buffer.readInteger(as: UInt8.self),
|
||||||
let event = SDLEventType(rawValue: eventVal),
|
let event = SDLEventType(rawValue: eventVal),
|
||||||
let bytes = buffer.readBytes(length: buffer.readableBytes) else {
|
let bytes = buffer.readBytes(length: buffer.readableBytes) else {
|
||||||
SDLLogger.shared.log("[SDLUDPHole] decode error 15")
|
SDLLogger.shared.log("[SDLQUICClient] decode error 15")
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
switch event {
|
switch event {
|
||||||
case .natChanged:
|
case .natChanged:
|
||||||
guard let natChangedEvent = try? SDLNatChangedEvent(serializedBytes: bytes) else {
|
guard let natChangedEvent = try? SDLNatChangedEvent(serializedBytes: bytes) else {
|
||||||
SDLLogger.shared.log("[SDLUDPHole] decode error 16")
|
SDLLogger.shared.log("[SDLQUICClient] decode error 16")
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
return .event(.natChanged(natChangedEvent))
|
return .event(.natChanged(natChangedEvent))
|
||||||
case .sendRegister:
|
case .sendRegister:
|
||||||
guard let sendRegisterEvent = try? SDLSendRegisterEvent(serializedBytes: bytes) else {
|
guard let sendRegisterEvent = try? SDLSendRegisterEvent(serializedBytes: bytes) else {
|
||||||
SDLLogger.shared.log("[SDLUDPHole] decode error 17")
|
SDLLogger.shared.log("[SDLQUICClient] decode error 17")
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
return .event(.sendRegister(sendRegisterEvent))
|
return .event(.sendRegister(sendRegisterEvent))
|
||||||
case .networkShutdown:
|
case .networkShutdown:
|
||||||
guard let networkShutdownEvent = try? SDLNetworkShutdownEvent(serializedBytes: bytes) else {
|
guard let networkShutdownEvent = try? SDLNetworkShutdownEvent(serializedBytes: bytes) else {
|
||||||
SDLLogger.shared.log("[SDLUDPHole] decode error 18")
|
SDLLogger.shared.log("[SDLQUICClient] decode error 18")
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
return .event(.networkShutdown(networkShutdownEvent))
|
return .event(.networkShutdown(networkShutdownEvent))
|
||||||
@ -250,7 +265,7 @@ final class SDLQUICClient {
|
|||||||
case .pong:
|
case .pong:
|
||||||
return .pong
|
return .pong
|
||||||
default:
|
default:
|
||||||
SDLLogger.shared.log("SDLUDPHole decode miss type: \(type)")
|
SDLLogger.shared.log("SDLQUICClient decode miss type: \(type)")
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -258,6 +273,7 @@ final class SDLQUICClient {
|
|||||||
|
|
||||||
deinit {
|
deinit {
|
||||||
self.readTask?.cancel()
|
self.readTask?.cancel()
|
||||||
|
self.pingTask?.cancel()
|
||||||
self.messageCont.finish()
|
self.messageCont.finish()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user