diff --git a/Makefile b/Makefile index 3743c7289..f79cfeed4 100644 --- a/Makefile +++ b/Makefile @@ -5,10 +5,12 @@ all: build build: get_deps go build -o build/tendermint github.com/tendermint/tendermint/cmd/tendermint go build -o build/barak github.com/tendermint/tendermint/cmd/barak + go build -o build/debora github.com/tendermint/tendermint/cmd/debora build_race: get_deps go build -race -o build/tendermint github.com/tendermint/tendermint/cmd/tendermint go build -race -o build/barak github.com/tendermint/tendermint/cmd/barak + go build -race -o build/debora github.com/tendermint/tendermint/cmd/debora test: build go test github.com/tendermint/tendermint/... diff --git a/binary/binary.go b/binary/binary.go index de1b3b260..1573947e9 100644 --- a/binary/binary.go +++ b/binary/binary.go @@ -34,10 +34,10 @@ func ReadJSON(o interface{}, bytes []byte, err *error) interface{} { return o } - return ReadJSONFromObject(o, object, err) + return ReadJSONObject(o, object, err) } -func ReadJSONFromObject(o interface{}, object interface{}, err *error) interface{} { +func ReadJSONObject(o interface{}, object interface{}, err *error) interface{} { rv, rt := reflect.ValueOf(o), reflect.TypeOf(o) if rv.Kind() == reflect.Ptr { readReflectJSON(rv.Elem(), rt.Elem(), object, err) diff --git a/binary/reflect.go b/binary/reflect.go index b82728423..e1fd3c24e 100644 --- a/binary/reflect.go +++ b/binary/reflect.go @@ -603,7 +603,7 @@ func readReflectJSON(rv reflect.Value, rt reflect.Type, o interface{}, err *erro // Read length oSlice, ok := o.([]interface{}) if !ok { - *err = errors.New(Fmt("Expected array but got type %v", reflect.TypeOf(o))) + *err = errors.New(Fmt("Expected array of %v but got type %v", rt, reflect.TypeOf(o))) return } length := len(oSlice) diff --git a/cmd/barak/main.go b/cmd/barak/main.go index d789c1705..a7bf3a2ce 100644 --- a/cmd/barak/main.go +++ b/cmd/barak/main.go @@ -16,6 +16,7 @@ import ( acm "github.com/tendermint/tendermint/account" "github.com/tendermint/tendermint/binary" + . "github.com/tendermint/tendermint/cmd/barak/types" . "github.com/tendermint/tendermint/common" pcm "github.com/tendermint/tendermint/process" "github.com/tendermint/tendermint/rpc" @@ -169,9 +170,6 @@ type CommandRunProcess struct { func (_ CommandRunProcess) TypeByte() byte { return typeByteRunProcess } -type ResponseRunProcess struct { -} - func RunProcess(wait bool, label string, execPath string, args []string, input string) (*ResponseRunProcess, error) { barak.mtx.Lock() @@ -204,9 +202,6 @@ type CommandStopProcess struct { func (_ CommandStopProcess) TypeByte() byte { return typeByteStopProcess } -type ResponseStopProcess struct { -} - func StopProcess(label string, kill bool) (*ResponseStopProcess, error) { barak.mtx.Lock() proc := barak.processes[label] @@ -226,10 +221,6 @@ type CommandListProcesses struct{} func (_ CommandListProcesses) TypeByte() byte { return typeByteListProcesses } -type ResponseListProcesses struct { - Processes []*pcm.Process -} - func ListProcesses() (*ResponseListProcesses, error) { var procs = []*pcm.Process{} barak.mtx.Lock() diff --git a/cmd/barak/types/responses.go b/cmd/barak/types/responses.go new file mode 100644 index 000000000..74b4b28cd --- /dev/null +++ b/cmd/barak/types/responses.go @@ -0,0 +1,15 @@ +package types + +import ( + pcm "github.com/tendermint/tendermint/process" +) + +type ResponseRunProcess struct { +} + +type ResponseStopProcess struct { +} + +type ResponseListProcesses struct { + Processes []*pcm.Process +} diff --git a/cmd/debora/log.go b/cmd/debora/log.go new file mode 100644 index 000000000..c04723782 --- /dev/null +++ b/cmd/debora/log.go @@ -0,0 +1,7 @@ +package main + +import ( + "github.com/tendermint/tendermint/logger" +) + +var log = logger.New("module", "main") diff --git a/cmd/debora/main.go b/cmd/debora/main.go new file mode 100644 index 000000000..1c265d62f --- /dev/null +++ b/cmd/debora/main.go @@ -0,0 +1,16 @@ +package main + +import ( + "fmt" + btypes "github.com/tendermint/tendermint/cmd/barak/types" + . "github.com/tendermint/tendermint/common" + "github.com/tendermint/tendermint/rpc" + // ctypes "github.com/tendermint/tendermint/rpc/core/types" +) + +func main() { + response := []btypes.ResponseListProcesses{} + response2, err := rpc.Call("http://127.0.0.1:8082", "list_processes", Arr(), &response) + fmt.Printf("%v\n", response) + fmt.Printf("%v (error: %v)\n", response2, err) +} diff --git a/common/array.go b/common/array.go new file mode 100644 index 000000000..adedc42be --- /dev/null +++ b/common/array.go @@ -0,0 +1,5 @@ +package common + +func Arr(items ...interface{}) []interface{} { + return items +} diff --git a/rpc/client.go b/rpc/client.go new file mode 100644 index 000000000..e0c1ab725 --- /dev/null +++ b/rpc/client.go @@ -0,0 +1,47 @@ +package rpc + +import ( + "bytes" + "encoding/json" + "errors" + "io/ioutil" + "net/http" + + "github.com/tendermint/tendermint/binary" +) + +func Call(remote string, method string, params []interface{}, dest interface{}) (interface{}, error) { + // Make request and get responseBytes + request := RPCRequest{ + JSONRPC: "2.0", + Method: method, + Params: params, + Id: 0, + } + requestBytes := binary.JSONBytes(request) + requestBuf := bytes.NewBuffer(requestBytes) + httpResponse, err := http.Post(remote, "text/json", requestBuf) + if err != nil { + return dest, err + } + defer httpResponse.Body.Close() + responseBytes, err := ioutil.ReadAll(httpResponse.Body) + if err != nil { + return dest, err + } + + // Parse response into JSONResponse + response := RPCResponse{} + err = json.Unmarshal(responseBytes, &response) + if err != nil { + return dest, err + } + // Parse response into dest + resultJSONObject := response.Result + errorStr := response.Error + if errorStr != "" { + return dest, errors.New(errorStr) + } + dest = binary.ReadJSONObject(dest, resultJSONObject, &err) + return dest, err +} diff --git a/rpc/handlers.go b/rpc/handlers.go index fc60cb4a1..9bc24c889 100644 --- a/rpc/handlers.go +++ b/rpc/handlers.go @@ -128,7 +128,7 @@ func jsonParamsToArgs(rpcFunc *RPCFunc, params []interface{}) ([]reflect.Value, func _jsonObjectToArg(ty reflect.Type, object interface{}) (reflect.Value, error) { var err error v := reflect.New(ty) - binary.ReadJSONFromObject(v.Interface(), object, &err) + binary.ReadJSONObject(v.Interface(), object, &err) if err != nil { return v, err }