mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-28 17:04:41 +00:00
59 lines
1.5 KiB
Nim
59 lines
1.5 KiB
Nim
|
|
# 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()
|