OSDN Git Service

new repo
[bytom/vapor.git] / vendor / github.com / tendermint / abci / example / block_aware / block_aware_app.go
1 package main
2
3 import (
4         "flag"
5         "os"
6
7         "github.com/tendermint/abci/server"
8         "github.com/tendermint/abci/types"
9         cmn "github.com/tendermint/tmlibs/common"
10         "github.com/tendermint/tmlibs/log"
11 )
12
13 func main() {
14
15         addrPtr := flag.String("addr", "tcp://0.0.0.0:46658", "Listen address")
16         abciPtr := flag.String("abci", "socket", "socket | grpc")
17         flag.Parse()
18
19         logger := log.NewTMLogger(log.NewSyncWriter(os.Stdout))
20
21         // Start the listener
22         srv, err := server.NewServer(*addrPtr, *abciPtr, NewChainAwareApplication())
23         if err != nil {
24                 logger.Error(err.Error())
25                 os.Exit(1)
26         }
27         srv.SetLogger(logger.With("module", "abci-server"))
28         if _, err := srv.Start(); err != nil {
29                 logger.Error(err.Error())
30                 os.Exit(1)
31         }
32
33         // Wait forever
34         cmn.TrapSignal(func() {
35                 // Cleanup
36                 srv.Stop()
37         })
38
39 }
40
41 type ChainAwareApplication struct {
42         types.BaseApplication
43
44         beginCount int
45         endCount   int
46 }
47
48 func NewChainAwareApplication() *ChainAwareApplication {
49         return &ChainAwareApplication{}
50 }
51
52 func (app *ChainAwareApplication) Query(reqQuery types.RequestQuery) (resQuery types.ResponseQuery) {
53         return types.ResponseQuery{
54                 Value: []byte(cmn.Fmt("%d,%d", app.beginCount, app.endCount)),
55         }
56 }
57
58 func (app *ChainAwareApplication) BeginBlock(reqBeginBlock types.RequestBeginBlock) {
59         app.beginCount++
60 }
61
62 func (app *ChainAwareApplication) EndBlock(height uint64) (resEndBlock types.ResponseEndBlock) {
63         app.endCount++
64         return
65 }