[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] [gnunet-nim] 11/61: make cadetConnect an async proc
From: |
gnunet |
Subject: |
[GNUnet-SVN] [gnunet-nim] 11/61: make cadetConnect an async proc |
Date: |
Sat, 13 Apr 2019 13:35:46 +0200 |
This is an automated email from the git hooks/post-receive script.
ng0 pushed a commit to branch master
in repository gnunet-nim.
commit 17e81f3e6c0a195a178fa079b842fe22f2cb045a
Author: lurchi <address@hidden>
AuthorDate: Tue Jul 24 00:54:01 2018 +0200
make cadetConnect an async proc
---
asynccadet.nim | 20 ++++++++++++++++----
gnunet_application.nim | 13 +++++++------
gnunet_nim.nim | 6 +++++-
gnunet_scheduler_lib.nim | 4 ++++
4 files changed, 32 insertions(+), 11 deletions(-)
diff --git a/asynccadet.nim b/asynccadet.nim
index e3148f8..0ba6626 100644
--- a/asynccadet.nim
+++ b/asynccadet.nim
@@ -1,9 +1,9 @@
import
- gnunet_cadet_service, gnunet_types, gnunet_mq_lib, gnunet_crypto_lib,
gnunet_protocols
+ gnunet_cadet_service, gnunet_types, gnunet_mq_lib, gnunet_crypto_lib,
gnunet_protocols, gnunet_scheduler_lib, gnunet_configuration_lib
import
gnunet_application
import
- asyncdispatch, posix
+ asyncdispatch, posix, tables
type
CadetHandle = object
@@ -46,6 +46,10 @@ proc channelMessageCheckCb(cls: pointer,
messageHeader: ptr GNUNET_MessageHeader): cint
{.cdecl.} =
result = GNUNET_OK
+proc cadetConnectCb(cls: pointer) {.cdecl.} =
+ let event = cast[AsyncEvent](cls)
+ event.trigger()
+
proc messageHandlers(): array[2, GNUNET_MQ_MessageHandler] =
result = [
GNUNET_MQ_MessageHandler(mv: channelMessageCheckCb,
@@ -72,8 +76,16 @@ proc sendMessage*(channel: CadetChannel, payload: seq[byte])
=
GNUNET_MESSAGE_TYPE_CADET_CLI)
GNUNET_MQ_send(GNUNET_CADET_get_mq(channel.handle), envelope)
-proc connectCadet*(app: GnunetApplication): CadetHandle =
- result = CadetHandle(handle: GNUNET_CADET_connect(app.configHandle))
+proc connectCadet*(app: GnunetApplication): Future[CadetHandle] =
+ let future = newFuture[CadetHandle]("connectCadet")
+ var event = newAsyncEvent()
+ discard GNUNET_SCHEDULER_add_now(cadetConnectCb, addr event)
+ proc eventCb(fd: AsyncFd): bool =
+ let cadetHandle = CadetHandle(handle:
GNUNET_CADET_connect(app.configHandle))
+ future.complete(cadetHandle)
+ true
+ addEvent(event, eventCb)
+ return future
proc openPort*(handle: CadetHandle, port: string): CadetPort =
result = CadetPort(handle: nil,
diff --git a/gnunet_application.nim b/gnunet_application.nim
index f43a272..b06b161 100644
--- a/gnunet_application.nim
+++ b/gnunet_application.nim
@@ -4,12 +4,13 @@ import gnunet_time_lib
import gnunet_configuration_lib
import asyncdispatch, tables, logging
-type GnunetApplication* = object
- timeoutUs: uint64
- tasks: Table[ptr GNUNET_SCHEDULER_Task, ptr GNUNET_SCHEDULER_FdInfo]
- schedulerDriver: GNUNET_SCHEDULER_Driver
- schedulerHandle: ptr GNUNET_SCHEDULER_Handle
- configHandle*: ptr GNUNET_CONFIGURATION_Handle
+type
+ GnunetApplication* = object
+ timeoutUs: uint64
+ tasks: Table[ptr GNUNET_SCHEDULER_Task, ptr GNUNET_SCHEDULER_FdInfo]
+ schedulerDriver: GNUNET_SCHEDULER_Driver
+ schedulerHandle: ptr GNUNET_SCHEDULER_Handle
+ configHandle*: ptr GNUNET_CONFIGURATION_Handle
proc schedulerAdd(cls: pointer,
task: ptr GNUNET_SCHEDULER_Task,
diff --git a/gnunet_nim.nim b/gnunet_nim.nim
index 362ae81..2e8d89c 100644
--- a/gnunet_nim.nim
+++ b/gnunet_nim.nim
@@ -2,9 +2,13 @@ import gnunet_application
import asyncdispatch
import asynccadet
+proc firstTask(gnunetApp: GnunetApplication) {.async.} =
+ let cadet = await gnunetApp.connectCadet()
+ echo "hello"
+
proc main() =
var gnunetApp = initGnunetApplication("~/.gnunet/gnunet.conf")
- var cadet = gnunetApp.connectCadet()
+ asyncCheck firstTask(gnunetApp)
try:
while true:
poll(gnunetApp.millisecondsUntilTimeout())
diff --git a/gnunet_scheduler_lib.nim b/gnunet_scheduler_lib.nim
index ecd54ac..f596b28 100644
--- a/gnunet_scheduler_lib.nim
+++ b/gnunet_scheduler_lib.nim
@@ -81,3 +81,7 @@ proc GNUNET_SCHEDULER_driver_done*(sh: ptr
GNUNET_SCHEDULER_Handle) {.cdecl,
proc GNUNET_SCHEDULER_shutdown*() {.cdecl, importc:
"GNUNET_SCHEDULER_shutdown",
dynlib: libname.}
+proc GNUNET_SCHEDULER_add_now*(task: GNUNET_SCHEDULER_TaskCallback;
+ task_cls: pointer): ptr GNUNET_SCHEDULER_Task
{.cdecl,
+ importc: "GNUNET_SCHEDULER_add_now", dynlib: libname.}
+
--
To stop receiving notification emails like this one, please contact
address@hidden
- [GNUnet-SVN] [gnunet-nim] 03/61: add sample gnunet config, (continued)
- [GNUnet-SVN] [gnunet-nim] 03/61: add sample gnunet config, gnunet, 2019/04/13
- [GNUnet-SVN] [gnunet-nim] 05/61: .gitignore: fix typo, gnunet, 2019/04/13
- [GNUnet-SVN] [gnunet-nim] 04/61: .gitignore: ignore the main binary, and nim_cache directory, gnunet, 2019/04/13
- [GNUnet-SVN] [gnunet-nim] 01/61: license for lurchi's code, gnunet, 2019/04/13
- [GNUnet-SVN] [gnunet-nim] 06/61: .gitignore: fix syntax error, gnunet, 2019/04/13
- [GNUnet-SVN] [gnunet-nim] 07/61: add asynccadet code (does not compile yet), gnunet, 2019/04/13
- [GNUnet-SVN] [gnunet-nim] 19/61: make the cleanup proc the finalizer (no explicit call necessary anymore), gnunet, 2019/04/13
- [GNUnet-SVN] [gnunet-nim] 13/61: connection to cadet service successful, gnunet, 2019/04/13
- [GNUnet-SVN] [gnunet-nim] 15/61: use the bundled gnunet.conf, gnunet, 2019/04/13
- [GNUnet-SVN] [gnunet-nim] 20/61: let's try out ports and channels, gnunet, 2019/04/13
- [GNUnet-SVN] [gnunet-nim] 11/61: make cadetConnect an async proc,
gnunet <=
- [GNUnet-SVN] [gnunet-nim] 39/61: add shutdown procedure, gnunet, 2019/04/13
- [GNUnet-SVN] [gnunet-nim] 30/61: gitignore: add gnunet generated files and folders, gnunet, 2019/04/13
- [GNUnet-SVN] [gnunet-nim] 27/61: cli option: add option to specify gnunet config, gnunet, 2019/04/13
- [GNUnet-SVN] [gnunet-nim] 14/61: don't use AsyncEvent but store Futures in GnunetApplication, gnunet, 2019/04/13
- [GNUnet-SVN] [gnunet-nim] 22/61: we get notified about an incoming CADET channel (and then we crash), gnunet, 2019/04/13
- [GNUnet-SVN] [gnunet-nim] 24/61: command line parsing; application code for creating channel, gnunet, 2019/04/13
- [GNUnet-SVN] [gnunet-nim] 17/61: Merge branch 'master' of ssh://gnunet.org/gnunet-nim, gnunet, 2019/04/13
- [GNUnet-SVN] [gnunet-nim] 16/61: disconnect after connecting (shuts down the application), gnunet, 2019/04/13
- [GNUnet-SVN] [gnunet-nim] 12/61: fix segfaults using heap allocation, gnunet, 2019/04/13
- [GNUnet-SVN] [gnunet-nim] 08/61: Merge branch 'master' of ssh://gnunet.org/gnunet-nim, gnunet, 2019/04/13