71e79c553e
to include full RPC name.
70 lines
1.9 KiB
Go
70 lines
1.9 KiB
Go
package server
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"github.com/gorilla/mux"
|
|
"github.com/gorilla/rpc"
|
|
"github.com/gorilla/rpc/json"
|
|
"github.com/lbryio/herald.go/db"
|
|
pb "github.com/lbryio/herald.go/protobuf/go"
|
|
log "github.com/sirupsen/logrus"
|
|
)
|
|
|
|
type ClaimtrieService struct {
|
|
DB *db.ReadOnlyDBColumnFamily
|
|
}
|
|
|
|
type ResolveData struct {
|
|
Data []string `json:"data"`
|
|
}
|
|
|
|
type Result struct {
|
|
Data string `json:"data"`
|
|
}
|
|
|
|
// Resolve is the json rpc endpoint for 'blockchain.claimtrie.resolve'.
|
|
func (t *ClaimtrieService) Resolve(r *http.Request, args *ResolveData, result **pb.Outputs) error {
|
|
log.Println("Resolve")
|
|
res, err := InternalResolve(args.Data, t.DB)
|
|
*result = res
|
|
return err
|
|
}
|
|
|
|
// StartJsonRPC starts the json rpc server and registers the endpoints.
|
|
func (s *Server) StartJsonRPC() error {
|
|
port := ":" + s.Args.JSONRPCPort
|
|
|
|
s1 := rpc.NewServer() // Create a new RPC server
|
|
// Register the type of data requested as JSON, with custom codec.
|
|
s1.RegisterCodec(&BlockchainCodec{json.NewCodec()}, "application/json")
|
|
|
|
// Register "blockchain.claimtrie.*"" handlers.
|
|
claimtrieSvc := &ClaimtrieService{s.DB}
|
|
err := s1.RegisterService(claimtrieSvc, "blockchain_claimtrie")
|
|
if err != nil {
|
|
log.Errorf("RegisterService: %v\n", err)
|
|
}
|
|
|
|
// Register other "blockchain.{block,address,scripthash}.*" handlers.
|
|
blockchainSvc := &BlockchainService{s.DB, s.Chain}
|
|
err = s1.RegisterService(blockchainSvc, "blockchain_block")
|
|
if err != nil {
|
|
log.Errorf("RegisterService: %v\n", err)
|
|
}
|
|
err = s1.RegisterService(&BlockchainAddressService{*blockchainSvc}, "blockchain_address")
|
|
if err != nil {
|
|
log.Errorf("RegisterService: %v\n", err)
|
|
}
|
|
err = s1.RegisterService(&BlockchainScripthashService{*blockchainSvc}, "blockchain_scripthash")
|
|
if err != nil {
|
|
log.Errorf("RegisterService: %v\n", err)
|
|
}
|
|
|
|
r := mux.NewRouter()
|
|
r.Handle("/rpc", s1)
|
|
log.Fatal(http.ListenAndServe(port, r))
|
|
|
|
return nil
|
|
}
|