1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- # bug 2007
- import asyncdispatch, asyncnet, logging, json, uri, strutils, sugar
- type
- Builder = ref object
- client: Client
- build: Build
- ProgressCB* = proc (message: string): Future[void] {.closure, gcsafe.}
- Build* = ref object
- onProgress*: ProgressCB
- Client = ref ClientObj
- ClientObj = object
- onMessage: proc (client: Client, msg: JsonNode): Future[void]
- proc newClient*(name: string,
- onMessage: (Client, JsonNode) -> Future[void]): Client =
- new result
- result.onMessage = onMessage
- proc newBuild*(onProgress: ProgressCB): Build =
- new result
- result.onProgress = onProgress
- proc start(build: Build, repo, hash: string) {.async.} =
- let path = repo.parseUri().path.toLowerAscii()
- proc onProgress(builder: Builder, message: string) {.async.} =
- debug($message)
- proc onMessage(builder: Builder, message: JsonNode) {.async.} =
- debug("onMessage")
- proc newBuilder(): Builder =
- var cres: Builder
- new cres
- cres.client = newClient("builder", (client, msg) => (onMessage(cres, msg)))
- cres.build = newBuild(
- proc (msg: string): Future[void] {.closure, gcsafe.} = onProgress(cres, msg))
- return cres
- proc main() =
- # Set up logging.
- var console = newConsoleLogger(fmtStr = verboseFmtStr)
- addHandler(console)
- var builder = newBuilder()
- # Test {.async.} pragma with do notation: #5995
- builder.client = newClient("builder") do(client: Client, msg: JsonNode) {.async.}:
- await onMessage(builder, msg)
- main()
|