mirror of https://github.com/ethereum/go-ethereum
parent
4b9b633dfe
commit
d2a87f6f72
@ -0,0 +1,81 @@ |
|||||||
|
package api |
||||||
|
|
||||||
|
import ( |
||||||
|
"github.com/ethereum/go-ethereum/eth" |
||||||
|
"github.com/ethereum/go-ethereum/rpc/codec" |
||||||
|
"github.com/ethereum/go-ethereum/rpc/shared" |
||||||
|
"github.com/ethereum/go-ethereum/xeth" |
||||||
|
) |
||||||
|
|
||||||
|
var ( |
||||||
|
// mapping between methods and handlers
|
||||||
|
netMapping = map[string]nethandler{ |
||||||
|
"net_id": (*net).NetworkVersion, |
||||||
|
"net_peerCount": (*net).PeerCount, |
||||||
|
"net_listening": (*net).IsListening, |
||||||
|
"net_peers": (*net).Peers, |
||||||
|
} |
||||||
|
) |
||||||
|
|
||||||
|
// net callback handler
|
||||||
|
type nethandler func(*net, *shared.Request) (interface{}, error) |
||||||
|
|
||||||
|
// net api provider
|
||||||
|
type net struct { |
||||||
|
xeth *xeth.XEth |
||||||
|
ethereum *eth.Ethereum |
||||||
|
methods map[string]nethandler |
||||||
|
codec codec.ApiCoder |
||||||
|
} |
||||||
|
|
||||||
|
// create a new net api instance
|
||||||
|
func NewNetApi(xeth *xeth.XEth, eth *eth.Ethereum, coder codec.Codec) *net { |
||||||
|
return &net{ |
||||||
|
xeth: xeth, |
||||||
|
ethereum: eth, |
||||||
|
methods: netMapping, |
||||||
|
codec: coder.New(nil), |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
// collection with supported methods
|
||||||
|
func (self *net) Methods() []string { |
||||||
|
methods := make([]string, len(self.methods)) |
||||||
|
i := 0 |
||||||
|
for k := range self.methods { |
||||||
|
methods[i] = k |
||||||
|
i++ |
||||||
|
} |
||||||
|
return methods |
||||||
|
} |
||||||
|
|
||||||
|
// Execute given request
|
||||||
|
func (self *net) Execute(req *shared.Request) (interface{}, error) { |
||||||
|
if callback, ok := self.methods[req.Method]; ok { |
||||||
|
return callback(self, req) |
||||||
|
} |
||||||
|
|
||||||
|
return nil, shared.NewNotImplementedError(req.Method) |
||||||
|
} |
||||||
|
|
||||||
|
func (self *net) Name() string { |
||||||
|
return NetApiName |
||||||
|
} |
||||||
|
|
||||||
|
// Network version
|
||||||
|
func (self *net) NetworkVersion(req *shared.Request) (interface{}, error) { |
||||||
|
return self.xeth.NetworkVersion(), nil |
||||||
|
} |
||||||
|
|
||||||
|
// Number of connected peers
|
||||||
|
func (self *net) PeerCount(req *shared.Request) (interface{}, error) { |
||||||
|
return self.xeth.PeerCount(), nil |
||||||
|
} |
||||||
|
|
||||||
|
func (self *net) IsListening(req *shared.Request) (interface{}, error) { |
||||||
|
return self.xeth.IsListening(), nil |
||||||
|
} |
||||||
|
|
||||||
|
func (self *net) Peers(req *shared.Request) (interface{}, error) { |
||||||
|
return self.ethereum.PeersInfo(), nil |
||||||
|
} |
@ -0,0 +1,44 @@ |
|||||||
|
package api |
||||||
|
|
||||||
|
const Net_JS = ` |
||||||
|
web3.extend({ |
||||||
|
property: 'network', |
||||||
|
methods: |
||||||
|
[ |
||||||
|
new web3.extend.Method({ |
||||||
|
name: 'id', |
||||||
|
call: 'net_id', |
||||||
|
params: 0, |
||||||
|
inputFormatter: [], |
||||||
|
outputFormatter: web3.extend.formatters.formatOutputString |
||||||
|
}), |
||||||
|
new web3.extend.Method({ |
||||||
|
name: 'getPeerCount', |
||||||
|
call: 'net_peerCount', |
||||||
|
params: 0, |
||||||
|
inputFormatter: [], |
||||||
|
outputFormatter: web3.extend.formatters.formatOutputString |
||||||
|
}), |
||||||
|
new web3.extend.Method({ |
||||||
|
name: 'peers', |
||||||
|
call: 'net_peers', |
||||||
|
params: 0, |
||||||
|
inputFormatter: [], |
||||||
|
outputFormatter: function(obj) { return obj; } |
||||||
|
}) |
||||||
|
], |
||||||
|
properties: |
||||||
|
[ |
||||||
|
new web3.extend.Property({ |
||||||
|
name: 'listening', |
||||||
|
getter: 'net_listening', |
||||||
|
outputFormatter: web3.extend.formatters.formatOutputBool |
||||||
|
}), |
||||||
|
new web3.extend.Property({ |
||||||
|
name: 'peerCount', |
||||||
|
getter: 'net_peerCount', |
||||||
|
outputFormatter: web3.extend.utils.toDecimal |
||||||
|
}) |
||||||
|
] |
||||||
|
}); |
||||||
|
` |
Loading…
Reference in new issue