OSDN Git Service

Hulk did something
[bytom/vapor.git] / util / util.go
1 package util
2
3 import (
4         "context"
5
6         jww "github.com/spf13/jwalterweatherman"
7         "github.com/vapor/api"
8         "github.com/vapor/blockchain/rpc"
9         "github.com/vapor/env"
10 )
11
12 const (
13         // Success indicates the rpc calling is successful.
14         Success = iota
15         // ErrLocalExe indicates error occurs before the rpc calling.
16         ErrLocalExe
17         // ErrConnect indicates error occurs connecting to the bytomd, e.g.,
18         // bytomd can't parse the received arguments.
19         ErrConnect
20         // ErrLocalParse indicates error occurs locally when parsing the response.
21         ErrLocalParse
22         // ErrRemote indicates error occurs in bytomd.
23         ErrRemote
24 )
25
26 var (
27         coreURL = env.String("BYTOM_URL", "http://127.0.0.1:9888")
28 )
29
30 // Wraper rpc's client
31 func MustRPCClient() *rpc.Client {
32         env.Parse()
33         return &rpc.Client{BaseURL: *coreURL}
34 }
35
36 // Wrapper rpc call api.
37 func ClientCall(path string, req ...interface{}) (interface{}, int) {
38
39         var response = &api.Response{}
40         var request interface{}
41
42         if req != nil {
43                 request = req[0]
44         }
45
46         client := MustRPCClient()
47         client.Call(context.Background(), path, request, response)
48
49         switch response.Status {
50         case api.FAIL:
51                 jww.ERROR.Println(response.Msg)
52                 return nil, ErrRemote
53         case "":
54                 jww.ERROR.Println("Unable to connect to the bytomd")
55                 return nil, ErrConnect
56         }
57
58         return response.Data, Success
59 }