package main import ( "fmt" "io" "time" fho "git.mokkon.com/sainw/fho_forward/client" ) const ( // address = "fhogrpc-test.seinmaungengineering.com:7091" address = "localhost:7090" ) type Product struct { ID string Name string Color string } type RegionProduct struct { ProductID string Name string Color string Variant float32 } func ProductFromMap(m map[string]interface{}) *Product { return &Product{ID: fho.ToString(m["id"]), Name: fho.ToString(m["name"]), Color: fho.ToString(m["color"])} } func RegionProductFromMap(m map[string]interface{}) *RegionProduct { return &RegionProduct{ProductID: fho.ToString(m["product_id"]), Name: fho.ToString(m["name"]), Color: fho.ToString(m["color"]), Variant: fho.ToFloat32(m["variant"])} } func main() { // c, err := fho.NewClient(address, "da910506-4bdc-4dc2-9481-58a4e3e3c8bf", "1adf4633-7e9e-4bd0-b512-7b087d9c9719") client, err := fho.NewClient(address, "bd38e9ac-210a-4e85-865c-401270c07220", "8c95f7fa-3071-427d-a27a-6f96e1d9590e") if err != nil { panic(err) } go listen(client) // query(client) // for { // time.Sleep(time.Second * 5) // // query(client) // } select {} } func listen(client *fho.FhoClient) error { snap, err := client.QuerySnapshot("products", time.Now().Add(time.Hour*-114)) if err != nil { fmt.Println("listen error:", err.Error()) return err } for { data, err := snap.Next() if err == io.EOF { print("Error EOF") break } if err != nil { print("Error:", err.Error()) break } for _, rec := range data { _product := ProductFromMap(rec) fmt.Printf("Listener========================\n") printProduct(_product) } } return nil } func query(client *fho.FhoClient) error { data, err := client.Query("region_product_variants", time.Now().Add(time.Hour*-114)) if err != nil { fmt.Println("query error:", err.Error()) return err } for _, rec := range data { _product := RegionProductFromMap(rec) printRegionProduct(_product) } return nil } func printProduct(p *Product) { fmt.Printf("ID : %v\n", p.ID) fmt.Printf("Name : %v\n", p.Name) fmt.Printf("Color : %v\n", p.Color) } func printRegionProduct(p *RegionProduct) { fmt.Printf("Product ID : %v\n", p.ProductID) fmt.Printf("Name : %v\n", p.Name) fmt.Printf("Color : %v\n", p.Color) fmt.Printf("Variant : %v\n", p.Variant) } func dumpMap(m []map[string]interface{}) { for _, r := range m { for k, v := range r { fmt.Printf("%v : %v\n", k, v) } fmt.Printf("-----------------\n") } }