mirror of
https://github.com/fluencelabs/tendermint
synced 2025-06-13 21:31:23 +00:00
Refactor RPC/*, tendermint/config for debora+barak
This commit is contained in:
5
Makefile
5
Makefile
@ -20,6 +20,11 @@ build_race: get_deps
|
||||
test: build
|
||||
go test github.com/tendermint/tendermint/...
|
||||
|
||||
draw_deps:
|
||||
# requires brew install graphviz
|
||||
go get github.com/hirokidaichi/goviz
|
||||
goviz -i github.com/tendermint/tendermint/cmd/tendermint | dot -Tpng -o hoge.png
|
||||
|
||||
list_deps:
|
||||
go list -f '{{join .Deps "\n"}}' github.com/tendermint/tendermint/... | xargs go list -f '{{if not .Standard}}{{.ImportPath}}{{end}}'
|
||||
|
||||
|
@ -19,13 +19,14 @@ import (
|
||||
"github.com/tendermint/tendermint/binary"
|
||||
. "github.com/tendermint/tendermint/cmd/barak/types"
|
||||
. "github.com/tendermint/tendermint/common"
|
||||
cfg "github.com/tendermint/tendermint/config"
|
||||
pcm "github.com/tendermint/tendermint/process"
|
||||
"github.com/tendermint/tendermint/rpc"
|
||||
"github.com/tendermint/tendermint/rpc/server"
|
||||
)
|
||||
|
||||
var Routes = map[string]*rpc.RPCFunc{
|
||||
"status": rpc.NewRPCFunc(Status, []string{}),
|
||||
"run": rpc.NewRPCFunc(Run, []string{"auth_command"}),
|
||||
var Routes = map[string]*rpcserver.RPCFunc{
|
||||
"status": rpcserver.NewRPCFunc(Status, []string{}),
|
||||
"run": rpcserver.NewRPCFunc(Run, []string{"auth_command"}),
|
||||
// NOTE: also, two special non-JSONRPC routes called "download" and "upload"
|
||||
}
|
||||
|
||||
@ -58,6 +59,9 @@ var barak = struct {
|
||||
func main() {
|
||||
fmt.Printf("New Barak Process (PID: %d)\n", os.Getpid())
|
||||
|
||||
// Apply bare tendermint/* configuration.
|
||||
cfg.ApplyConfig(cfg.MapConfig(map[string]interface{}{"log_level": "info"}))
|
||||
|
||||
// read flags to change options file.
|
||||
var optionsBytes []byte
|
||||
var optionsFile string
|
||||
@ -97,8 +101,8 @@ func main() {
|
||||
mux.HandleFunc("/download", ServeFile)
|
||||
mux.HandleFunc("/register", Register)
|
||||
// TODO: mux.HandleFunc("/upload", UploadFile)
|
||||
rpc.RegisterRPCFuncs(mux, Routes)
|
||||
rpc.StartHTTPServer(options.ListenAddress, mux)
|
||||
rpcserver.RegisterRPCFuncs(mux, Routes)
|
||||
rpcserver.StartHTTPServer(options.ListenAddress, mux)
|
||||
|
||||
// Register this barak with central listener
|
||||
for _, registry := range barak.registries {
|
||||
|
@ -10,7 +10,7 @@ import (
|
||||
"github.com/tendermint/tendermint/binary"
|
||||
btypes "github.com/tendermint/tendermint/cmd/barak/types"
|
||||
. "github.com/tendermint/tendermint/common"
|
||||
"github.com/tendermint/tendermint/rpc"
|
||||
"github.com/tendermint/tendermint/rpc/client"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
@ -89,7 +89,7 @@ func GetNonce(remote string) (uint64, error) {
|
||||
}
|
||||
|
||||
func GetStatus(remote string) (response btypes.ResponseStatus, err error) {
|
||||
_, err = rpc.Call(remote, "status", Arr(), &response)
|
||||
_, err = rpcclient.Call(remote, "status", Arr(), &response)
|
||||
if err != nil {
|
||||
return response, fmt.Errorf("Error fetching nonce from remote %v:\n %v", remote, err)
|
||||
}
|
||||
@ -113,5 +113,5 @@ func RunAuthCommand(remote string, commandJSONBytes []byte, signatures []acm.Sig
|
||||
CommandJSONStr: string(commandJSONBytes),
|
||||
Signatures: signatures,
|
||||
}
|
||||
return rpc.Call(remote, "run", Arr(authCommand), dest)
|
||||
return rpcclient.Call(remote, "run", Arr(authCommand), dest)
|
||||
}
|
||||
|
@ -14,6 +14,7 @@ import (
|
||||
"github.com/tendermint/tendermint/binary"
|
||||
btypes "github.com/tendermint/tendermint/cmd/barak/types"
|
||||
. "github.com/tendermint/tendermint/common"
|
||||
cfg "github.com/tendermint/tendermint/config"
|
||||
)
|
||||
|
||||
func remoteNick(remote string) string {
|
||||
@ -33,6 +34,9 @@ var Config = struct {
|
||||
func main() {
|
||||
fmt.Printf("New Debora Process (PID: %d)\n", os.Getpid())
|
||||
|
||||
// Apply bare tendermint/* configuration.
|
||||
cfg.ApplyConfig(cfg.MapConfig(map[string]interface{}{"log_level": "info"}))
|
||||
|
||||
rootDir := os.Getenv("DEBROOT")
|
||||
if rootDir == "" {
|
||||
rootDir = os.Getenv("HOME") + "/.debora"
|
||||
|
10
node/node.go
10
node/node.go
@ -17,8 +17,8 @@ import (
|
||||
"github.com/tendermint/tendermint/events"
|
||||
mempl "github.com/tendermint/tendermint/mempool"
|
||||
"github.com/tendermint/tendermint/p2p"
|
||||
"github.com/tendermint/tendermint/rpc"
|
||||
"github.com/tendermint/tendermint/rpc/core"
|
||||
"github.com/tendermint/tendermint/rpc/server"
|
||||
sm "github.com/tendermint/tendermint/state"
|
||||
"github.com/tendermint/tendermint/types"
|
||||
)
|
||||
@ -190,9 +190,9 @@ func (n *Node) StartRPC() {
|
||||
|
||||
listenAddr := config.GetString("rpc_laddr")
|
||||
mux := http.NewServeMux()
|
||||
rpc.RegisterEventsHandler(mux, n.evsw)
|
||||
rpc.RegisterRPCFuncs(mux, core.Routes)
|
||||
rpc.StartHTTPServer(listenAddr, mux)
|
||||
rpcserver.RegisterEventsHandler(mux, n.evsw)
|
||||
rpcserver.RegisterRPCFuncs(mux, core.Routes)
|
||||
rpcserver.StartHTTPServer(listenAddr, mux)
|
||||
}
|
||||
|
||||
func (n *Node) Switch() *p2p.Switch {
|
||||
@ -252,7 +252,7 @@ func RunNode() {
|
||||
n.Start()
|
||||
|
||||
// If seedNode is provided by config, dial out.
|
||||
if len(config.GetStringSlice("seeds")) != 0 {
|
||||
if len(config.GetString("seeds")) > 0 {
|
||||
n.DialSeed()
|
||||
}
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
package rpc
|
||||
package rpcclient
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
@ -9,6 +9,7 @@ import (
|
||||
|
||||
"github.com/tendermint/tendermint/binary"
|
||||
. "github.com/tendermint/tendermint/common"
|
||||
. "github.com/tendermint/tendermint/rpc/types"
|
||||
)
|
||||
|
||||
func Call(remote string, method string, params []interface{}, dest interface{}) (interface{}, error) {
|
7
rpc/client/log.go
Normal file
7
rpc/client/log.go
Normal file
@ -0,0 +1,7 @@
|
||||
package rpcclient
|
||||
|
||||
import (
|
||||
"github.com/tendermint/log15"
|
||||
)
|
||||
|
||||
var log = log15.New("module", "rpcclient")
|
@ -1,7 +1,7 @@
|
||||
package core
|
||||
|
||||
import (
|
||||
"github.com/tendermint/tendermint/rpc"
|
||||
rpc "github.com/tendermint/tendermint/rpc/server"
|
||||
)
|
||||
|
||||
var Routes = map[string]*rpc.RPCFunc{
|
||||
|
@ -4,7 +4,7 @@ import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"github.com/tendermint/tendermint/binary"
|
||||
"github.com/tendermint/tendermint/rpc"
|
||||
rpctypes "github.com/tendermint/tendermint/rpc/types"
|
||||
// NOTE: do not import rpc/core.
|
||||
// What kind of client imports all of core logic? :P
|
||||
"io/ioutil"
|
||||
@ -91,7 +91,7 @@ func argsToJson(args ...interface{}) ([]string, error) {
|
||||
return jsons, nil
|
||||
}
|
||||
|
||||
func (c *ClientJSON) RequestResponse(s rpc.RPCRequest) (b []byte, err error) {
|
||||
func (c *ClientJSON) RequestResponse(s rpctypes.RPCRequest) (b []byte, err error) {
|
||||
b = binary.JSONBytes(s)
|
||||
buf := bytes.NewBuffer(b)
|
||||
resp, err := http.Post(c.addr, "text/json", buf)
|
||||
@ -157,7 +157,7 @@ func argsToURLValues(argNames []string, args ...interface{}) (url.Values, error)
|
||||
|
||||
/*rpc-gen:imports:
|
||||
github.com/tendermint/tendermint/binary
|
||||
github.com/tendermint/tendermint/rpc
|
||||
github.com/tendermint/tendermint/rpc/types
|
||||
net/http
|
||||
io/ioutil
|
||||
fmt
|
||||
@ -166,7 +166,7 @@ fmt
|
||||
// Template functions to be filled in
|
||||
|
||||
/*rpc-gen:template:*ClientJSON func (c *ClientJSON) {{name}}({{args.def}}) ({{response}}) {
|
||||
request := rpc.RPCRequest{
|
||||
request := rpctypes.RPCRequest{
|
||||
JSONRPC: "2.0",
|
||||
Method: reverseFuncMap["{{name}}"],
|
||||
Params: []interface{}{ {{args.ident}} },
|
||||
|
@ -6,8 +6,8 @@ import (
|
||||
"fmt"
|
||||
"github.com/tendermint/tendermint/account"
|
||||
"github.com/tendermint/tendermint/binary"
|
||||
"github.com/tendermint/tendermint/rpc"
|
||||
ctypes "github.com/tendermint/tendermint/rpc/core/types"
|
||||
"github.com/tendermint/tendermint/rpc/types"
|
||||
"github.com/tendermint/tendermint/types"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
@ -513,7 +513,7 @@ func (c *ClientHTTP) Status() (*ctypes.ResponseStatus, error) {
|
||||
}
|
||||
|
||||
func (c *ClientJSON) BlockchainInfo(minHeight uint, maxHeight uint) (*ctypes.ResponseBlockchainInfo, error) {
|
||||
request := rpc.RPCRequest{
|
||||
request := rpctypes.RPCRequest{
|
||||
JSONRPC: "2.0",
|
||||
Method: reverseFuncMap["BlockchainInfo"],
|
||||
Params: []interface{}{minHeight, maxHeight},
|
||||
@ -540,7 +540,7 @@ func (c *ClientJSON) BlockchainInfo(minHeight uint, maxHeight uint) (*ctypes.Res
|
||||
}
|
||||
|
||||
func (c *ClientJSON) BroadcastTx(tx types.Tx) (*ctypes.ResponseBroadcastTx, error) {
|
||||
request := rpc.RPCRequest{
|
||||
request := rpctypes.RPCRequest{
|
||||
JSONRPC: "2.0",
|
||||
Method: reverseFuncMap["BroadcastTx"],
|
||||
Params: []interface{}{tx},
|
||||
@ -567,7 +567,7 @@ func (c *ClientJSON) BroadcastTx(tx types.Tx) (*ctypes.ResponseBroadcastTx, erro
|
||||
}
|
||||
|
||||
func (c *ClientJSON) Call(address []byte, data []byte) (*ctypes.ResponseCall, error) {
|
||||
request := rpc.RPCRequest{
|
||||
request := rpctypes.RPCRequest{
|
||||
JSONRPC: "2.0",
|
||||
Method: reverseFuncMap["Call"],
|
||||
Params: []interface{}{address, data},
|
||||
@ -594,7 +594,7 @@ func (c *ClientJSON) Call(address []byte, data []byte) (*ctypes.ResponseCall, er
|
||||
}
|
||||
|
||||
func (c *ClientJSON) CallCode(code []byte, data []byte) (*ctypes.ResponseCall, error) {
|
||||
request := rpc.RPCRequest{
|
||||
request := rpctypes.RPCRequest{
|
||||
JSONRPC: "2.0",
|
||||
Method: reverseFuncMap["CallCode"],
|
||||
Params: []interface{}{code, data},
|
||||
@ -621,7 +621,7 @@ func (c *ClientJSON) CallCode(code []byte, data []byte) (*ctypes.ResponseCall, e
|
||||
}
|
||||
|
||||
func (c *ClientJSON) DumpConsensusState() (*ctypes.ResponseDumpConsensusState, error) {
|
||||
request := rpc.RPCRequest{
|
||||
request := rpctypes.RPCRequest{
|
||||
JSONRPC: "2.0",
|
||||
Method: reverseFuncMap["DumpConsensusState"],
|
||||
Params: []interface{}{},
|
||||
@ -648,7 +648,7 @@ func (c *ClientJSON) DumpConsensusState() (*ctypes.ResponseDumpConsensusState, e
|
||||
}
|
||||
|
||||
func (c *ClientJSON) DumpStorage(address []byte) (*ctypes.ResponseDumpStorage, error) {
|
||||
request := rpc.RPCRequest{
|
||||
request := rpctypes.RPCRequest{
|
||||
JSONRPC: "2.0",
|
||||
Method: reverseFuncMap["DumpStorage"],
|
||||
Params: []interface{}{address},
|
||||
@ -675,7 +675,7 @@ func (c *ClientJSON) DumpStorage(address []byte) (*ctypes.ResponseDumpStorage, e
|
||||
}
|
||||
|
||||
func (c *ClientJSON) GenPrivAccount() (*ctypes.ResponseGenPrivAccount, error) {
|
||||
request := rpc.RPCRequest{
|
||||
request := rpctypes.RPCRequest{
|
||||
JSONRPC: "2.0",
|
||||
Method: reverseFuncMap["GenPrivAccount"],
|
||||
Params: []interface{}{},
|
||||
@ -702,7 +702,7 @@ func (c *ClientJSON) GenPrivAccount() (*ctypes.ResponseGenPrivAccount, error) {
|
||||
}
|
||||
|
||||
func (c *ClientJSON) GetAccount(address []byte) (*ctypes.ResponseGetAccount, error) {
|
||||
request := rpc.RPCRequest{
|
||||
request := rpctypes.RPCRequest{
|
||||
JSONRPC: "2.0",
|
||||
Method: reverseFuncMap["GetAccount"],
|
||||
Params: []interface{}{address},
|
||||
@ -729,7 +729,7 @@ func (c *ClientJSON) GetAccount(address []byte) (*ctypes.ResponseGetAccount, err
|
||||
}
|
||||
|
||||
func (c *ClientJSON) GetBlock(height uint) (*ctypes.ResponseGetBlock, error) {
|
||||
request := rpc.RPCRequest{
|
||||
request := rpctypes.RPCRequest{
|
||||
JSONRPC: "2.0",
|
||||
Method: reverseFuncMap["GetBlock"],
|
||||
Params: []interface{}{height},
|
||||
@ -756,7 +756,7 @@ func (c *ClientJSON) GetBlock(height uint) (*ctypes.ResponseGetBlock, error) {
|
||||
}
|
||||
|
||||
func (c *ClientJSON) GetStorage(address []byte, key []byte) (*ctypes.ResponseGetStorage, error) {
|
||||
request := rpc.RPCRequest{
|
||||
request := rpctypes.RPCRequest{
|
||||
JSONRPC: "2.0",
|
||||
Method: reverseFuncMap["GetStorage"],
|
||||
Params: []interface{}{address, key},
|
||||
@ -783,7 +783,7 @@ func (c *ClientJSON) GetStorage(address []byte, key []byte) (*ctypes.ResponseGet
|
||||
}
|
||||
|
||||
func (c *ClientJSON) ListAccounts() (*ctypes.ResponseListAccounts, error) {
|
||||
request := rpc.RPCRequest{
|
||||
request := rpctypes.RPCRequest{
|
||||
JSONRPC: "2.0",
|
||||
Method: reverseFuncMap["ListAccounts"],
|
||||
Params: []interface{}{},
|
||||
@ -810,7 +810,7 @@ func (c *ClientJSON) ListAccounts() (*ctypes.ResponseListAccounts, error) {
|
||||
}
|
||||
|
||||
func (c *ClientJSON) ListUnconfirmedTxs() (*ctypes.ResponseListUnconfirmedTxs, error) {
|
||||
request := rpc.RPCRequest{
|
||||
request := rpctypes.RPCRequest{
|
||||
JSONRPC: "2.0",
|
||||
Method: reverseFuncMap["ListUnconfirmedTxs"],
|
||||
Params: []interface{}{},
|
||||
@ -837,7 +837,7 @@ func (c *ClientJSON) ListUnconfirmedTxs() (*ctypes.ResponseListUnconfirmedTxs, e
|
||||
}
|
||||
|
||||
func (c *ClientJSON) ListValidators() (*ctypes.ResponseListValidators, error) {
|
||||
request := rpc.RPCRequest{
|
||||
request := rpctypes.RPCRequest{
|
||||
JSONRPC: "2.0",
|
||||
Method: reverseFuncMap["ListValidators"],
|
||||
Params: []interface{}{},
|
||||
@ -864,7 +864,7 @@ func (c *ClientJSON) ListValidators() (*ctypes.ResponseListValidators, error) {
|
||||
}
|
||||
|
||||
func (c *ClientJSON) NetInfo() (*ctypes.ResponseNetInfo, error) {
|
||||
request := rpc.RPCRequest{
|
||||
request := rpctypes.RPCRequest{
|
||||
JSONRPC: "2.0",
|
||||
Method: reverseFuncMap["NetInfo"],
|
||||
Params: []interface{}{},
|
||||
@ -891,7 +891,7 @@ func (c *ClientJSON) NetInfo() (*ctypes.ResponseNetInfo, error) {
|
||||
}
|
||||
|
||||
func (c *ClientJSON) SignTx(tx types.Tx, privAccounts []*account.PrivAccount) (*ctypes.ResponseSignTx, error) {
|
||||
request := rpc.RPCRequest{
|
||||
request := rpctypes.RPCRequest{
|
||||
JSONRPC: "2.0",
|
||||
Method: reverseFuncMap["SignTx"],
|
||||
Params: []interface{}{tx, privAccounts},
|
||||
@ -918,7 +918,7 @@ func (c *ClientJSON) SignTx(tx types.Tx, privAccounts []*account.PrivAccount) (*
|
||||
}
|
||||
|
||||
func (c *ClientJSON) Status() (*ctypes.ResponseStatus, error) {
|
||||
request := rpc.RPCRequest{
|
||||
request := rpctypes.RPCRequest{
|
||||
JSONRPC: "2.0",
|
||||
Method: reverseFuncMap["Status"],
|
||||
Params: []interface{}{},
|
||||
|
@ -2,7 +2,7 @@ package core_client
|
||||
|
||||
import (
|
||||
"github.com/gorilla/websocket"
|
||||
"github.com/tendermint/tendermint/rpc"
|
||||
rpctypes "github.com/tendermint/tendermint/rpc/types"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
@ -32,7 +32,7 @@ func (wsc *WSClient) Dial() (*http.Response, error) {
|
||||
|
||||
// subscribe to an event
|
||||
func (wsc *WSClient) Subscribe(eventid string) error {
|
||||
return wsc.conn.WriteJSON(rpc.WSRequest{
|
||||
return wsc.conn.WriteJSON(rpctypes.WSRequest{
|
||||
Type: "subscribe",
|
||||
Event: eventid,
|
||||
})
|
||||
@ -40,7 +40,7 @@ func (wsc *WSClient) Subscribe(eventid string) error {
|
||||
|
||||
// unsubscribe from an event
|
||||
func (wsc *WSClient) Unsubscribe(eventid string) error {
|
||||
return wsc.conn.WriteJSON(rpc.WSRequest{
|
||||
return wsc.conn.WriteJSON(rpctypes.WSRequest{
|
||||
Type: "unsubscribe",
|
||||
Event: eventid,
|
||||
})
|
||||
|
@ -1,7 +0,0 @@
|
||||
package rpc
|
||||
|
||||
import (
|
||||
"github.com/tendermint/log15"
|
||||
)
|
||||
|
||||
var log = log15.New("module", "rpc")
|
@ -1,4 +1,4 @@
|
||||
package rpc
|
||||
package rpcserver
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
@ -8,6 +8,7 @@ import (
|
||||
"github.com/gorilla/websocket"
|
||||
"github.com/tendermint/tendermint/binary"
|
||||
"github.com/tendermint/tendermint/events"
|
||||
. "github.com/tendermint/tendermint/rpc/types"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
"reflect"
|
||||
@ -205,19 +206,6 @@ const (
|
||||
WriteChanBufferSize = 10
|
||||
)
|
||||
|
||||
// for requests coming in
|
||||
type WSRequest struct {
|
||||
Type string `json:"type"` // subscribe or unsubscribe
|
||||
Event string `json:"event"`
|
||||
}
|
||||
|
||||
// for responses going out
|
||||
type WSResponse struct {
|
||||
Event string `json:"event"`
|
||||
Data interface{} `json:"data"`
|
||||
Error string `json:"error"`
|
||||
}
|
||||
|
||||
// a single websocket connection
|
||||
// contains listener id, underlying ws connection,
|
||||
// and the event switch for subscribing to events
|
@ -1,4 +1,4 @@
|
||||
package rpc
|
||||
package rpcserver
|
||||
|
||||
import (
|
||||
"encoding/hex"
|
||||
@ -6,6 +6,8 @@ import (
|
||||
"net/http"
|
||||
"regexp"
|
||||
"strconv"
|
||||
|
||||
. "github.com/tendermint/tendermint/rpc/types"
|
||||
)
|
||||
|
||||
var (
|
@ -1,5 +1,5 @@
|
||||
// Commons for HTTP handling
|
||||
package rpc
|
||||
package rpcserver
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
@ -13,6 +13,7 @@ import (
|
||||
"github.com/tendermint/tendermint/alert"
|
||||
"github.com/tendermint/tendermint/binary"
|
||||
. "github.com/tendermint/tendermint/common"
|
||||
. "github.com/tendermint/tendermint/rpc/types"
|
||||
)
|
||||
|
||||
func StartHTTPServer(listenAddr string, handler http.Handler) {
|
7
rpc/server/log.go
Normal file
7
rpc/server/log.go
Normal file
@ -0,0 +1,7 @@
|
||||
package rpcserver
|
||||
|
||||
import (
|
||||
"github.com/tendermint/log15"
|
||||
)
|
||||
|
||||
var log = log15.New("module", "rpcserver")
|
@ -6,7 +6,7 @@ import (
|
||||
"github.com/gorilla/websocket"
|
||||
"github.com/tendermint/tendermint/account"
|
||||
"github.com/tendermint/tendermint/binary"
|
||||
"github.com/tendermint/tendermint/rpc"
|
||||
"github.com/tendermint/tendermint/rpc/types"
|
||||
"github.com/tendermint/tendermint/types"
|
||||
"net/http"
|
||||
"testing"
|
||||
@ -30,7 +30,7 @@ func newWSCon(t *testing.T) *websocket.Conn {
|
||||
|
||||
// subscribe to an event
|
||||
func subscribe(t *testing.T, con *websocket.Conn, eventid string) {
|
||||
err := con.WriteJSON(rpc.WSRequest{
|
||||
err := con.WriteJSON(rpctypes.WSRequest{
|
||||
Type: "subscribe",
|
||||
Event: eventid,
|
||||
})
|
||||
@ -41,7 +41,7 @@ func subscribe(t *testing.T, con *websocket.Conn, eventid string) {
|
||||
|
||||
// unsubscribe from an event
|
||||
func unsubscribe(t *testing.T, con *websocket.Conn, eventid string) {
|
||||
err := con.WriteJSON(rpc.WSRequest{
|
||||
err := con.WriteJSON(rpctypes.WSRequest{
|
||||
Type: "unsubscribe",
|
||||
Event: eventid,
|
||||
})
|
||||
|
@ -1,4 +1,4 @@
|
||||
package rpc
|
||||
package rpctypes
|
||||
|
||||
type RPCRequest struct {
|
||||
JSONRPC string `json:"jsonrpc"`
|
||||
@ -25,3 +25,16 @@ func NewRPCResponse(res interface{}, err string) RPCResponse {
|
||||
JSONRPC: "2.0",
|
||||
}
|
||||
}
|
||||
|
||||
// for requests coming in
|
||||
type WSRequest struct {
|
||||
Type string `json:"type"` // subscribe or unsubscribe
|
||||
Event string `json:"event"`
|
||||
}
|
||||
|
||||
// for responses going out
|
||||
type WSResponse struct {
|
||||
Event string `json:"event"`
|
||||
Data interface{} `json:"data"`
|
||||
Error string `json:"error"`
|
||||
}
|
Reference in New Issue
Block a user