diff options
author | Dominik Picheta <dominikpicheta@googlemail.com> | 2014-04-02 21:28:45 +0100 |
---|---|---|
committer | Dominik Picheta <dominikpicheta@googlemail.com> | 2014-04-02 21:28:45 +0100 |
commit | e4e87f1cb2fe01a4462f7b0e3d347389f173beff (patch) | |
tree | 1fddbea3d5bb827799e303d4c33dcd873a509214 | |
parent | 5dc28cc9a782ee928551485ebab95f3bbae31eed (diff) | |
download | Nim-e4e87f1cb2fe01a4462f7b0e3d347389f173beff.tar.gz |
Refactored createCb in asyncdispatch.
-rw-r--r-- | lib/pure/asyncdispatch.nim | 30 | ||||
-rw-r--r-- | lib/pure/httpclient.nim | 19 |
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() |