You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

63 regels
1.6 KiB

  1. package presenseredis
  2. import (
  3. "context"
  4. "encoding/json"
  5. "fmt"
  6. "github.com/AFASystems/presence/internal/pkg/model"
  7. "github.com/redis/go-redis/v9"
  8. )
  9. func LoadBeaconsList(client *redis.Client, ctx context.Context) map[string]model.Beacon {
  10. beaconsList, err := client.Get(ctx, "beaconsList").Result()
  11. beaconsMap := make(map[string]model.Beacon)
  12. if err == redis.Nil {
  13. fmt.Println("no beacons list, starting empty")
  14. } else if err != nil {
  15. fmt.Println("no connection to redis")
  16. } else {
  17. json.Unmarshal([]byte(beaconsList), &beaconsMap)
  18. }
  19. return beaconsMap
  20. }
  21. func LoadLatestList(client *redis.Client, ctx context.Context) map[string]model.Beacon {
  22. latestList, err := client.Get(ctx, "latestList").Result()
  23. latestMap := make(map[string]model.Beacon)
  24. if err == redis.Nil {
  25. fmt.Println("no beacons list, starting empty")
  26. } else if err != nil {
  27. fmt.Println("no connection to redis")
  28. } else {
  29. json.Unmarshal([]byte(latestList), &latestMap)
  30. }
  31. return latestMap
  32. }
  33. func SaveBeaconsList(appCtx *model.AppContext, client *redis.Client, ctx context.Context) {
  34. appCtx.Beacons.Lock.Lock()
  35. data, _ := json.Marshal(appCtx.Beacons.Beacons)
  36. appCtx.Beacons.Lock.Unlock()
  37. err := client.Set(ctx, "beaconsList", data, 0).Err()
  38. if err != nil {
  39. fmt.Println("error in saving to redis: ", err)
  40. }
  41. }
  42. func SaveLatestList(appCtx *model.AppContext, client *redis.Client, ctx context.Context) {
  43. appCtx.LatestList.Lock.Lock()
  44. data, _ := json.Marshal(appCtx.LatestList.LatestList)
  45. appCtx.LatestList.Lock.Unlock()
  46. err := client.Set(ctx, "latestList", data, 0).Err()
  47. if err != nil {
  48. fmt.Println("error in saving to redis: ", err)
  49. }
  50. }