This repository has been archived by the owner on May 24, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 9
/
blockResponse.go
62 lines (51 loc) · 1.53 KB
/
blockResponse.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
55
56
57
58
59
60
61
62
package handler
import (
"errors"
handlertypes "github.com/opennetsys/golkadot/client/p2p/handler/types"
clienttypes "github.com/opennetsys/golkadot/client/types"
"github.com/opennetsys/golkadot/logger"
)
// note: ensure the struct implements the interface
var _ InterfaceHandler = (*BlockResponseHandler)(nil)
// BlockResponseHandler implements the block response handler
type BlockResponseHandler struct{}
// Func handles incoming block response messages
// TODO ...
func (b *BlockResponseHandler) Func(p clienttypes.InterfaceP2P, pr clienttypes.InterfacePeer, msg clienttypes.InterfaceMessage) error {
if p == nil {
return errors.New("nil p2p")
}
if pr == nil {
return errors.New("nil peer")
}
if msg == nil {
return errors.New("nil message")
}
byt, err := msg.MarshalJSON()
if err != nil {
logger.Errorf("[handler] err unmarshalling block response message\n%v", err)
return err
}
logger.Infof("%v BlockResponse: %v", pr.GetShortID(), string(byt))
s, err := p.GetSyncer()
if err != nil {
return err
}
if s == nil {
return errors.New("syncer is nil")
}
br, ok := msg.(*clienttypes.BlockResponse)
if !ok {
logger.Errorf("[handler] expected pointer to block response, received %T", br)
return errors.New("message is not a block response")
}
if err = s.QueueBlocks(pr, br); err != nil {
logger.Errorf("[handler] err queueing blocks\n%v", err)
return err
}
return s.RequestBlocks(pr)
}
// Type returns the func enum
func (b *BlockResponseHandler) Type() handlertypes.FuncEnum {
return handlertypes.BlockResponse
}