Publish packets.
This commit is contained in:
@@ -2,6 +2,7 @@ package pubsub
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"sort"
|
||||
|
||||
telemetrypb "git.wntrmute.dev/kyle/sensenet/proto"
|
||||
@@ -10,6 +11,15 @@ import (
|
||||
"gopkg.in/zeromq/goczmq.v4"
|
||||
)
|
||||
|
||||
func readTopic(b []byte) string {
|
||||
size := int(b[1])
|
||||
return string(b[2 : size+2])
|
||||
}
|
||||
|
||||
func protoTopic(topic string) string {
|
||||
return fmt.Sprintf("\x0a%c%s", len(topic), topic)
|
||||
}
|
||||
|
||||
type Subscriber struct {
|
||||
addr string
|
||||
publisher string
|
||||
@@ -19,8 +29,10 @@ type Subscriber struct {
|
||||
|
||||
func NewSubscriber(addr, publisher string, topics ...string) (*Subscriber, error) {
|
||||
sub := &Subscriber{
|
||||
addr: addr,
|
||||
sock: goczmq.NewSock(goczmq.Pub),
|
||||
addr: addr,
|
||||
publisher: publisher,
|
||||
sock: goczmq.NewSock(goczmq.Sub),
|
||||
topics: map[string]bool{},
|
||||
}
|
||||
|
||||
err := sub.connect()
|
||||
@@ -29,8 +41,8 @@ func NewSubscriber(addr, publisher string, topics ...string) (*Subscriber, error
|
||||
}
|
||||
|
||||
sub.Conflate(1)
|
||||
for _, topic := range topics {
|
||||
sub.Subscribe(topic)
|
||||
for _, topicName := range topics {
|
||||
sub.Subscribe(topicName)
|
||||
}
|
||||
|
||||
return sub, nil
|
||||
@@ -41,6 +53,7 @@ func (sub *Subscriber) Conflate(n int) {
|
||||
}
|
||||
|
||||
func (sub *Subscriber) connect() error {
|
||||
log.Printf("subscriber dialing %s", sub.addr)
|
||||
return sub.sock.Connect(sub.addr)
|
||||
}
|
||||
|
||||
@@ -50,8 +63,7 @@ func (sub *Subscriber) Subscribe(topic string) {
|
||||
}
|
||||
|
||||
sub.topics[topic] = true
|
||||
topic = fmt.Sprintf("\x0a%d%s", len(topic), topic)
|
||||
sub.sock.SetSubscribe(topic)
|
||||
sub.sock.SetSubscribe(protoTopic(topic))
|
||||
}
|
||||
|
||||
func (sub *Subscriber) Topics() []string {
|
||||
@@ -95,7 +107,10 @@ func (sub *Subscriber) Receive() (*topic.Packet, error) {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
t := readTopic(data)
|
||||
|
||||
packet := &topic.Packet{
|
||||
Topic: t,
|
||||
Publisher: sub.publisher,
|
||||
Received: int64(pbPacket.Timestamp),
|
||||
Payload: pbPacket.Payload,
|
||||
|
||||
Reference in New Issue
Block a user