Fix connection drop for larger files

This commit is contained in:
Leon Böttger committed 2026-01-01 12:03:50 +01:00
1 parent ed213b4d3c
commit 40169334ff
2 files changed
+20 -14

No files matched your search

+16 -10
View File
@@ -38,7 +38,10 @@ class NearbyConnection {
private var connectionClosed: Bool = false
private var inactivityTimer: DispatchSourceTimer?
private let timeoutInterval: TimeInterval = 30
private let ackInterval: TimeInterval = 5
private let ackTimeoutInterval: TimeInterval = 30
private var lastKeepAliveFrameSent = Date()
// UKEY2-related state
var privateKey: ECPrivateKey?
@@ -429,11 +432,6 @@ class NearbyConnection {
}
}
else if offlineFrame.hasV1, offlineFrame.v1.hasType, case .keepAlive = offlineFrame.v1.type {
let bytesTransferred = self.bytesTransferred
let gigabytesTransferred = Double(bytesTransferred) / 1_000_000_000
log("[NearbyConnection \(self.id)] Sent keep-alive, \(self.bytesTransferred) bytes (\(gigabytesTransferred) GB) sent")
sendKeepAlive(ack: true)
} else {
@@ -588,25 +586,33 @@ class NearbyConnection {
} else {
try sendFrameAsync(offlineFrame.serializedData())
}
self.lastKeepAliveFrameSent = Date()
} catch {
log("[NearbyConnection \(self.id)] Error sending KEEP_ALIVE: \(error)")
}
log("[NearbyConnection \(self.id)] Sent keep-alive \(ack ? "ack" : "no ack"), \(self.bytesTransferred) bytes (\(Double(bytesTransferred) / 1_000_000_000) GB) sent")
}
func startAndResetHeartbeatTimer() {
if lastKeepAliveFrameSent.isOlderThan(seconds: ackInterval) {
sendKeepAlive(ack: false)
}
// Cancel previous timer if any
inactivityTimer?.cancel()
inactivityTimer = DispatchSource.makeTimerSource(queue: NearbyConnection.dispatchQueue)
inactivityTimer?.schedule(deadline: .now() + timeoutInterval)
inactivityTimer?.schedule(deadline: .now() + ackTimeoutInterval)
inactivityTimer?.setEventHandler { [weak self] in
guard let self = self else { return }
if !self.connectionClosed {
log("[NearbyConnection \(self.id)] Connection timeout: No message received in \(self.timeoutInterval) seconds")
log("[NearbyConnection \(self.id)] Connection timeout: No message received in \(self.ackTimeoutInterval) seconds")
self.lastError = NearbyError.canceled(reason: .timedOut)
self.disconnect()
}
@@ -617,7 +623,7 @@ class NearbyConnection {
func startDataTransferTimer(previousBytesTransferred: Int64) {
NearbyConnection.dispatchQueue.asyncAfter(deadline: .now() + timeoutInterval) {
NearbyConnection.dispatchQueue.asyncAfter(deadline: .now() + ackTimeoutInterval) {
if previousBytesTransferred < self.bytesTransferred {
// everything good, transferred more than last check, schedule next check
@@ -626,7 +632,7 @@ class NearbyConnection {
else {
// connection stale, need to abort
if !self.connectionClosed {
log("[NearbyConnection \(self.id)] Connection timeout: No more data received in \(self.timeoutInterval) seconds")
log("[NearbyConnection \(self.id)] Connection timeout: No more data received in \(self.ackTimeoutInterval) seconds")
self.lastError = NearbyError.canceled(reason: .timedOut)
self.disconnect()
}
+4 -4
View File
@@ -1733,8 +1733,8 @@
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = macosx;
SHARED_BUILD = 106;
SHARED_VERSION = 2.10.1;
SHARED_BUILD = 107;
SHARED_VERSION = 2.10.3;
STRING_CATALOG_GENERATE_SYMBOLS = YES;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_EMIT_LOC_STRINGS = YES;
@@ -1796,8 +1796,8 @@
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = macosx;
SHARED_BUILD = 106;
SHARED_VERSION = 2.10.1;
SHARED_BUILD = 107;
SHARED_VERSION = 2.10.3;
STRING_CATALOG_GENERATE_SYMBOLS = YES;
SWIFT_COMPILATION_MODE = wholemodule;
SWIFT_EMIT_LOC_STRINGS = YES;