cmd, node, rpc: move websockets into node, break singleton
This commit is contained in:
49
node/api.go
49
node/api.go
@ -25,9 +25,7 @@ import (
|
||||
"github.com/ethereum/go-ethereum/crypto"
|
||||
"github.com/ethereum/go-ethereum/p2p"
|
||||
"github.com/ethereum/go-ethereum/p2p/discover"
|
||||
"github.com/ethereum/go-ethereum/rpc"
|
||||
"github.com/rcrowley/go-metrics"
|
||||
"gopkg.in/fatih/set.v0"
|
||||
)
|
||||
|
||||
// PrivateAdminAPI is the collection of administrative API methods exposed only
|
||||
@ -86,44 +84,29 @@ func (api *PrivateAdminAPI) StopRPC() (bool, error) {
|
||||
}
|
||||
|
||||
// StartWS starts the websocket RPC API server.
|
||||
func (api *PrivateAdminAPI) StartWS(address string, port int, cors string, apis string) (bool, error) {
|
||||
var offeredAPIs []rpc.API
|
||||
if len(apis) > 0 {
|
||||
namespaces := set.New()
|
||||
for _, a := range strings.Split(apis, ",") {
|
||||
namespaces.Add(strings.TrimSpace(a))
|
||||
}
|
||||
for _, api := range api.node.APIs() {
|
||||
if namespaces.Has(api.Namespace) {
|
||||
offeredAPIs = append(offeredAPIs, api)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// use by default all public API's
|
||||
for _, api := range api.node.APIs() {
|
||||
if api.Public {
|
||||
offeredAPIs = append(offeredAPIs, api)
|
||||
}
|
||||
}
|
||||
}
|
||||
func (api *PrivateAdminAPI) StartWS(host string, port int, cors string, apis string) (bool, error) {
|
||||
api.node.lock.Lock()
|
||||
defer api.node.lock.Unlock()
|
||||
|
||||
if address == "" {
|
||||
address = "127.0.0.1"
|
||||
if api.node.wsHandler != nil {
|
||||
return false, fmt.Errorf("WebSocker RPC already running on %s", api.node.wsEndpoint)
|
||||
}
|
||||
if port == 0 {
|
||||
port = 8546
|
||||
if err := api.node.startWS(fmt.Sprintf("%s:%d", host, port), api.node.rpcAPIs, strings.Split(apis, ","), cors); err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
||||
corsDomains := strings.Split(cors, " ")
|
||||
|
||||
err := rpc.StartWS(address, port, corsDomains, offeredAPIs)
|
||||
return err == nil, err
|
||||
return true, nil
|
||||
}
|
||||
|
||||
// StopRPC terminates an already running websocket RPC API endpoint.
|
||||
func (api *PrivateAdminAPI) StopWS() (bool, error) {
|
||||
err := rpc.StopWS()
|
||||
return err == nil, err
|
||||
api.node.lock.Lock()
|
||||
defer api.node.lock.Unlock()
|
||||
|
||||
if api.node.wsHandler == nil {
|
||||
return false, fmt.Errorf("WebSocket RPC not running")
|
||||
}
|
||||
api.node.stopWS()
|
||||
return true, nil
|
||||
}
|
||||
|
||||
// PublicAdminAPI is the collection of administrative API methods exposed over
|
||||
|
Reference in New Issue
Block a user