@@ -5,10 +5,10 @@ import '../api/model/events.dart';
5
5
import '../api/model/model.dart' ;
6
6
import 'algorithms.dart' ;
7
7
8
- /// A data structure to keep track of stream and topic messages of users (senders) .
8
+ /// Tracks the latest messages sent by each user, in each stream and topic .
9
9
///
10
10
/// Use [latestMessageIdOfSenderInStream] and [latestMessageIdOfSenderInTopic]
11
- /// to get the relevant data .
11
+ /// for queries .
12
12
class RecentSenders {
13
13
// streamSenders[streamId][senderId] = MessageIdTracker
14
14
@visibleForTesting
@@ -18,21 +18,24 @@ class RecentSenders {
18
18
@visibleForTesting
19
19
final Map <int , Map <String , Map <int , MessageIdTracker >>> topicSenders = {};
20
20
21
+ /// The latest message the given user sent to the given stream,
22
+ /// or null if no such message is known.
21
23
int ? latestMessageIdOfSenderInStream ({
22
24
required int streamId,
23
25
required int senderId,
24
26
}) => streamSenders[streamId]? [senderId]? .maxId;
25
27
28
+ /// The latest message the given user sent to the given topic,
29
+ /// or null if no such message is known.
26
30
int ? latestMessageIdOfSenderInTopic ({
27
31
required int streamId,
28
32
required String topic,
29
33
required int senderId,
30
34
}) => topicSenders[streamId]? [topic]? [senderId]? .maxId;
31
35
32
- /// Records the necessary data from each message if it is a [StreamMessage] .
36
+ /// Records the necessary data from a batch of just-fetched messages .
33
37
///
34
- /// [messages] should be sorted by [id] ascendingly, which are, the way app
35
- /// receives and handles messages.
38
+ /// The messages must be sorted by [Message.id] ascending.
36
39
void handleMessages (List <Message > messages) {
37
40
final messagesByUserInStream = < (int , int ), QueueList <int >> {};
38
41
final messagesByUserInTopic = < (int , String , int ), QueueList <int >> {};
@@ -55,9 +58,7 @@ class RecentSenders {
55
58
}
56
59
}
57
60
58
- /// Records the necessary data from [message] if it is a [StreamMessage] .
59
- ///
60
- /// If [message] is not a [StreamMessage] , this is a no-op.
61
+ /// Records the necessary data from a new message.
61
62
void handleMessage (Message message) {
62
63
if (message is ! StreamMessage ) return ;
63
64
final StreamMessage (: streamId, : topic, : senderId, id: int messageId) = message;
0 commit comments