Publish packets.

This commit is contained in:
2022-02-27 02:10:21 -08:00
parent a3966fc28b
commit 579c17bb6a
11 changed files with 624 additions and 36 deletions

View File

@@ -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,