Swiftgram/submodules/Postbox/Sources/MultiplePeersView.swift
2019-11-01 17:11:12 +04:00

53 lines
1.5 KiB
Swift

import Foundation
final class MutableMultiplePeersView {
let peerIds: Set<PeerId>
var peers: [PeerId: Peer] = [:]
var presences: [PeerId: PeerPresence] = [:]
init(peerIds: [PeerId], getPeer: (PeerId) -> Peer?, getPeerPresence: (PeerId) -> PeerPresence?) {
self.peerIds = Set(peerIds)
for peerId in self.peerIds {
if let peer = getPeer(peerId) {
self.peers[peerId] = peer
}
if let presence = getPeerPresence(peerId) {
self.presences[peerId] = presence
}
}
}
func replay(updatedPeers: [PeerId: Peer], updatedPeerPresences: [PeerId: PeerPresence]) -> Bool {
if updatedPeers.isEmpty && updatedPeerPresences.isEmpty {
return false
}
var updated = false
for peerId in self.peerIds {
if let peer = updatedPeers[peerId] {
self.peers[peerId] = peer
updated = true
}
if let presence = updatedPeerPresences[peerId] {
self.presences[peerId] = presence
updated = true
}
}
return updated
}
}
public final class MultiplePeersView {
public let peers: [PeerId: Peer]
public let presences: [PeerId: PeerPresence]
init(_ view: MutableMultiplePeersView) {
self.peers = view.peers
self.presences = view.presences
}
}