summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorDominik Picheta <dominikpicheta@googlemail.com>2014-04-02 21:28:45 +0100
committerDominik Picheta <dominikpicheta@googlemail.com>2014-04-02 21:28:45 +0100
commite4e87f1cb2fe01a4462f7b0e3d347389f173beff (patch)
tree1fddbea3d5bb827799e303d4c33dcd873a509214
parent5dc28cc9a782ee928551485ebab95f3bbae31eed (diff)
downloadNim-e4e87f1cb2fe01a4462f7b0e3d347389f173beff.tar.gz
Refactored createCb in asyncdispatch.
-rw-r--r--lib/pure/asyncdispatch.nim30
-rw-r--r--lib/pure/httpclient.nim19
2 files changed, 14 insertions, 35 deletions
diff --git a/lib/pure/asyncdispatch.nim b/lib/pure/asyncdispatch.nim
index 344652c9f..2c00f4b59 100644
--- a/lib/pure/asyncdispatch.nim
+++ b/lib/pure/asyncdispatch.nim
@@ -739,14 +739,16 @@ proc accept*(socket: TAsyncFD): PFuture[TAsyncFD] =
 
 # -- Await Macro
 
-template createCb*(cbName, varNameIterSym, retFutureSym: expr): stmt {.immediate, dirty.} =
-  proc cbName {.closure.} =
-    if not varNameIterSym.finished:
-      var next = varNameIterSym()
+template createCb*(retFutureSym, iteratorNameSym: expr): stmt {.immediate.} =
+  var nameIterVar = iteratorNameSym
+  proc cb {.closure.} =
+    if not nameIterVar.finished:
+      var next = nameIterVar()
       if next == nil:
         assert retFutureSym.finished, "Async procedure's return Future was not finished."
       else:
-        next.callback = cbName
+        next.callback = cb
+  cb()
 
 template createVar(futSymName: string, asyncProc: PNimrodNode,
                    valueReceiver: expr) {.immediate, dirty.} =
@@ -876,25 +878,11 @@ macro async*(prc: stmt): stmt {.immediate.} =
   closureIterator[4] = newNimNode(nnkPragma).add(newIdentNode("closure"))
   outerProcBody.add(closureIterator)
 
-  # -> var nameIterVar = nameIter
-  # -> var first = nameIterVar()
-  var varNameIterSym = genSym(nskVar, $prc[0].getName & "IterVar")
-  var varNameIter = newVarStmt(varNameIterSym, iteratorNameSym)
-  outerProcBody.add varNameIter
-  var varFirstSym = genSym(nskVar, "first")
-  var varFirst = newVarStmt(varFirstSym, newCall(varNameIterSym))
-  outerProcBody.add varFirst
-
-  # -> createCb(cb, nameIter, retFuture)
+  # -> createCb(retFuture)
   var cbName = newIdentNode("cb")
-  var procCb = newCall("createCb", cbName, varNameIterSym, retFutureSym)
+  var procCb = newCall("createCb", retFutureSym, iteratorNameSym)
   outerProcBody.add procCb
 
-  # -> first.callback = cb
-  outerProcBody.add newAssignment(
-    newDotExpr(varFirstSym, newIdentNode("callback")),
-    cbName)
-
   # -> return retFuture
   outerProcBody.add newNimNode(nnkReturnStmt).add(retFutureSym)
   
diff --git a/lib/pure/httpclient.nim b/lib/pure/httpclient.nim
index 62d9bea7c..9799821ae 100644
--- a/lib/pure/httpclient.nim
+++ b/lib/pure/httpclient.nim
@@ -432,7 +432,6 @@ proc generateHeaders(r: TURL, httpMethod: THttpMethod,
 type
   PAsyncHttpClient = ref object
     socket: PAsyncSocket
-    connected: bool
     currentURL: TURL ## Where we are currently connected.
     headers: PStringTable
     userAgent: string
@@ -548,24 +547,16 @@ proc parseResponse(client: PAsyncHttpClient,
   else:
     result.body = ""
 
-proc close*(client: PAsyncHttpClient) =
-  ## Closes any connections held by the HttpClient.
-  if client.connected:
-    client.socket.close()
-    client.connected = false
-    #client.socket = newAsyncSocket()
-
 proc newConnection(client: PAsyncHttpClient, url: TURL) {.async.} =
-  if not client.connected or client.currentURL.hostname != url.hostname or
+  if client.currentURL.hostname != url.hostname or
       client.currentURL.scheme != url.scheme:
-    if client.connected: client.close()
     if url.scheme == "https":
       assert false, "TODO SSL"
 
     # TODO: I should be able to write 'net.TPort' here...
     let port =
       if url.port == "": rawsockets.TPort(80)
-      else: rawsockets.TPort(url.port.parseInt)
+      else: rawsockets.TPort(url.port.parseInt) 
     
     await client.socket.connect(url.hostname, port)
     client.currentURL = url
@@ -597,10 +588,10 @@ when isMainModule:
       echo("Body:\n")
       echo(resp.body)
 
-      #var resp1 = await client.request("http://freenode.net")
-      #echo("Got response: ", resp1.status)
+      var resp1 = await client.request("http://picheta.me/aboutme.html")
+      echo("Got response: ", resp1.status)
 
-      var resp2 = await client.request("http://picheta.me/aasfasgf.html")
+      var resp2 = await client.request("http://picheta.me/aboutme.html")
       echo("Got response: ", resp2.status)
     main()
     runForever()