summaryrefslogtreecommitdiff
path: root/vendor/github.com/eclipse/paho.mqtt.golang/memstore.go
diff options
context:
space:
mode:
authorxengineering <me@xengineering.eu>2025-12-20 12:09:44 +0100
committerxengineering <me@xengineering.eu>2025-12-20 12:09:44 +0100
commitb0fcc3e7590b9f3486f1edf8c2b004d035e38652 (patch)
tree81c123444d97f311e3b45a1881c9d2ff4ad2581b /vendor/github.com/eclipse/paho.mqtt.golang/memstore.go
parentf9fac85222892e45554a2cc49dd93455a374ef68 (diff)
downloadsia-server-b0fcc3e7590b9f3486f1edf8c2b004d035e38652.tar
sia-server-b0fcc3e7590b9f3486f1edf8c2b004d035e38652.tar.zst
sia-server-b0fcc3e7590b9f3486f1edf8c2b004d035e38652.zip
Add github.com/eclipse/paho.mqtt.golang
This dependency is required to use MQTT with Go.
Diffstat (limited to 'vendor/github.com/eclipse/paho.mqtt.golang/memstore.go')
-rw-r--r--vendor/github.com/eclipse/paho.mqtt.golang/memstore.go142
1 files changed, 142 insertions, 0 deletions
diff --git a/vendor/github.com/eclipse/paho.mqtt.golang/memstore.go b/vendor/github.com/eclipse/paho.mqtt.golang/memstore.go
new file mode 100644
index 0000000..e9f8088
--- /dev/null
+++ b/vendor/github.com/eclipse/paho.mqtt.golang/memstore.go
@@ -0,0 +1,142 @@
+/*
+ * Copyright (c) 2021 IBM Corp and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * and Eclipse Distribution License v1.0 which accompany this distribution.
+ *
+ * The Eclipse Public License is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ * and the Eclipse Distribution License is available at
+ * http://www.eclipse.org/org/documents/edl-v10.php.
+ *
+ * Contributors:
+ * Seth Hoenig
+ * Allan Stockdill-Mander
+ * Mike Robertson
+ */
+
+package mqtt
+
+import (
+ "sync"
+
+ "github.com/eclipse/paho.mqtt.golang/packets"
+)
+
+// MemoryStore implements the store interface to provide a "persistence"
+// mechanism wholly stored in memory. This is only useful for
+// as long as the client instance exists.
+type MemoryStore struct {
+ sync.RWMutex
+ messages map[string]packets.ControlPacket
+ opened bool
+}
+
+// NewMemoryStore returns a pointer to a new instance of
+// MemoryStore, the instance is not initialized and ready to
+// use until Open() has been called on it.
+func NewMemoryStore() *MemoryStore {
+ store := &MemoryStore{
+ messages: make(map[string]packets.ControlPacket),
+ opened: false,
+ }
+ return store
+}
+
+// Open initializes a MemoryStore instance.
+func (store *MemoryStore) Open() {
+ store.Lock()
+ defer store.Unlock()
+ store.opened = true
+ DEBUG.Println(STR, "memorystore initialized")
+}
+
+// Put takes a key and a pointer to a Message and stores the
+// message.
+func (store *MemoryStore) Put(key string, message packets.ControlPacket) {
+ store.Lock()
+ defer store.Unlock()
+ if !store.opened {
+ ERROR.Println(STR, "Trying to use memory store, but not open")
+ return
+ }
+ store.messages[key] = message
+}
+
+// Get takes a key and looks in the store for a matching Message
+// returning either the Message pointer or nil.
+func (store *MemoryStore) Get(key string) packets.ControlPacket {
+ store.RLock()
+ defer store.RUnlock()
+ if !store.opened {
+ ERROR.Println(STR, "Trying to use memory store, but not open")
+ return nil
+ }
+ mid := mIDFromKey(key)
+ m := store.messages[key]
+ if m == nil {
+ CRITICAL.Println(STR, "memorystore get: message", mid, "not found")
+ } else {
+ DEBUG.Println(STR, "memorystore get: message", mid, "found")
+ }
+ return m
+}
+
+// All returns a slice of strings containing all the keys currently
+// in the MemoryStore.
+func (store *MemoryStore) All() []string {
+ store.RLock()
+ defer store.RUnlock()
+ if !store.opened {
+ ERROR.Println(STR, "Trying to use memory store, but not open")
+ return nil
+ }
+ var keys []string
+ for k := range store.messages {
+ keys = append(keys, k)
+ }
+ return keys
+}
+
+// Del takes a key, searches the MemoryStore and if the key is found
+// deletes the Message pointer associated with it.
+func (store *MemoryStore) Del(key string) {
+ store.Lock()
+ defer store.Unlock()
+ if !store.opened {
+ ERROR.Println(STR, "Trying to use memory store, but not open")
+ return
+ }
+ mid := mIDFromKey(key)
+ m := store.messages[key]
+ if m == nil {
+ WARN.Println(STR, "memorystore del: message", mid, "not found")
+ } else {
+ delete(store.messages, key)
+ DEBUG.Println(STR, "memorystore del: message", mid, "was deleted")
+ }
+}
+
+// Close will disallow modifications to the state of the store.
+func (store *MemoryStore) Close() {
+ store.Lock()
+ defer store.Unlock()
+ if !store.opened {
+ ERROR.Println(STR, "Trying to close memory store, but not open")
+ return
+ }
+ store.opened = false
+ DEBUG.Println(STR, "memorystore closed")
+}
+
+// Reset eliminates all persisted message data in the store.
+func (store *MemoryStore) Reset() {
+ store.Lock()
+ defer store.Unlock()
+ if !store.opened {
+ ERROR.Println(STR, "Trying to reset memory store, but not open")
+ }
+ store.messages = make(map[string]packets.ControlPacket)
+ WARN.Println(STR, "memorystore wiped")
+}