package proxy
|
|
|
|
import (
|
|
. "github.com/tendermint/go-common"
|
|
cfg "github.com/tendermint/go-config"
|
|
)
|
|
|
|
// Tendermint's interface to the application consists of multiple connections
|
|
type AppConns interface {
|
|
Service
|
|
|
|
Mempool() AppConnMempool
|
|
Consensus() AppConnConsensus
|
|
Query() AppConnQuery
|
|
}
|
|
|
|
func NewAppConns(config cfg.Config, clientCreator ClientCreator, state State, blockStore BlockStore) AppConns {
|
|
return NewMultiAppConn(config, clientCreator, state, blockStore)
|
|
}
|
|
|
|
// a multiAppConn is made of a few appConns (mempool, consensus, query)
|
|
// and manages their underlying tmsp clients, ensuring they reboot together
|
|
type multiAppConn struct {
|
|
BaseService
|
|
|
|
config cfg.Config
|
|
|
|
state State
|
|
blockStore BlockStore
|
|
|
|
mempoolConn *appConnMempool
|
|
consensusConn *appConnConsensus
|
|
queryConn *appConnQuery
|
|
|
|
clientCreator ClientCreator
|
|
}
|
|
|
|
// Make all necessary tmsp connections to the application
|
|
func NewMultiAppConn(config cfg.Config, clientCreator ClientCreator, state State, blockStore BlockStore) *multiAppConn {
|
|
multiAppConn := &multiAppConn{
|
|
config: config,
|
|
state: state,
|
|
blockStore: blockStore,
|
|
clientCreator: clientCreator,
|
|
}
|
|
multiAppConn.BaseService = *NewBaseService(log, "multiAppConn", multiAppConn)
|
|
return multiAppConn
|
|
}
|
|
|
|
// Returns the mempool connection
|
|
func (app *multiAppConn) Mempool() AppConnMempool {
|
|
return app.mempoolConn
|
|
}
|
|
|
|
// Returns the consensus Connection
|
|
func (app *multiAppConn) Consensus() AppConnConsensus {
|
|
return app.consensusConn
|
|
}
|
|
|
|
func (app *multiAppConn) Query() AppConnQuery {
|
|
return app.queryConn
|
|
}
|
|
|
|
func (app *multiAppConn) OnStart() error {
|
|
app.BaseService.OnStart()
|
|
|
|
// query connection
|
|
querycli, err := app.clientCreator.NewTMSPClient()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
app.queryConn = NewAppConnQuery(querycli)
|
|
|
|
// mempool connection
|
|
memcli, err := app.clientCreator.NewTMSPClient()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
app.mempoolConn = NewAppConnMempool(memcli)
|
|
|
|
// consensus connection
|
|
concli, err := app.clientCreator.NewTMSPClient()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
app.consensusConn = NewAppConnConsensus(concli)
|
|
|
|
// TODO: handshake
|
|
|
|
// TODO: replay blocks
|
|
|
|
// TODO: (on restart) replay mempool
|
|
|
|
return nil
|
|
}
|