64 lines
1.2 KiB
Go
64 lines
1.2 KiB
Go
package vstp
|
|
|
|
import (
|
|
"time"
|
|
|
|
"git.fjla.uk/owlboard/timetable-mgr/log"
|
|
"git.fjla.uk/owlboard/timetable-mgr/messaging"
|
|
"github.com/go-stomp/stomp/v3"
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
func Subscribe() {
|
|
var sub *stomp.Subscription
|
|
var err error
|
|
retryCount := 0
|
|
maxRetries := 5
|
|
|
|
for retryCount < maxRetries {
|
|
sub, err = messaging.Client.Subscribe("/topic/VSTP_ALL", stomp.AckAuto)
|
|
if err != nil {
|
|
log.Warn("Unable to start subscription", zap.Error(err))
|
|
time.Sleep(10 * time.Second)
|
|
retryCount++
|
|
continue
|
|
}
|
|
break
|
|
}
|
|
|
|
if sub == nil {
|
|
log.Fatal("Failed to subscribe to VSTP topic", zap.Int("attempts", maxRetries))
|
|
}
|
|
|
|
log.Info("Subscription to VSTP topic successful, listening")
|
|
|
|
go func() {
|
|
for {
|
|
func() {
|
|
defer func() {
|
|
if r := recover(); r != nil {
|
|
log.Warn("VSTP Message Handler Stopped, waiting for recovery")
|
|
time.Sleep(time.Second * 10)
|
|
}
|
|
}()
|
|
log.Info("VSTP Message handler started")
|
|
for {
|
|
msg := <-sub.C
|
|
if msg.Err != nil {
|
|
log.Error("VSTP Message Error", zap.Error(msg.Err))
|
|
} else {
|
|
if msg != nil {
|
|
log.Info("VSTP Message Received")
|
|
handle(msg)
|
|
} else {
|
|
log.Info("VSTP Message Empty")
|
|
}
|
|
}
|
|
}
|
|
}()
|
|
}
|
|
}()
|
|
|
|
select {}
|
|
}
|