gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] [gnunet-nim] branch master updated: make cadetConnect an as


From: gnunet
Subject: [GNUnet-SVN] [gnunet-nim] branch master updated: make cadetConnect an async proc
Date: Tue, 24 Jul 2018 00:54:16 +0200

This is an automated email from the git hooks/post-receive script.

lurchi pushed a commit to branch master
in repository gnunet-nim.

The following commit(s) were added to refs/heads/master by this push:
     new 17e81f3  make cadetConnect an async proc
17e81f3 is described below

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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]