Fix peer discovery: include connected peripherals in peer list even before announce

This commit is contained in:
jack
2025-07-02 19:26:36 +02:00
parent 3c38bdc791
commit 304c121467
2 changed files with 32 additions and 12 deletions
+23 -4
View File
@@ -123,7 +123,16 @@ class BluetoothMeshService: NSObject {
} }
private func getAllConnectedPeerIDs() -> [String] { private func getAllConnectedPeerIDs() -> [String] {
return Array(activePeers) var peers = Set<String>()
// Include connected peripherals (devices we connected to as central)
peers.formUnion(connectedPeripherals.keys)
// Include active peers (devices that have announced)
peers.formUnion(activePeers)
// Filter out invalid peers
return peers.filter { $0 != "unknown" && $0 != myPeerID }
} }
private func broadcastPacket(_ packet: BitchatPacket) { private func broadcastPacket(_ packet: BitchatPacket) {
@@ -217,24 +226,34 @@ class BluetoothMeshService: NSObject {
if let nickname = String(data: packet.payload, encoding: .utf8) { if let nickname = String(data: packet.payload, encoding: .utf8) {
print("[DEBUG] Received announce from \(peerID): \(nickname)") print("[DEBUG] Received announce from \(peerID): \(nickname)")
// Check if this is the first time we're getting a nickname for this peer
let isNewNickname = peerNicknames[peerID] == nil
// Store the nickname // Store the nickname
peerNicknames[peerID] = nickname peerNicknames[peerID] = nickname
// Add to active peers if not already there // Add to active peers if not already there
if peerID != "unknown" && peerID != myPeerID && !activePeers.contains(peerID) { if peerID != "unknown" && peerID != myPeerID {
if !activePeers.contains(peerID) {
print("[DEBUG] Adding new peer \(peerID) to active peers") print("[DEBUG] Adding new peer \(peerID) to active peers")
activePeers.insert(peerID) activePeers.insert(peerID)
}
// Show join message if this is a new nickname
if isNewNickname {
DispatchQueue.main.async { DispatchQueue.main.async {
self.delegate?.didConnectToPeer(nickname) self.delegate?.didConnectToPeer(nickname)
self.delegate?.didUpdatePeerList(self.getAllConnectedPeerIDs()) self.delegate?.didUpdatePeerList(self.getAllConnectedPeerIDs())
} }
} else { } else {
print("[DEBUG] Peer \(peerID) already active or invalid") // Just update the peer list
// Just update the peer list to refresh nicknames
DispatchQueue.main.async { DispatchQueue.main.async {
self.delegate?.didUpdatePeerList(self.getAllConnectedPeerIDs()) self.delegate?.didUpdatePeerList(self.getAllConnectedPeerIDs())
} }
} }
} else {
print("[DEBUG] Peer \(peerID) is invalid (unknown or self)")
}
} }
default: default:
+1
View File
@@ -149,6 +149,7 @@ extension ChatViewModel: BitchatDelegate {
} }
func didUpdatePeerList(_ peers: [String]) { func didUpdatePeerList(_ peers: [String]) {
print("[DEBUG] ChatViewModel: Peer list updated with \(peers.count) peers: \(peers)")
connectedPeers = peers connectedPeers = peers
isConnected = !peers.isEmpty isConnected = !peers.isEmpty