|
|
- 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
- }
|