summaryrefslogtreecommitdiff
path: root/cache.go
diff options
context:
space:
mode:
Diffstat (limited to 'cache.go')
-rw-r--r--cache.go44
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
+ }
+}