mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-19 02:12:23 +00:00
Merge 99d787ec0e into 93c0f1715d
This commit is contained in:
commit
d9cd0ea147
1 changed files with 11 additions and 3 deletions
|
|
@ -77,7 +77,7 @@ type BatchElem struct {
|
||||||
Error error
|
Error error
|
||||||
}
|
}
|
||||||
|
|
||||||
// A value of this type can a JSON-RPC request, notification, successful response or
|
// A value of this type can be a JSON-RPC request, notification, successful response or
|
||||||
// error response. Which one it is depends on the fields.
|
// error response. Which one it is depends on the fields.
|
||||||
type jsonrpcMessage struct {
|
type jsonrpcMessage struct {
|
||||||
Version string `json:"jsonrpc"`
|
Version string `json:"jsonrpc"`
|
||||||
|
|
@ -88,18 +88,22 @@ type jsonrpcMessage struct {
|
||||||
Result json.RawMessage `json:"result,omitempty"`
|
Result json.RawMessage `json:"result,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// The message is a notification if its ID is nill and Method is non-empty.
|
||||||
func (msg *jsonrpcMessage) isNotification() bool {
|
func (msg *jsonrpcMessage) isNotification() bool {
|
||||||
return msg.ID == nil && msg.Method != ""
|
return msg.ID == nil && msg.Method != ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// The message is a JSON-RPC 2.0 response if (1)it has a valid ID (2) empty in Mehod and Params field.
|
||||||
func (msg *jsonrpcMessage) isResponse() bool {
|
func (msg *jsonrpcMessage) isResponse() bool {
|
||||||
return msg.hasValidID() && msg.Method == "" && len(msg.Params) == 0
|
return msg.hasValidID() && msg.Method == "" && len(msg.Params) == 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// The message has a valid ID if
|
||||||
func (msg *jsonrpcMessage) hasValidID() bool {
|
func (msg *jsonrpcMessage) hasValidID() bool {
|
||||||
return len(msg.ID) > 0 && msg.ID[0] != '{' && msg.ID[0] != '['
|
return len(msg.ID) > 0 && msg.ID[0] != '{' && msg.ID[0] != '['
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// String converts a message into JSON encoding format.
|
||||||
func (msg *jsonrpcMessage) String() string {
|
func (msg *jsonrpcMessage) String() string {
|
||||||
b, _ := json.Marshal(msg)
|
b, _ := json.Marshal(msg)
|
||||||
return string(b)
|
return string(b)
|
||||||
|
|
@ -135,6 +139,8 @@ type requestOp struct {
|
||||||
sub *ClientSubscription // only set for EthSubscribe requests
|
sub *ClientSubscription // only set for EthSubscribe requests
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// wait will wait until either the context is cancelled and returns a response,
|
||||||
|
// or return a JSON-RPC 2.0 message.
|
||||||
func (op *requestOp) wait(ctx context.Context) (*jsonrpcMessage, error) {
|
func (op *requestOp) wait(ctx context.Context) (*jsonrpcMessage, error) {
|
||||||
select {
|
select {
|
||||||
case <-ctx.Done():
|
case <-ctx.Done():
|
||||||
|
|
@ -220,6 +226,7 @@ func DialStdIO(ctx context.Context) (*Client, error) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// newClient creates a new connection to an RPC server.
|
||||||
func newClient(initctx context.Context, connectFunc func(context.Context) (net.Conn, error)) (*Client, error) {
|
func newClient(initctx context.Context, connectFunc func(context.Context) (net.Conn, error)) (*Client, error) {
|
||||||
conn, err := connectFunc(initctx)
|
conn, err := connectFunc(initctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
@ -390,12 +397,12 @@ func (c *Client) BatchCallContext(ctx context.Context, b []BatchElem) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// EthSubscribe registers a subscripion under the "eth" namespace.
|
// EthSubscribe registers a subscription under the "eth" namespace.
|
||||||
func (c *Client) EthSubscribe(ctx context.Context, channel interface{}, args ...interface{}) (*ClientSubscription, error) {
|
func (c *Client) EthSubscribe(ctx context.Context, channel interface{}, args ...interface{}) (*ClientSubscription, error) {
|
||||||
return c.Subscribe(ctx, "eth", channel, args...)
|
return c.Subscribe(ctx, "eth", channel, args...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ShhSubscribe registers a subscripion under the "shh" namespace.
|
// ShhSubscribe registers a subscription under the "shh" namespace.
|
||||||
func (c *Client) ShhSubscribe(ctx context.Context, channel interface{}, args ...interface{}) (*ClientSubscription, error) {
|
func (c *Client) ShhSubscribe(ctx context.Context, channel interface{}, args ...interface{}) (*ClientSubscription, error) {
|
||||||
return c.Subscribe(ctx, "shh", channel, args...)
|
return c.Subscribe(ctx, "shh", channel, args...)
|
||||||
}
|
}
|
||||||
|
|
@ -446,6 +453,7 @@ func (c *Client) Subscribe(ctx context.Context, namespace string, channel interf
|
||||||
return op.sub, nil
|
return op.sub, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// newMessage creates a JSON-RPC 2.0 message with given arguments.
|
||||||
func (c *Client) newMessage(method string, paramsIn ...interface{}) (*jsonrpcMessage, error) {
|
func (c *Client) newMessage(method string, paramsIn ...interface{}) (*jsonrpcMessage, error) {
|
||||||
params, err := json.Marshal(paramsIn)
|
params, err := json.Marshal(paramsIn)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue