fayec/internal/store/name.go
Marcelo Pires 6e0272acb9 faye protocol always send and ACK for published messages.
remove OnPublishResponse and make publish a blocking function until we receive ACK from server
2018-09-24 16:48:38 +02:00

41 lines
818 B
Go

package store
import (
"strings"
)
type SubscriptionName struct {
n string
patterns []string
}
func NewName(name string) *SubscriptionName {
var n SubscriptionName
n.n = name
//expand once
n.patterns = n.expand()
return &n
}
func (n *SubscriptionName) Match(channel string) bool {
for i := range n.patterns {
if n.patterns[i] == channel {
return true
}
}
return false
}
func (n *SubscriptionName) expand() []string {
segments := strings.Split(n.n, "/")
num_segments := len(segments)
patterns := make([]string, num_segments+1)
patterns[0] = "/**"
for i := 1; i < len(segments); i = i + 2 {
patterns[i] = strings.Join(segments[:i+1], "/") + "/**"
}
patterns[len(patterns)-2] = strings.Join(segments[:num_segments-1], "/") + "/*"
patterns[len(patterns)-1] = n.n
return patterns
}