Initial commit.
This commit is contained in:
87
nats/exported.go
Normal file
87
nats/exported.go
Normal file
@@ -0,0 +1,87 @@
|
||||
package nats
|
||||
|
||||
import (
|
||||
// stdlib
|
||||
"log"
|
||||
"sync"
|
||||
|
||||
// local
|
||||
"github.com/pztrn/ffmpeger/config"
|
||||
|
||||
// other
|
||||
"github.com/nats-io/nats.go"
|
||||
)
|
||||
|
||||
const (
|
||||
Topic = "ffmpeger.v1"
|
||||
)
|
||||
|
||||
var (
|
||||
natsConn *nats.Conn
|
||||
natsSubscription *nats.Subscription
|
||||
|
||||
// Handlers.
|
||||
handlers []*Handler
|
||||
handlersMutex sync.Mutex
|
||||
)
|
||||
|
||||
// AddHandler adds handler for received NATS messages.
|
||||
func AddHandler(hndl *Handler) {
|
||||
handlersMutex.Lock()
|
||||
handlers = append(handlers, hndl)
|
||||
handlersMutex.Unlock()
|
||||
}
|
||||
|
||||
// Initialize initializes package.
|
||||
func Initialize() {
|
||||
log.Println("Initializing NATS handler...")
|
||||
|
||||
handlers = make([]*Handler, 0, 8)
|
||||
}
|
||||
|
||||
// Handler for NATS messages.
|
||||
func messageHandler(msg *nats.Msg) {
|
||||
log.Println("Received message:", string(msg.Data))
|
||||
|
||||
handlersMutex.Lock()
|
||||
for _, hndl := range handlers {
|
||||
hndl.Func(msg.Data)
|
||||
}
|
||||
handlersMutex.Unlock()
|
||||
}
|
||||
|
||||
// Shutdown unsubscribes from topic and disconnects from NATS.
|
||||
func Shutdown() {
|
||||
log.Println("Unsuscribing from NATS topic...")
|
||||
err := natsSubscription.Unsubscribe()
|
||||
if err != nil {
|
||||
log.Println("ERROR unsubscribing", Topic, "topic:", err.Error())
|
||||
}
|
||||
|
||||
if natsConn != nil {
|
||||
log.Println("Closing connection to NATS...")
|
||||
natsConn.Close()
|
||||
} else {
|
||||
log.Println("Connection to NATS wasn't established")
|
||||
}
|
||||
}
|
||||
|
||||
// StartListening connects to NATS and starts to listen for messages.
|
||||
func StartListening() {
|
||||
nc, err := nats.Connect(config.Cfg.NATS.ConnectionString)
|
||||
if err != nil {
|
||||
log.Fatalln("Failed to connect to NATS:", err.Error())
|
||||
}
|
||||
|
||||
natsConn = nc
|
||||
log.Println("NATS connection established")
|
||||
|
||||
// Beware - if ffmpeger will be launched more than once and subscribed
|
||||
// to same topic (which is hardcoded here) then ALL instances of
|
||||
// ffmpeger will receive this message!
|
||||
sub, err1 := nc.Subscribe(Topic, messageHandler)
|
||||
if err1 != nil {
|
||||
log.Fatalln("Failed to subscribe to", Topic, "topic:", err1.Error())
|
||||
}
|
||||
natsSubscription = sub
|
||||
}
|
6
nats/handler.go
Normal file
6
nats/handler.go
Normal file
@@ -0,0 +1,6 @@
|
||||
package nats
|
||||
|
||||
type Handler struct {
|
||||
Name string
|
||||
Func func(data []byte)
|
||||
}
|
Reference in New Issue
Block a user