From fd317a55cba975a8438863abdfaa7b76bd075c5c Mon Sep 17 00:00:00 2001 From: Csaba Kiraly Date: Wed, 10 May 2023 16:12:33 +0200 Subject: [PATCH] add simple send functionality Signed-off-by: Csaba Kiraly --- .../private/eth/p2p/discoveryv5/transport.nim | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/libp2pdht/private/eth/p2p/discoveryv5/transport.nim b/libp2pdht/private/eth/p2p/discoveryv5/transport.nim index a6f5887..0f60d14 100644 --- a/libp2pdht/private/eth/p2p/discoveryv5/transport.nim +++ b/libp2pdht/private/eth/p2p/discoveryv5/transport.nim @@ -6,7 +6,7 @@ # Everything below the handling of ordinary messages import - std/[tables, options], + std/[tables, options, deques], bearssl/rand, chronos, chronicles, @@ -28,16 +28,27 @@ type DatagramTransport = ref object udata*: pointer # User-driven pointer local: TransportAddress # Local address + function: DatagramCallback # Receive data callback + ingress: Deque[seq[byte]] var network = initTable[Port, DatagramTransport]() +proc `$`*(transp: DatagramTransport): string = + $transp.local + proc sendTo*[T](transp: DatagramTransport, remote: TransportAddress, msg: sink seq[T], msglen = -1) {.async.} = echo "sending to ", remote + {.gcsafe.}: + network[remote.port].ingress.addLast(msg) + # call the callback on remote + asyncCheck network[remote.port].function(network[remote.port], transp.local) + proc getMessage*(t: DatagramTransport,): seq[byte] {. raises: [Defect, CatchableError].} = echo "getMessage " + t.ingress.popFirst() proc close*(transp: DatagramTransport) = echo "close" @@ -62,6 +73,7 @@ proc newDatagramTransport*[T](cbproc: DatagramCallback, GC_ref(udata) result.udata = cast[pointer](udata) result.local = local + result.function = cbproc {.gcsafe.}: network[local.port] = result