client.go 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. package fho_client
  2. import (
  3. "context"
  4. "encoding/json"
  5. "errors"
  6. "time"
  7. pb "git.mokkon.com/sainw/fho_proto"
  8. "google.golang.org/grpc"
  9. "google.golang.org/grpc/metadata"
  10. )
  11. type FhoClient struct {
  12. id string
  13. key string
  14. dataService pb.DataServiceClient
  15. }
  16. func NewClient(address string, id string, key string) (*FhoClient, error) {
  17. conn, err := grpc.Dial(address, grpc.WithInsecure(), grpc.WithBlock())
  18. if err != nil {
  19. return nil, err
  20. }
  21. return &FhoClient{id: id, key: key, dataService: pb.NewDataServiceClient(conn)}, nil
  22. }
  23. func (f *FhoClient) Query(object string) ([]map[string]interface{}, error) {
  24. ctx, cancel := context.WithTimeout(context.Background(), time.Second)
  25. md := metadata.Pairs("id", f.id, "key", f.key)
  26. ctx = metadata.NewOutgoingContext(ctx, md)
  27. defer cancel()
  28. r, err := f.dataService.GetData(ctx, &pb.DataRequest{Object: object})
  29. if err != nil {
  30. return nil, err
  31. }
  32. if r.ReplyStatus == pb.DataReply_ERROR {
  33. return nil, errors.New(r.ErrorMsg)
  34. }
  35. data := r.GetData()
  36. jsonMap := make([]map[string]interface{}, 0)
  37. err = json.Unmarshal([]byte(data), &jsonMap)
  38. if err != nil {
  39. return nil, err
  40. }
  41. return jsonMap, nil
  42. }