From f7b70f81e7c5b83ea73b194730274207f55bb3be Mon Sep 17 00:00:00 2001 From: Oskar Thoren Date: Fri, 15 May 2020 11:29:01 +0800 Subject: [PATCH] Fix SIGSERV error by initializing child methods --- tests/v2/standard_setup.nim | 3 +- waku.nimble | 5 ++-- waku/protocol/v2/waku_protocol.nim | 45 +++++++++++++++++++----------- 3 files changed, 32 insertions(+), 21 deletions(-) diff --git a/tests/v2/standard_setup.nim b/tests/v2/standard_setup.nim index abbea915c..b227c58a5 100644 --- a/tests/v2/standard_setup.nim +++ b/tests/v2/standard_setup.nim @@ -42,8 +42,7 @@ proc newStandardSwitch*(privKey = none(PrivateKey), else: # Creating switch from generate node # XXX: Hacky test, hijacking WakuSub here - # XXX: If I use WakuSub here I get a SIGSERV - #echo "Using WakuSub here" + echo "Using WakuSub here" #PubSub newPubSub(FloodSub, peerInfo, triggerSelf) PubSub newPubSub(WakuSub, peerInfo, triggerSelf) diff --git a/waku.nimble b/waku.nimble index fe3df57b3..729526abb 100644 --- a/waku.nimble +++ b/waku.nimble @@ -51,8 +51,9 @@ task protocol2, "Build the experimental Waku protocol": buildBinary "waku_protocol", "waku/protocol/v2/", "-d:chronicles_log_level=DEBUG" task wakutest2, "Build Experimental Waku tests": - test "v2/test_waku" - #buildBinary "waku_test", "waku/protocol/v2/", "-d:chronicles_log_level=DEBUG --lineTrace:on --threads:on" + let name = "v2/test_waku" + buildBinary name, "tests/", "-d:chronicles_log_level=DEBUG" + exec "build/" & name task wakunode2, "Build Experimental Waku cli": buildBinary "wakunode", "waku/node/v2/", "-d:chronicles_log_level=TRACE" diff --git a/waku/protocol/v2/waku_protocol.nim b/waku/protocol/v2/waku_protocol.nim index 37bdadaf4..96f122dc4 100644 --- a/waku/protocol/v2/waku_protocol.nim +++ b/waku/protocol/v2/waku_protocol.nim @@ -9,6 +9,7 @@ import chronos, chronicles import libp2p/protocols/pubsub/pubsub, libp2p/protocols/pubsub/pubsubpeer, libp2p/protocols/pubsub/floodsub, + libp2p/protocols/pubsub/rpc/[messages, message], libp2p/connection logScope: @@ -27,6 +28,7 @@ type text*: string method init(w: WakuSub) = + debug "init" proc handler(conn: Connection, proto: string) {.async.} = ## main protocol handler that gets triggered on every ## connection for a protocol string @@ -46,29 +48,38 @@ method init(w: WakuSub) = w.handler = handler w.codec = WakuSubCodec +# method initPubSub*(w: WakuSub) = - echo "initWakuSub" + debug "initWakuSub" w.text = "Foobar" echo "w.text", w.text - echo "ok2" + # XXX + procCall FloodSub(w).initPubSub() w.init() -# Here floodsub field is a topic to remote peer map -# We also have a seen message forwarded to peers +method subscribeTopic*(w: WakuSub, + topic: string, + subscribe: bool, + peerId: string) {.gcsafe.} = + debug "subscribeTopic" + procCall FloodSub(w).subscribeTopic(topic, subscribe, peerId) -# method subscribeTopic -# method handleDisconnect -# method rpcHandler -# method init -# method publish -# method unsubscribe -# method initPubSub +method handleDisconnect*(w: WakuSub, peer: PubSubPeer) {.async.} = + debug "handleDisconnect NYI" -# To defer to parent object something like: -# procCall PubSub(f).publish(topic, data) - -# Then we should be able to write tests like floodsub test - -# Can also do in-line here +method rpcHandler*(w: WakuSub, + peer: PubSubPeer, + rpcMsgs: seq[RPCMsg]) {.async.} = + debug "rpcHandler" + await procCall FloodSub(w).rpcHandler(peer, rpcMsgs) +method publish*(w: WakuSub, + topic: string, + data: seq[byte]) {.async.} = + debug "publish" + await procCall FloodSub(w).publish(topic, data) +method unsubscribe*(w: WakuSub, + topics: seq[TopicPair]) {.async.} = + debug "unsubscribe" + await procCall FloodSub(w).unsubscribe(topics)