cranberry

Форк
0
98 строк · 2.6 Кб
1
package app
2

3
import (
4
	"fmt"
5
	"net"
6
	"time"
7

8
	log2 "gitverse.ru/IvanTimofeev/cranberry/internal/log"
9
	"go.uber.org/zap"
10

11
	"gitverse.ru/IvanTimofeev/cranberry/internal/config"
12
	"gitverse.ru/IvanTimofeev/cranberry/internal/db"
13
	"gitverse.ru/IvanTimofeev/cranberry/internal/handlers/tx"
14

15
	memorypool "gitverse.ru/IvanTimofeev/cranberry/internal/pool"
16
	services "gitverse.ru/IvanTimofeev/cranberry/internal/services"
17
	pbapi "gitverse.ru/IvanTimofeev/cranberry/pkg/grpc"
18
	"google.golang.org/grpc"
19
)
20

21
type App struct {
22
	config              *config.Config
23
	makeBlockJobChannel chan any
24
	blockService        *services.BlockService
25
	logger              *zap.SugaredLogger
26
	privKey             []byte
27
	peers               []string
28
}
29

30
func (app *App) Start() {
31
	lis, err := net.Listen("tcp", fmt.Sprintf(":%d", app.config.GRPC.Port))
32
	if err != nil {
33
		app.logger.Fatal(err)
34
	}
35
	mempool := memorypool.NewMemoryPool()
36
	db := db.NewDb(app.config.DB.Host,
37
		app.config.DB.Port,
38
		app.config.DB.Login,
39
		app.config.DB.Password,
40
		app.config.DB.SqlPath)
41
	err = db.Connect()
42
	if err != nil {
43
		app.logger.Fatal(err)
44
	}
45
	err = db.Init()
46
	if err != nil {
47
		app.logger.Fatal(err)
48
	}
49
	validatorService := services.NewValidatorService(db, app.config.Validator.Seed)
50
	accountService := services.NewAccountService(db)
51
	poolService := services.NewPoolService(mempool)
52
	txService := services.NewTxService(mempool, db)
53
	peerService := services.NewPeerService(app.peers)
54
	app.blockService = services.NewBlockService(poolService, db, txService, validatorService)
55
	err = app.blockService.MakeGenesisBlock(app.config.Genesis.Addr, app.config.Genesis.Balance)
56
	if err != nil {
57
		app.logger.Fatal(err)
58
	}
59
	s := grpc.NewServer()
60
	pbapi.RegisterCranberryServiceServer(s, tx.NewCranberryServiceHandler(
61
		txService,
62
		poolService,
63
		app.blockService,
64
		accountService,
65
		validatorService,
66
		peerService,
67
	)) //запускаем периодическое создание блоков
68
	go app.MakeBlockJob()
69
	app.logger.Info("Listen server...")
70
	if err := s.Serve(lis); err != nil {
71
		app.logger.Fatalf("failed to serve: ", err)
72
	}
73
}
74

75
func NewApp(config *config.Config, peers []string) *App {
76
	return &App{
77
		config: config,
78
		logger: log2.GetLogger(),
79
		peers:  peers,
80
	}
81
}
82

83
func (app *App) MakeBlockJob() {
84
	for {
85
		err := app.blockService.MakeBlock()
86
		if err != nil {
87
			app.logger.Error(err)
88
		} else {
89
			app.logger.Info("Block is generated")
90
		}
91
		time.Sleep(5 * time.Second)
92
	}
93
}
94

95
func (app *App) Shutdown() {
96
	app.logger.Info("Shutdown...")
97
	close(app.makeBlockJobChannel)
98
}
99

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.