mirror of
https://github.com/codex-storage/nim-codex-dht.git
synced 2025-02-12 03:47:07 +00:00
remove global network var
This commit is contained in:
parent
70c2d28b89
commit
50c7695397
@ -31,18 +31,9 @@ type
|
|||||||
function: DatagramCallback # Receive data callback
|
function: DatagramCallback # Receive data callback
|
||||||
ingress: Deque[seq[byte]]
|
ingress: Deque[seq[byte]]
|
||||||
|
|
||||||
var network = initTable[Port, DatagramTransport]()
|
|
||||||
|
|
||||||
proc `$`*(transp: DatagramTransport): string =
|
proc `$`*(transp: DatagramTransport): string =
|
||||||
$transp.local
|
$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] {.
|
proc getMessage*(t: DatagramTransport,): seq[byte] {.
|
||||||
@ -74,8 +65,6 @@ proc newDatagramTransport*[T](cbproc: DatagramCallback,
|
|||||||
result.udata = cast[pointer](udata)
|
result.udata = cast[pointer](udata)
|
||||||
result.local = local
|
result.local = local
|
||||||
result.function = cbproc
|
result.function = cbproc
|
||||||
{.gcsafe.}:
|
|
||||||
network[local.port] = result
|
|
||||||
|
|
||||||
|
|
||||||
type
|
type
|
||||||
@ -86,15 +75,23 @@ type
|
|||||||
pendingRequests: Table[AESGCMNonce, PendingRequest]
|
pendingRequests: Table[AESGCMNonce, PendingRequest]
|
||||||
codec*: Codec
|
codec*: Codec
|
||||||
rng: ref HmacDrbgContext
|
rng: ref HmacDrbgContext
|
||||||
|
network: Table[Port, DatagramTransport]
|
||||||
|
|
||||||
PendingRequest = object
|
PendingRequest = object
|
||||||
node: Node
|
node: Node
|
||||||
message: seq[byte]
|
message: seq[byte]
|
||||||
|
|
||||||
|
proc sendTo*[T](t: Transport, remote: TransportAddress,
|
||||||
|
msg: sink seq[T], msglen = -1) {.async.} =
|
||||||
|
echo "sending to ", remote
|
||||||
|
t.network[remote.port].ingress.addLast(msg)
|
||||||
|
# call the callback on remote
|
||||||
|
asyncCheck t.network[remote.port].function(t.network[remote.port], t.transp.local)
|
||||||
|
|
||||||
proc sendToA(t: Transport, a: Address, data: seq[byte]) =
|
proc sendToA(t: Transport, a: Address, data: seq[byte]) =
|
||||||
trace "Send packet", myport = t.bindAddress.port, address = a
|
trace "Send packet", myport = t.bindAddress.port, address = a
|
||||||
let ta = initTAddress(a.ip, a.port)
|
let ta = initTAddress(a.ip, a.port)
|
||||||
let f = t.transp.sendTo(ta, data)
|
let f = t.sendTo(ta, data)
|
||||||
f.callback = proc(data: pointer) {.gcsafe.} =
|
f.callback = proc(data: pointer) {.gcsafe.} =
|
||||||
if f.failed:
|
if f.failed:
|
||||||
# Could be `TransportUseClosedError` in case the transport is already
|
# Could be `TransportUseClosedError` in case the transport is already
|
||||||
@ -245,6 +242,7 @@ proc open*[T](t: Transport[T]) {.raises: [Defect, CatchableError].} =
|
|||||||
# TODO allow binding to specific IP / IPv6 / etc
|
# TODO allow binding to specific IP / IPv6 / etc
|
||||||
let ta = initTAddress(t.bindAddress.ip, t.bindAddress.port)
|
let ta = initTAddress(t.bindAddress.ip, t.bindAddress.port)
|
||||||
t.transp = newDatagramTransport(processClient[T], udata = t, local = ta)
|
t.transp = newDatagramTransport(processClient[T], udata = t, local = ta)
|
||||||
|
t.network[t.bindAddress.port] = t.transp
|
||||||
|
|
||||||
proc close*(t: Transport) =
|
proc close*(t: Transport) =
|
||||||
t.transp.close
|
t.transp.close
|
||||||
@ -273,4 +271,5 @@ proc newTransport*[T](
|
|||||||
localNode: localNode,
|
localNode: localNode,
|
||||||
privKey: privKey,
|
privKey: privKey,
|
||||||
sessions: Sessions.init(256)),
|
sessions: Sessions.init(256)),
|
||||||
rng: rng)
|
rng: rng,
|
||||||
|
network: initTable[Port, DatagramTransport]())
|
||||||
|
Loading…
x
Reference in New Issue
Block a user