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