Compare commits
1 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
e99fd0710b |
@@ -5,6 +5,7 @@ import (
|
||||
"sync"
|
||||
|
||||
"gitea.tecamino.com/paadi/pubSub/models"
|
||||
"gitea.tecamino.com/paadi/pubSub/utils"
|
||||
)
|
||||
|
||||
// Pubsub implements a simple topic-based publish/subscribe system
|
||||
@@ -43,10 +44,14 @@ func (ps *Pubsub) worker() {
|
||||
defer ps.wg.Done()
|
||||
for job := range ps.jobQueue {
|
||||
ps.mu.RLock()
|
||||
subs := make([]func(any), 0, len(ps.subs[job.Topic]))
|
||||
for _, cb := range ps.subs[job.Topic] {
|
||||
var subs []func(any)
|
||||
for pattern, callbacks := range ps.subs {
|
||||
if utils.Matches(pattern, job.Topic) {
|
||||
for _, cb := range callbacks {
|
||||
subs = append(subs, cb)
|
||||
}
|
||||
}
|
||||
}
|
||||
ps.mu.RUnlock()
|
||||
|
||||
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