mirror of
https://github.com/permissionlesstech/bitchat.git
synced 2026-07-25 07:05:20 +00:00
Announce cadence: faster discovery (4s), sparse 15±4s, dense 30±8s; initial 0.6s; post-subscribe 50ms; min-force 150ms; maintenance 5s; proactive announces on handshake + recent-traffic nudge
This commit is contained in:
@@ -311,6 +311,10 @@ final class BLEService: NSObject {
|
|||||||
self?.sendPendingMessagesAfterHandshake(for: peerID)
|
self?.sendPendingMessagesAfterHandshake(for: peerID)
|
||||||
self?.sendPendingNoisePayloadsAfterHandshake(for: peerID)
|
self?.sendPendingNoisePayloadsAfterHandshake(for: peerID)
|
||||||
}
|
}
|
||||||
|
// Proactive presence nudge: announce immediately after handshake
|
||||||
|
self?.messageQueue.async { [weak self] in
|
||||||
|
self?.sendAnnounce(forceSend: true)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set up application state tracking (iOS only)
|
// Set up application state tracking (iOS only)
|
||||||
@@ -1856,6 +1860,16 @@ final class BLEService: NSObject {
|
|||||||
if elapsed >= target { sendAnnounce(forceSend: true) }
|
if elapsed >= target { sendAnnounce(forceSend: true) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Activity-driven quick-announce: if we've seen any packet in last 5s and it has
|
||||||
|
// been >=10s since the last announce, send a presence nudge.
|
||||||
|
let recentSeen = collectionsQueue.sync { () -> Bool in
|
||||||
|
let cutoff = now.addingTimeInterval(-5.0)
|
||||||
|
return recentPacketTimestamps.contains(where: { $0 >= cutoff })
|
||||||
|
}
|
||||||
|
if recentSeen && elapsed >= 10.0 {
|
||||||
|
sendAnnounce(forceSend: true)
|
||||||
|
}
|
||||||
|
|
||||||
// If we have no peers, ensure we're scanning and advertising
|
// If we have no peers, ensure we're scanning and advertising
|
||||||
if peers.isEmpty {
|
if peers.isEmpty {
|
||||||
// Ensure we're advertising as peripheral
|
// Ensure we're advertising as peripheral
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ enum TransportConfig {
|
|||||||
static let uiRecentCutoffFiveMinutesSeconds: TimeInterval = 5 * 60
|
static let uiRecentCutoffFiveMinutesSeconds: TimeInterval = 5 * 60
|
||||||
|
|
||||||
// BLE maintenance & thresholds
|
// BLE maintenance & thresholds
|
||||||
static let bleMaintenanceInterval: TimeInterval = 10.0
|
static let bleMaintenanceInterval: TimeInterval = 5.0
|
||||||
static let bleMaintenanceLeewaySeconds: Int = 1
|
static let bleMaintenanceLeewaySeconds: Int = 1
|
||||||
static let bleIsolationRelaxThresholdSeconds: TimeInterval = 60
|
static let bleIsolationRelaxThresholdSeconds: TimeInterval = 60
|
||||||
static let bleRecentTimeoutWindowSeconds: TimeInterval = 60
|
static let bleRecentTimeoutWindowSeconds: TimeInterval = 60
|
||||||
@@ -84,13 +84,13 @@ enum TransportConfig {
|
|||||||
static let bleExpectedWritePerFragmentMs: Int = 8
|
static let bleExpectedWritePerFragmentMs: Int = 8
|
||||||
static let bleExpectedWriteMaxMs: Int = 2000
|
static let bleExpectedWriteMaxMs: Int = 2000
|
||||||
static let bleFragmentSpacingMs: Int = 6
|
static let bleFragmentSpacingMs: Int = 6
|
||||||
static let bleAnnounceIntervalSeconds: TimeInterval = 10.0
|
static let bleAnnounceIntervalSeconds: TimeInterval = 4.0
|
||||||
static let bleDutyOnDurationDense: TimeInterval = 3.0
|
static let bleDutyOnDurationDense: TimeInterval = 3.0
|
||||||
static let bleDutyOffDurationDense: TimeInterval = 15.0
|
static let bleDutyOffDurationDense: TimeInterval = 15.0
|
||||||
static let bleConnectedAnnounceBaseSecondsDense: TimeInterval = 90.0
|
static let bleConnectedAnnounceBaseSecondsDense: TimeInterval = 30.0
|
||||||
static let bleConnectedAnnounceBaseSecondsSparse: TimeInterval = 45.0
|
static let bleConnectedAnnounceBaseSecondsSparse: TimeInterval = 15.0
|
||||||
static let bleConnectedAnnounceJitterDense: TimeInterval = 20.0
|
static let bleConnectedAnnounceJitterDense: TimeInterval = 8.0
|
||||||
static let bleConnectedAnnounceJitterSparse: TimeInterval = 7.5
|
static let bleConnectedAnnounceJitterSparse: TimeInterval = 4.0
|
||||||
|
|
||||||
// Location
|
// Location
|
||||||
static let locationDistanceFilterMeters: Double = 1000
|
static let locationDistanceFilterMeters: Double = 1000
|
||||||
@@ -129,12 +129,12 @@ enum TransportConfig {
|
|||||||
static let geoRelayFetchIntervalSeconds: TimeInterval = 60 * 60 * 24
|
static let geoRelayFetchIntervalSeconds: TimeInterval = 60 * 60 * 24
|
||||||
|
|
||||||
// BLE operational delays
|
// BLE operational delays
|
||||||
static let bleInitialAnnounceDelaySeconds: TimeInterval = 2.0
|
static let bleInitialAnnounceDelaySeconds: TimeInterval = 0.6
|
||||||
static let bleConnectTimeoutSeconds: TimeInterval = 8.0
|
static let bleConnectTimeoutSeconds: TimeInterval = 8.0
|
||||||
static let bleRestartScanDelaySeconds: TimeInterval = 0.1
|
static let bleRestartScanDelaySeconds: TimeInterval = 0.1
|
||||||
static let blePostSubscribeAnnounceDelaySeconds: TimeInterval = 0.1
|
static let blePostSubscribeAnnounceDelaySeconds: TimeInterval = 0.05
|
||||||
static let blePostAnnounceDelaySeconds: TimeInterval = 0.4
|
static let blePostAnnounceDelaySeconds: TimeInterval = 0.4
|
||||||
static let bleForceAnnounceMinIntervalSeconds: TimeInterval = 0.2
|
static let bleForceAnnounceMinIntervalSeconds: TimeInterval = 0.15
|
||||||
|
|
||||||
// Content hashing / formatting
|
// Content hashing / formatting
|
||||||
static let contentKeyPrefixLength: Int = 256
|
static let contentKeyPrefixLength: Int = 256
|
||||||
|
|||||||
Reference in New Issue
Block a user