|
|
@@ -43,9 +43,10 @@ type Filter struct {
|
|
|
|
|
|
// Filters represents a collection of filters
|
|
|
type Filters struct {
|
|
|
- watchers map[string]*Filter
|
|
|
- topicMatcher map[TopicType]map[*Filter]struct{}
|
|
|
- allTopicsMatcher map[*Filter]struct{}
|
|
|
+ watchers map[string]*Filter
|
|
|
+
|
|
|
+ topicMatcher map[TopicType]map[*Filter]struct{} // map a topic to the filters that are interested in being notified when a message matches that topic
|
|
|
+ allTopicsMatcher map[*Filter]struct{} // list all the filters that will be notified of a new message, no matter what its topic is
|
|
|
|
|
|
whisper *Whisper
|
|
|
mutex sync.RWMutex
|
|
|
@@ -106,7 +107,9 @@ func (fs *Filters) Uninstall(id string) bool {
|
|
|
return false
|
|
|
}
|
|
|
|
|
|
-// addTopicMatcher adds a filter to the topic matchers
|
|
|
+// addTopicMatcher adds a filter to the topic matchers.
|
|
|
+// If the filter's Topics array is empty, it will be tried on every topic.
|
|
|
+// Otherwise, it will be tried on the topics specified.
|
|
|
func (fs *Filters) addTopicMatcher(watcher *Filter) {
|
|
|
if len(watcher.Topics) == 0 {
|
|
|
fs.allTopicsMatcher[watcher] = struct{}{}
|
|
|
@@ -133,10 +136,10 @@ func (fs *Filters) removeFromTopicMatchers(watcher *Filter) {
|
|
|
// match a specific topic
|
|
|
func (fs *Filters) getWatchersByTopic(topic TopicType) []*Filter {
|
|
|
res := make([]*Filter, 0, len(fs.allTopicsMatcher))
|
|
|
- for watcher, _ := range fs.allTopicsMatcher {
|
|
|
+ for watcher := range fs.allTopicsMatcher {
|
|
|
res = append(res, watcher)
|
|
|
}
|
|
|
- for watcher, _ := range fs.topicMatcher[topic] {
|
|
|
+ for watcher := range fs.topicMatcher[topic] {
|
|
|
res = append(res, watcher)
|
|
|
}
|
|
|
return res
|