herald.go/server/block.go
2021-07-24 03:50:11 -04:00

123 lines
No EOL
3.2 KiB
Go

package server
import (
"context"
"encoding/base64"
"encoding/binary"
"encoding/hex"
pb "github.com/lbryio/hub/protobuf/go"
"log"
"time"
zmq "github.com/go-zeromq/zmq4"
//"net/rpc/jsonrpc"
"github.com/ybbus/jsonrpc/v2"
)
func (s *Server) SubscribeHeaders(request *pb.BlockRequest, stream pb.Hub_SubscribeHeadersServer) error {
//log.SetPrefix("psenvsub: ")
// Prepare our subscriber
log.Println("asdf")
sub := zmq.NewSub(context.Background(), zmq.WithDialerRetry(time.Second * 60), zmq.WithDialerTimeout(time.Second * 30))
defer sub.Close()
err := sub.Dial("tcp://localhost:28333")
if err != nil {
log.Fatalf("could not dial: %v", err)
}
err = sub.SetOption(zmq.OptionSubscribe, "hashblockheader")
//err = sub.SetOption(zmq.OptionSubscribe, "hashblock")
if err != nil {
//log.Fatalf("could not subscribe: %v", err)
return err
}
for {
// Read envelope
msg, err := sub.Recv()
if err != nil {
//log.Fatalf("could not receive message: %v", err)
return err
}
hash := hex.EncodeToString(msg.Frames[1][0:32])
height := binary.LittleEndian.Uint32(msg.Frames[1][32:])
log.Printf("[%s] %s\n", msg.Frames[0], hash)
stream.Send(&pb.BlockHeaderOutput{Hash: hash, Height: int64(height)})
}
}
func (s *Server) GetBlock(ctx context.Context, blockReq *pb.BlockRequest) (*pb.BlockOutput, error) {
log.Println("In GetBlock")
rpcClient := jsonrpc.NewClientWithOpts("http://localhost"+":29245", &jsonrpc.RPCClientOpts{
CustomHeaders: map[string]string{
"Authorization": "Basic " + base64.StdEncoding.EncodeToString([]byte("lbry"+":"+"lbry")),
},
})
log.Println("Making call ...")
var r pb.BlockOutput
res, err := rpcClient.Call("getblock", blockReq.Blockhash)
if err != nil {
log.Println(err)
return &pb.BlockOutput{Hash: "", Confirmations: 0}, err
}
log.Println(res)
err = res.GetObject(&r)
if err != nil {
log.Println(err)
return &pb.BlockOutput{Hash: "", Confirmations: 0}, err
}
return &r, nil
}
func (s *Server) GetBlockHeader(ctx context.Context, blockReq *pb.BlockRequest) (*pb.BlockHeaderOutput, error) {
log.Println("In GetBlock")
rpcClient := jsonrpc.NewClientWithOpts("http://localhost"+":29245", &jsonrpc.RPCClientOpts{
CustomHeaders: map[string]string{
"Authorization": "Basic " + base64.StdEncoding.EncodeToString([]byte("lbry"+":"+"lbry")),
},
})
log.Println("Making call ...")
var r pb.BlockHeaderOutput
res, err := rpcClient.Call("getblockheader", blockReq.Blockhash)
if err != nil {
log.Println(err)
return &pb.BlockHeaderOutput{Hash: "", Confirmations: 0}, err
}
log.Println(res)
err = res.GetObject(&r)
if err != nil {
log.Println(err)
return &pb.BlockHeaderOutput{Hash: "", Confirmations: 0}, err
}
return &r, nil
}
/*
func (s *Server) GetBlock(ctx context.Context, blockReq *pb.BlockRequest) (*pb.BlockOutput, error) {
log.Println("In GetBlock")
conn, err := jsonrpc.Dial("tcp", "localhost"+":19245")
if err != nil {
log.Fatalf("did not connect: %v", err)
}
defer conn.Close()
log.Println("Making call ...")
var r pb.BlockOutput
//var rr json.RawMessage
err = conn.Call("getblock", blockReq.Blockhash, nil)
if err != nil {
log.Println(err)
return &pb.BlockOutput{Hash: "", Confirmations: 0}, err
}
return &r, nil
}
*/