import chronos, nimcrypto, strutils, os import ../libp2p/daemon/daemonapi const PubSubTopic = "test-net" proc main(bn: string) {.async.} = echo "= Starting P2P node" var bootnodes = bn.split(",") var api = await newDaemonApi({DHTFull, PSGossipSub, WaitBootstrap}, bootstrapNodes = bootnodes, peersRequired = 1) var id = await api.identity() echo "= P2P node ", id.peer.pretty(), " started:" for item in id.addresses: echo item proc pubsubLogger(api: DaemonAPI, ticket: PubsubTicket, message: PubSubMessage): Future[bool] {.async.} = let msglen = len(message.data) echo "= Recieved pubsub message with length ", msglen, " bytes from peer ", message.peer.pretty(), ": " var strdata = cast[string](message.data) echo strdata result = true var ticket = await api.pubsubSubscribe(PubSubTopic, pubsubLogger) # Waiting for gossipsub interval while true: var peers = await api.pubsubListPeers(PubSubTopic) if len(peers) > 0: break await sleepAsync(1000) var data = "HELLO\r\n" var msgData = cast[seq[byte]](data) await api.pubsubPublish(PubSubTopic, msgData) when isMainModule: if paramCount() != 1: echo "Please supply bootnodes!" else: waitFor(main(paramStr(1))) while true: poll()