package fho_client import ( "context" "encoding/json" "errors" "time" pb "git.mokkon.com/sainw/fho_proto" "google.golang.org/grpc" "google.golang.org/grpc/metadata" ) type FhoClient struct { id string key string dataService pb.DataServiceClient } func NewClient(address string, id string, key string) (*FhoClient, error) { conn, err := grpc.Dial(address, grpc.WithInsecure(), grpc.WithBlock()) if err != nil { return nil, err } return &FhoClient{id: id, key: key, dataService: pb.NewDataServiceClient(conn)}, nil } func (f *FhoClient) Query(object string) ([]map[string]interface{}, error) { ctx, cancel := context.WithTimeout(context.Background(), time.Second) md := metadata.Pairs("id", f.id, "key", f.key) ctx = metadata.NewOutgoingContext(ctx, md) defer cancel() r, err := f.dataService.GetData(ctx, &pb.DataRequest{Object: object}) if err != nil { return nil, err } if r.ReplyStatus == pb.DataReply_ERROR { return nil, errors.New(r.ErrorMsg) } data := r.GetData() jsonMap := make([]map[string]interface{}, 0) err = json.Unmarshal([]byte(data), &jsonMap) if err != nil { return nil, err } return jsonMap, nil }