@ -9,7 +9,7 @@ import (
rpcclient "github.com/tendermint/tendermint/rpc/client"
rpcclient "github.com/tendermint/tendermint/rpc/client"
"github.com/tendermint/tendermint/rpc/core"
"github.com/tendermint/tendermint/rpc/core"
ctypes "github.com/tendermint/tendermint/rpc/core/types"
ctypes "github.com/tendermint/tendermint/rpc/core/types"
rpc "github.com/tendermint/tendermint/rpc/lib/server"
rpcserver "github.com/tendermint/tendermint/rpc/lib/server"
)
)
const (
const (
@ -19,6 +19,7 @@ const (
// StartProxy will start the websocket manager on the client,
// StartProxy will start the websocket manager on the client,
// set up the rpc routes to proxy via the given client,
// set up the rpc routes to proxy via the given client,
// and start up an http/rpc server on the location given by bind (eg. :1234)
// and start up an http/rpc server on the location given by bind (eg. :1234)
// NOTE: This function blocks - you may want to call it in a go-routine.
func StartProxy ( c rpcclient . Client , listenAddr string , logger log . Logger , maxOpenConnections int ) error {
func StartProxy ( c rpcclient . Client , listenAddr string , logger log . Logger , maxOpenConnections int ) error {
err := c . Start ( )
err := c . Start ( )
if err != nil {
if err != nil {
@ -31,47 +32,49 @@ func StartProxy(c rpcclient.Client, listenAddr string, logger log.Logger, maxOpe
// build the handler...
// build the handler...
mux := http . NewServeMux ( )
mux := http . NewServeMux ( )
rpc . RegisterRPCFuncs ( mux , r , cdc , logger )
rpcserver . RegisterRPCFuncs ( mux , r , cdc , logger )
wm := rpc . NewWebsocketManager ( r , cdc , rpc . EventSubscriber ( c ) )
wm := rpcserver . NewWebsocketManager ( r , cdc , rpcserver . EventSubscriber ( c ) )
wm . SetLogger ( logger )
wm . SetLogger ( logger )
core . SetLogger ( logger )
core . SetLogger ( logger )
mux . HandleFunc ( wsEndpoint , wm . WebsocketHandler )
mux . HandleFunc ( wsEndpoint , wm . WebsocketHandler )
_ , err = rpc . StartHTTPServer ( listenAddr , mux , logger , rpc . Config { MaxOpenConnections : maxOpenConnections } )
return err
l , err := rpcserver . Listen ( listenAddr , rpcserver . Config { MaxOpenConnections : maxOpenConnections } )
if err != nil {
return err
}
return rpcserver . StartHTTPServer ( l , mux , logger )
}
}
// RPCRoutes just routes everything to the given client, as if it were
// RPCRoutes just routes everything to the given client, as if it were
// a tendermint fullnode.
// a tendermint fullnode.
//
//
// if we want security, the client must implement it as a secure client
// if we want security, the client must implement it as a secure client
func RPCRoutes ( c rpcclient . Client ) map [ string ] * rpc . RPCFunc {
func RPCRoutes ( c rpcclient . Client ) map [ string ] * rpcserver . RPCFunc {
return map [ string ] * rpc . RPCFunc {
return map [ string ] * rpcserver . RPCFunc {
// Subscribe/unsubscribe are reserved for websocket events.
// Subscribe/unsubscribe are reserved for websocket events.
// We can just use the core tendermint impl, which uses the
// We can just use the core tendermint impl, which uses the
// EventSwitch we registered in NewWebsocketManager above
// EventSwitch we registered in NewWebsocketManager above
"subscribe" : rpc . NewWSRPCFunc ( core . Subscribe , "query" ) ,
"unsubscribe" : rpc . NewWSRPCFunc ( core . Unsubscribe , "query" ) ,
"subscribe" : rpcserver . NewWSRPCFunc ( core . Subscribe , "query" ) ,
"unsubscribe" : rpcserver . NewWSRPCFunc ( core . Unsubscribe , "query" ) ,
// info API
// info API
"status" : rpc . NewRPCFunc ( c . Status , "" ) ,
"blockchain" : rpc . NewRPCFunc ( c . BlockchainInfo , "minHeight,maxHeight" ) ,
"genesis" : rpc . NewRPCFunc ( c . Genesis , "" ) ,
"block" : rpc . NewRPCFunc ( c . Block , "height" ) ,
"commit" : rpc . NewRPCFunc ( c . Commit , "height" ) ,
"tx" : rpc . NewRPCFunc ( c . Tx , "hash,prove" ) ,
"validators" : rpc . NewRPCFunc ( c . Validators , "" ) ,
"status" : rpcserver . NewRPCFunc ( c . Status , "" ) ,
"blockchain" : rpcserver . NewRPCFunc ( c . BlockchainInfo , "minHeight,maxHeight" ) ,
"genesis" : rpcserver . NewRPCFunc ( c . Genesis , "" ) ,
"block" : rpcserver . NewRPCFunc ( c . Block , "height" ) ,
"commit" : rpcserver . NewRPCFunc ( c . Commit , "height" ) ,
"tx" : rpcserver . NewRPCFunc ( c . Tx , "hash,prove" ) ,
"validators" : rpcserver . NewRPCFunc ( c . Validators , "" ) ,
// broadcast API
// broadcast API
"broadcast_tx_commit" : rpc . NewRPCFunc ( c . BroadcastTxCommit , "tx" ) ,
"broadcast_tx_sync" : rpc . NewRPCFunc ( c . BroadcastTxSync , "tx" ) ,
"broadcast_tx_async" : rpc . NewRPCFunc ( c . BroadcastTxAsync , "tx" ) ,
"broadcast_tx_commit" : rpcserver . NewRPCFunc ( c . BroadcastTxCommit , "tx" ) ,
"broadcast_tx_sync" : rpcserver . NewRPCFunc ( c . BroadcastTxSync , "tx" ) ,
"broadcast_tx_async" : rpcserver . NewRPCFunc ( c . BroadcastTxAsync , "tx" ) ,
// abci API
// abci API
"abci_query" : rpc . NewRPCFunc ( c . ABCIQuery , "path,data,prove" ) ,
"abci_info" : rpc . NewRPCFunc ( c . ABCIInfo , "" ) ,
"abci_query" : rpcserver . NewRPCFunc ( c . ABCIQuery , "path,data,prove" ) ,
"abci_info" : rpcserver . NewRPCFunc ( c . ABCIInfo , "" ) ,
}
}
}
}