package main import ( "fmt" "log" mqtt "github.com/eclipse/paho.mqtt.golang" ) type States map[string]bool type Cache struct { Client mqtt.Client States map[string]bool } func NewCache(client mqtt.Client) Cache { var cache Cache cache.Client = client cache.States = make(States) return cache } func (c *Cache) Update(states States) { if c.States == nil { log.Fatal("Cache states is nil.") } if states == nil { log.Fatal("Given states is nil.") } for id, state := range states { cached, known := c.States[id] if !known || cached != state { topic := fmt.Sprintf("%s/contact/%s/state", TOPIC_PREFIX, id) payload := []byte(fmt.Sprintf("%t", state)) _ = c.Client.Publish(topic, QOS, RETAINED, payload) } c.States[id] = state } }