Add support for subscribe JSON RPC

- psot subscriptions
- get messages
This commit is contained in:
Oskar Thoren 2021-06-10 21:53:58 +08:00
parent 3f6a5f8dd0
commit 452d4c5304
No known key found for this signature in database
GPG Key ID: B2ECCFD3BC2EF77E
2 changed files with 32 additions and 7 deletions

View File

@ -27,19 +27,29 @@ func main() {
// Assumes node started
client, _ := rpc.Dial("http://127.0.0.1:8545")
var defaultTopic = "/waku/2/default-waku/proto"
var contentTopic = "/toy-chat/2/huilong/proto"
// Get node info
var wakuInfo = nwaku.GetWakuDebugInfo(client)
fmt.Println("WakuInfo ListenStr", wakuInfo.ListenStr)
// Query messages
var contentTopic = "/toy-chat/2/huilong/proto"
var storeResponse, _ = nwaku.GetWakuStoreMessages(client, contentTopic)
fmt.Println("Fetched", len(storeResponse.Messages), "messages")
// Subscribe
var res, _ = nwaku.PostWakuRelaySubscriptions(client, []string{defaultTopic})
fmt.Println("Subscribe", res)
// Publish
var message = nwaku.WakuRelayMessage{Payload: "0x1a2b3c4d5e6f", ContentTopic: contentTopic}
var res, _ = nwaku.PostWakuRelayMessage(client, message)
fmt.Println("Publish", res)
var res2, _ = nwaku.PostWakuRelayMessage(client, message)
fmt.Println("Publish", res2)
// Get messages
var wakuMessages, _ = nwaku.GetWakuRelayMessages(client, defaultTopic)
fmt.Println("Get messages", wakuMessages)
<-nodeStopped
log.Printf("exiting main")

View File

@ -39,10 +39,25 @@ func PostWakuRelayMessage(client *rpc.Client, message WakuRelayMessage) (bool, e
return res, nil
}
// TODO Subscribe, then poll for getting messages
// https://rfc.vac.dev/spec/16/#post_waku_v2_relay_v1_subscriptions
// https://rfc.vac.dev/spec/16/#get_waku_v2_relay_v1_messages
// For now, just use query and publish
func PostWakuRelaySubscriptions(client *rpc.Client, topics []string) (bool, error) {
var res bool
if err := client.Call(&res, "post_waku_v2_relay_v1_subscriptions", topics); err != nil {
return res, err
}
return res, nil
}
func GetWakuRelayMessages(client *rpc.Client, topic string) ([]WakuMessage, error) {
var res []WakuMessage
if err := client.Call(&res, "get_waku_v2_relay_v1_messages", topic); err != nil {
return res, err
}
return res, nil
}
// General things that can be improved:
// - Generalized with different transports (HTTP, IPC, WS etc), see