-
Notifications
You must be signed in to change notification settings - Fork 13
/
node.go
54 lines (48 loc) · 1.27 KB
/
node.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
package services
import (
"github.com/orbs-network/go-scaffold/services/publicapi"
"github.com/orbs-network/go-scaffold/services/virtualmachine"
"github.com/orbs-network/go-scaffold/services/statestorage"
"github.com/orbs-network/go-scaffold/utils/logger"
)
type Node interface {
Start(stop *chan error)
Stop()
}
type node struct {
stop *chan error
logger logger.Interface
publicApi publicapi.Service
virtualMachine virtualmachine.Service
stateStorage statestorage.Service
publicApiServer publicapi.Server
}
func NewNode(logger logger.Interface) Node {
return &node{
logger: logger,
publicApi: publicapi.NewService(logger),
virtualMachine: virtualmachine.NewService(logger),
stateStorage: statestorage.NewService(logger),
publicApiServer: publicapi.NewServer(logger),
}
}
func (n *node) Start(stop *chan error) {
if n.stop == nil {
n.stop = stop
n.stateStorage.Start(stop)
n.virtualMachine.Start(n.stateStorage, stop)
n.publicApi.Start(n.virtualMachine, stop)
n.publicApiServer.Start(n.publicApi, stop)
n.logger.Info("Node (as a whole) started")
}
}
func (n *node) Stop() {
if n.stop != nil {
n.logger.Info("Node (as a whole) stopping")
n.publicApiServer.Stop()
n.publicApi.Stop()
n.virtualMachine.Stop()
n.stateStorage.Stop()
n.stop = nil
}
}