outputDispatcher

This commit is contained in:
2023-11-25 17:50:33 +01:00
parent c0939d7b28
commit 1297b4bd97
2 changed files with 23 additions and 7 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
udi

29
main.go
View File

@ -16,7 +16,8 @@ type Message struct {
payload []byte payload []byte
} }
var messageChannel chan Message var messageInputChannel chan Message = make(chan Message, 100)
var messageOutputChannel chan Message = make(chan Message, 100)
func onMessageReceived(client MQTT.Client, message MQTT.Message) { func onMessageReceived(client MQTT.Client, message MQTT.Message) {
@ -26,7 +27,7 @@ func onMessageReceived(client MQTT.Client, message MQTT.Message) {
payload: message.Payload(), payload: message.Payload(),
} }
select { select {
case messageChannel <- m: case messageInputChannel <- m:
{} {}
//log.Println("Message sent to channel") //log.Println("Message sent to channel")
default: default:
@ -57,11 +58,24 @@ func onConnect(client MQTT.Client) {
} }
} }
func dispatcher() { func inputDispatcher() {
for { for {
select { select {
case message := <- messageChannel: case message := <- messageInputChannel:
log.Printf("Message arrived in dispatcher, topic: %s, payload: %s\n", message.topic, message.payload) log.Printf("Message arrived in inputDispatcher, topic: %s, payload: %s\n", message.topic, message.payload)
}
}
}
func outputDispatcher(client MQTT.Client) {
for {
select {
case message := <- messageOutputChannel:
log.Printf("Message arrived in outputDispatcher, topic: %s, payload: %s\n", message.topic, message.payload)
if token := client.Publish(message.topic, 0, false, message.payload); token.Wait() && token.Error() != nil {
log.Printf("Unable to publish, error %s", token.Error())
}
log.Println("Successfully published")
} }
} }
} }
@ -124,12 +138,13 @@ func main() {
log.Println("UDI starting") log.Println("UDI starting")
messageChannel = make(chan Message, 100) go inputDispatcher()
go dispatcher()
mqttClient := startMqttClient() mqttClient := startMqttClient()
defer stopMqttClient(mqttClient) defer stopMqttClient(mqttClient)
go outputDispatcher(mqttClient)
log.Println("UDI running") log.Println("UDI running")
c := make(chan os.Signal, 1) c := make(chan os.Signal, 1)