mirror of
https://github.com/LBRYFoundation/herald.go.git
synced 2025-09-30 15:10:33 +00:00
123 lines
No EOL
3.2 KiB
Go
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
|
|
}
|
|
|
|
*/ |