-
Notifications
You must be signed in to change notification settings - Fork 111
/
Copy pathFndTopic.swift
55 lines (48 loc) · 1.58 KB
/
FndTopic.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
//
// FndTopic.swift
// TinodeSDK
//
// Copyright © 2020-2022 Tinode LLC. All rights reserved.
//
import Foundation
public class FndTopic<SP: Codable>: Topic<String, String, SP, [String]> {
init(tinode: Tinode?) {
super.init(tinode: tinode, name: Tinode.kTopicFnd)
}
@discardableResult
override public func setMeta(meta: MsgSetMeta<String, String>) -> PromisedReply<ServerMessage> {
if self.subs != nil {
self.subs!.removeAll()
self.subs = nil
self.subsLastUpdated = nil
self.listener?.onSubsUpdated()
}
return super.setMeta(meta: meta)
}
override func routeMetaSub(meta: MsgServerMeta) {
if let subscriptions = meta.sub {
for upd in subscriptions {
var sub = getSubscription(for: upd.uniqueId)
if sub != nil {
_ = sub!.merge(sub: upd as! Subscription<SP, [String]>)
} else {
sub = upd as? Subscription<SP, [String]>
self.addSubToCache(sub: sub!)
}
self.listener?.onMetaSub(sub: sub!)
}
}
self.listener?.onSubsUpdated()
}
override public func getSubscriptions() -> [Subscription<SP, [String]>]? {
guard let v = subs?.values else { return nil }
return Array(v)
}
override func addSubToCache(sub: Subscription<SP, [String]>) {
guard let unique = sub.user ?? sub.topic else { return }
if subs == nil {
subs = [:]
}
subs![unique] = sub
}
}