+1
-1
example/main.go
+1
-1
example/main.go
+3
-11
server/server.go
+3
-11
server/server.go
···
75
75
From StartAtType = 2
76
76
)
77
77
78
-
type Store interface {
79
-
Write(msg MessageToSend) error
80
-
ReadFrom(offset int, handleFunc func(msg MessageToSend)) error
81
-
}
82
-
83
78
// Server accepts subscribe and publish connections and passes messages around
84
79
type Server struct {
85
80
Addr string
···
222
217
}
223
218
224
219
var topics []string
225
-
fmt.Println(string(buf))
226
220
err = json.Unmarshal(buf, &topics)
227
221
if err != nil {
228
222
slog.Error("failed to unmarshal subscibers topic data", "error", err, "peer", peer.Addr())
···
316
310
func (s *Server) handlePublish(peer *peer.Peer) {
317
311
slog.Info("handling publisher", "peer", peer.Addr())
318
312
for {
319
-
var message *MessageToSend
320
-
321
313
op := func(conn net.Conn) error {
322
314
dataLen, err := dataLength(conn)
323
315
if err != nil {
···
365
357
return nil
366
358
}
367
359
368
-
message = &MessageToSend{
360
+
message := MessageToSend{
369
361
topic: topicStr,
370
362
data: dataBuf,
371
363
}
···
376
368
s.topics[message.topic] = topic
377
369
}
378
370
379
-
err = topic.sendMessageToSubscribers(*message)
371
+
err = topic.sendMessageToSubscribers(message)
380
372
if err != nil {
381
373
slog.Error("failed to send message to subscribers", "error", err, "peer", peer.Addr())
382
374
writeStatus(Error, "failed to send message to subscribers", conn)
···
406
398
t = newTopic(topicName)
407
399
}
408
400
409
-
t.subscriptions[peer.Addr()] = newSubscriber(peer, topicName, s.ackDelay, s.ackTimeout, t.messageStore, startAt)
401
+
t.subscriptions[peer.Addr()] = newSubscriber(peer, t, s.ackDelay, s.ackTimeout, startAt)
410
402
411
403
s.topics[topicName] = t
412
404
}
+3
-3
server/subscriber.go
+3
-3
server/subscriber.go
···
29
29
return message{data: data, deliveryCount: 1}
30
30
}
31
31
32
-
func newSubscriber(peer *peer.Peer, topic string, ackDelay, ackTimeout time.Duration, messageStore Store, startAt int) *subscriber {
32
+
func newSubscriber(peer *peer.Peer, topic *topic, ackDelay, ackTimeout time.Duration, startAt int) *subscriber {
33
33
s := &subscriber{
34
34
peer: peer,
35
-
topic: topic,
35
+
topic: topic.name,
36
36
messages: make(chan message),
37
37
ackDelay: ackDelay,
38
38
ackTimeout: ackTimeout,
···
44
44
offset := startAt
45
45
46
46
go func() {
47
-
err := messageStore.ReadFrom(offset, func(msg MessageToSend) {
47
+
err := topic.messageStore.ReadFrom(offset, func(msg MessageToSend) {
48
48
s.messages <- newMessage(msg.data)
49
49
})
50
50
if err != nil {