@@ -16,6 +16,8 @@ package blockfetch
1616
1717import (
1818 "fmt"
19+
20+ "github.com/blinklabs-io/gouroboros/cbor"
1921 "github.com/blinklabs-io/gouroboros/protocol"
2022)
2123
@@ -44,10 +46,41 @@ func NewServer(protoOptions protocol.ProtocolOptions, cfg *Config) *Server {
4446 return s
4547}
4648
49+ func (s * Server ) NoBlocks () error {
50+ msg := NewMsgNoBlocks ()
51+ return s .SendMessage (msg )
52+ }
53+
54+ func (s * Server ) StartBatch () error {
55+ msg := NewMsgStartBatch ()
56+ return s .SendMessage (msg )
57+ }
58+
59+ func (s * Server ) Block (blockType uint , blockData []byte ) error {
60+ wrappedBlock := WrappedBlock {
61+ Type : blockType ,
62+ RawBlock : blockData ,
63+ }
64+ wrappedBlockData , err := cbor .Encode (& wrappedBlock )
65+ if err != nil {
66+ return err
67+ }
68+ msg := NewMsgBlock (wrappedBlockData )
69+ return s .SendMessage (msg )
70+ }
71+
72+ func (s * Server ) BatchDone () error {
73+ msg := NewMsgBatchDone ()
74+ return s .SendMessage (msg )
75+ }
76+
4777func (s * Server ) messageHandler (msg protocol.Message ) error {
4878 var err error
49- // TODO: add cases for messages from client
5079 switch msg .Type () {
80+ case MessageTypeRequestRange :
81+ err = s .handleRequestRange (msg )
82+ case MessageTypeClientDone :
83+ err = s .handleClientDone ()
5184 default :
5285 err = fmt .Errorf (
5386 "%s: received unexpected message type %d" ,
@@ -57,3 +90,17 @@ func (s *Server) messageHandler(msg protocol.Message) error {
5790 }
5891 return err
5992}
93+
94+ func (s * Server ) handleRequestRange (msg protocol.Message ) error {
95+ if s .config == nil || s .config .RequestRangeFunc == nil {
96+ return fmt .Errorf (
97+ "received block-fetch RequestRange message but no callback function is defined" ,
98+ )
99+ }
100+ msgRequestRange := msg .(* MsgRequestRange )
101+ return s .config .RequestRangeFunc (msgRequestRange .Start , msgRequestRange .End )
102+ }
103+
104+ func (s * Server ) handleClientDone () error {
105+ return nil
106+ }
0 commit comments