Fake DatagramTransport: first compile

Override Chronos DatagramTransport with a fake one

Signed-off-by: Csaba Kiraly <csaba.kiraly@gmail.com>
This commit is contained in:
Csaba Kiraly 2023-05-10 11:51:40 +02:00
parent 7956898882
commit b1957f4b60
No known key found for this signature in database
GPG Key ID: 0FE274EE8C95166E

View File

@ -20,6 +20,46 @@ const
responseTimeout* = 4.seconds ## timeout for the response of a request-response
## call
type
DatagramCallback* = proc(transp: DatagramTransport,
remote: TransportAddress): Future[void] {.
gcsafe, raises: [Defect].}
DatagramTransport = ref object
udata*: pointer # User-driven pointer
proc sendTo*[T](transp: DatagramTransport, remote: TransportAddress,
msg: sink seq[T], msglen = -1) {.async.} =
echo "sending to ", remote
proc getMessage*(t: DatagramTransport,): seq[byte] {.
raises: [Defect, CatchableError].} =
echo "getMessage "
proc close*(transp: DatagramTransport) =
echo "close"
proc closed*(transp: DatagramTransport): bool {.inline.} =
result = false
proc closeWait*(transp: DatagramTransport) {.async.} =
echo "closeWait "
proc getUserData*[T](transp: DatagramTransport): T {.inline.} =
## Obtain user data stored in ``transp`` object.
result = cast[T](transp.udata)
proc newFakeDatagramTransport*[T](cbproc: DatagramCallback,
udata: ref T,
local: TransportAddress = AnyAddress,
): DatagramTransport {.
raises: [Defect, CatchableError].} =
echo "new"
result = DatagramTransport()
GC_ref(udata)
result.udata = cast[pointer](udata)
type
Transport* [Client] = ref object
client: Client
@ -186,7 +226,7 @@ proc open*[T](t: Transport[T]) {.raises: [Defect, CatchableError].} =
# TODO allow binding to specific IP / IPv6 / etc
let ta = initTAddress(t.bindAddress.ip, t.bindAddress.port)
t.transp = newDatagramTransport(processClient[T], udata = t, local = ta)
t.transp = newFakeDatagramTransport(processClient[T], udata = t, local = ta)
proc close*(t: Transport) =
t.transp.close