go-waku/waku/v2/rpc/waku_rpc.go

61 lines
1.3 KiB
Go
Raw Normal View History

package rpc
import (
"context"
"fmt"
"net/http"
2021-11-06 10:49:47 +00:00
"time"
"github.com/gorilla/rpc/v2"
logging "github.com/ipfs/go-log"
"github.com/status-im/go-waku/waku/v2/node"
)
var log = logging.Logger("wakurpc")
type WakuRpc struct {
node *node.WakuNode
server *http.Server
}
func NewWakuRpc(node *node.WakuNode, address string, port int) *WakuRpc {
s := rpc.NewServer()
s.RegisterCodec(NewSnakeCaseCodec(), "application/json")
s.RegisterCodec(NewSnakeCaseCodec(), "application/json;charset=UTF-8")
2021-11-02 14:42:22 +00:00
err := s.RegisterService(&DebugService{node}, "Debug")
if err != nil {
log.Error(err)
}
2021-11-06 10:49:47 +00:00
err = s.RegisterService(&RelayService{node}, "Relay")
if err != nil {
log.Error(err)
}
mux := http.NewServeMux()
2021-11-06 10:49:47 +00:00
mux.HandleFunc("/jsonrpc", func(w http.ResponseWriter, r *http.Request) {
t := time.Now()
s.ServeHTTP(w, r)
log.Infof("RPC request at %s took %s", r.URL.Path, time.Since(t))
})
listenAddr := fmt.Sprintf("%s:%d", address, port)
server := &http.Server{
Addr: listenAddr,
Handler: mux,
}
return &WakuRpc{node: node, server: server}
}
func (r *WakuRpc) Start() {
log.Info("Rpc server started at ", r.server.Addr)
log.Info("server stopped ", r.server.ListenAndServe())
}
func (r *WakuRpc) Stop(ctx context.Context) error {
return r.server.Shutdown(ctx)
}