diff options
Diffstat (limited to 'cache.go')
| -rw-r--r-- | cache.go | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/cache.go b/cache.go new file mode 100644 index 0000000..081621d --- /dev/null +++ b/cache.go @@ -0,0 +1,44 @@ +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 + } +} |
