added RPC/IPC support

This commit is contained in:
Bas van Kervel
2015-06-08 10:41:04 +02:00
committed by Bas van Kervel
parent 2f55a1d798
commit 8ebf2d8fad
6 changed files with 887 additions and 1 deletions

View File

@ -1,6 +1,10 @@
package shared
import "encoding/json"
import (
"encoding/json"
"github.com/ethereum/go-ethereum/logger"
"github.com/ethereum/go-ethereum/logger/glog"
)
// RPC request
type Request struct {
@ -36,3 +40,24 @@ type ErrorObject struct {
Message string `json:"message"`
// Data interface{} `json:"data"`
}
func NewRpcResponse(id interface{}, jsonrpcver string, reply interface{}, err error) *interface{} {
var response interface{}
switch err.(type) {
case nil:
response = &SuccessResponse{Jsonrpc: jsonrpcver, Id: id, Result: reply}
case *NotImplementedError:
jsonerr := &ErrorObject{-32601, err.Error()}
response = &ErrorResponse{Jsonrpc: jsonrpcver, Id: id, Error: jsonerr}
case *DecodeParamError, *InsufficientParamsError, *ValidationError, *InvalidTypeError:
jsonerr := &ErrorObject{-32602, err.Error()}
response = &ErrorResponse{Jsonrpc: jsonrpcver, Id: id, Error: jsonerr}
default:
jsonerr := &ErrorObject{-32603, err.Error()}
response = &ErrorResponse{Jsonrpc: jsonrpcver, Id: id, Error: jsonerr}
}
glog.V(logger.Detail).Infof("Generated response: %T %s", response, response)
return &response
}