listener.go 827 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. package client
  2. import (
  3. "io"
  4. "log"
  5. "time"
  6. )
  7. func listen(c *FhoClient, object string, lastUpdatedTime time.Time, fn func(*[]map[string]interface{})) error {
  8. snap, err := c.QuerySnapshot(object, lastUpdatedTime)
  9. if err != nil {
  10. log.Println("listen error:", err.Error())
  11. return err
  12. }
  13. for {
  14. data, err := snap.Next()
  15. if err == io.EOF {
  16. log.Println("Error EOF")
  17. break
  18. }
  19. if err != nil {
  20. log.Println("Error:", err.Error())
  21. break
  22. }
  23. fn(data)
  24. }
  25. return nil
  26. }
  27. func ListenOnProducts(c *FhoClient, lastUpdatedTime time.Time, fn func([]*Product)) error {
  28. listen(c, "products", lastUpdatedTime, func(data *[]map[string]interface{}) {
  29. var products []*Product
  30. for _, rec := range *data {
  31. _product := ProductFromMap(rec)
  32. products = append(products, _product)
  33. }
  34. fn(products)
  35. })
  36. return nil
  37. }