Compare commits
1 Commits
fee2381a45
...
v1.0.2
Author | SHA1 | Date | |
---|---|---|---|
![]() |
e99fd0710b |
@@ -5,6 +5,7 @@ import (
|
|||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"gitea.tecamino.com/paadi/pubSub/models"
|
"gitea.tecamino.com/paadi/pubSub/models"
|
||||||
|
"gitea.tecamino.com/paadi/pubSub/utils"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Pubsub implements a simple topic-based publish/subscribe system
|
// Pubsub implements a simple topic-based publish/subscribe system
|
||||||
@@ -43,10 +44,14 @@ func (ps *Pubsub) worker() {
|
|||||||
defer ps.wg.Done()
|
defer ps.wg.Done()
|
||||||
for job := range ps.jobQueue {
|
for job := range ps.jobQueue {
|
||||||
ps.mu.RLock()
|
ps.mu.RLock()
|
||||||
subs := make([]func(any), 0, len(ps.subs[job.Topic]))
|
var subs []func(any)
|
||||||
for _, cb := range ps.subs[job.Topic] {
|
for pattern, callbacks := range ps.subs {
|
||||||
|
if utils.Matches(pattern, job.Topic) {
|
||||||
|
for _, cb := range callbacks {
|
||||||
subs = append(subs, cb)
|
subs = append(subs, cb)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
ps.mu.RUnlock()
|
ps.mu.RUnlock()
|
||||||
|
|
||||||
for _, cb := range subs {
|
for _, cb := range subs {
|
||||||
|
14
utils/utils.go
Normal file
14
utils/utils.go
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
package utils
|
||||||
|
|
||||||
|
import "strings"
|
||||||
|
|
||||||
|
func Matches(pattern, topic string) bool {
|
||||||
|
if pattern == "*" {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
if strings.HasSuffix(pattern, "/*") {
|
||||||
|
prefix := strings.TrimSuffix(pattern, "/*")
|
||||||
|
return strings.HasPrefix(topic, prefix+"/")
|
||||||
|
}
|
||||||
|
return pattern == topic
|
||||||
|
}
|
Reference in New Issue
Block a user