fix: タイムアウト時の処理が行われない場合がある問題を修正
This commit is contained in:
parent
382bf69cda
commit
9c8e97cac9
|
@ -50,9 +50,7 @@ open class NetSocket: NSObject {
|
|||
}
|
||||
}
|
||||
lazy var inputQueue = DispatchQueue(label: "com.haishinkit.HaishinKit.NetSocket.input", qos: qualityOfService)
|
||||
private lazy var timeoutHandler = DispatchWorkItem { [weak self] in
|
||||
self?.didTimeout()
|
||||
}
|
||||
private var timeoutHandler: DispatchWorkItem?
|
||||
private lazy var buffer = [UInt8](repeating: 0, count: windowSizeC)
|
||||
private lazy var outputBuffer: CycleBuffer = .init(capacity: windowSizeC)
|
||||
private lazy var outputQueue: DispatchQueue = .init(label: "com.haishinkit.HaishinKit.NetSocket.output", qos: qualityOfService)
|
||||
|
@ -115,7 +113,11 @@ open class NetSocket: NSObject {
|
|||
inputStream.open()
|
||||
outputStream.open()
|
||||
if 0 < timeout {
|
||||
DispatchQueue.global(qos: .userInteractive).asyncAfter(deadline: .now() + .seconds(timeout), execute: timeoutHandler)
|
||||
let newTimeoutHandler = DispatchWorkItem { [weak self] in
|
||||
self?.didTimeout()
|
||||
}
|
||||
timeoutHandler = newTimeoutHandler
|
||||
DispatchQueue.global(qos: .userInteractive).asyncAfter(deadline: .now() + .seconds(timeout), execute: newTimeoutHandler)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -123,7 +125,7 @@ open class NetSocket: NSObject {
|
|||
guard inputStream != nil && outputStream != nil else {
|
||||
return
|
||||
}
|
||||
timeoutHandler.cancel()
|
||||
timeoutHandler?.cancel()
|
||||
inputStream?.close()
|
||||
inputStream = nil
|
||||
outputStream?.close()
|
||||
|
@ -168,7 +170,7 @@ extension NetSocket: StreamDelegate {
|
|||
break
|
||||
}
|
||||
if aStream == inputStream {
|
||||
timeoutHandler.cancel()
|
||||
timeoutHandler?.cancel()
|
||||
connected = true
|
||||
}
|
||||
// 2 = 1 << 1
|
||||
|
|
|
@ -51,9 +51,7 @@ final class RTMPNWSocket: RTMPSocketCompatible {
|
|||
private var parameters: NWParameters = .tcp
|
||||
private lazy var inputQueue = DispatchQueue(label: "com.haishinkit.HaishinKit.NWSocket.input", qos: qualityOfService)
|
||||
private lazy var outputQueue = DispatchQueue(label: "com.haishinkit.HaishinKit.NWSocket.output", qos: qualityOfService)
|
||||
private lazy var timeoutHandler = DispatchWorkItem { [weak self] in
|
||||
self?.didTimeout()
|
||||
}
|
||||
private var timeoutHandler: DispatchWorkItem?
|
||||
|
||||
func connect(withName: String, port: Int) {
|
||||
handshake.clear()
|
||||
|
@ -71,7 +69,11 @@ final class RTMPNWSocket: RTMPSocketCompatible {
|
|||
receive(on: connection)
|
||||
}
|
||||
if 0 < timeout {
|
||||
DispatchQueue.global(qos: .userInteractive).asyncAfter(deadline: .now() + .seconds(timeout), execute: timeoutHandler)
|
||||
let newTimeoutHandler = DispatchWorkItem { [weak self] in
|
||||
self?.didTimeout()
|
||||
}
|
||||
timeoutHandler = newTimeoutHandler
|
||||
DispatchQueue.global(qos: .userInteractive).asyncAfter(deadline: .now() + .seconds(timeout), execute: newTimeoutHandler)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -85,7 +87,7 @@ final class RTMPNWSocket: RTMPSocketCompatible {
|
|||
events.append(Event(type: .rtmpStatus, bubbles: false, data: data))
|
||||
}
|
||||
readyState = .closing
|
||||
timeoutHandler.cancel()
|
||||
timeoutHandler?.cancel()
|
||||
connection = nil
|
||||
}
|
||||
|
||||
|
@ -142,7 +144,7 @@ final class RTMPNWSocket: RTMPSocketCompatible {
|
|||
private func stateDidChange(to state: NWConnection.State) {
|
||||
switch state {
|
||||
case .ready:
|
||||
timeoutHandler.cancel()
|
||||
timeoutHandler?.cancel()
|
||||
connected = true
|
||||
case .failed:
|
||||
close(isDisconnected: true)
|
||||
|
|
Loading…
Reference in New Issue