初めまして。
今回初めてAdventCalenderを書くにあたって、この辺から適当にサンプル引っ張って来ます。
動作環境
- Ubuntu 17.10
- Nim 0.17.2
普通のファイル読み込みです。
readfile.nim
import asyncfile, asyncdispatch, os
const log = "/var/log/mylog"
proc main() {.async.} =
let file = openAsync(log, fmRead)
let data = await file.readAll()
echo data
file.close()
waitFor main()
nim c --hints:off -r readfile.nim
FutureStreamを使う場合です。
ただし、ファイル終端に達した時点で終了する模様で、追加されたのを検知できなようです。
FutureStreamの定義がどこにあるのかわからず
fsstream.nim
import asyncfile, asyncdispatch, os
const log = "/var/log/mylog"
proc main() {.async.} =
var fs = newFutureStream[string]()
let file = openAsync(log, fmRead)
discard file.readToStream(fs)
while not fs.finished:
let (hasValue, value) = await fs.read()
if hasValue:
echo(value)
file.close()
waitFor main()
AsyncSocketの使い方です。
socket.nim
import asyncnet, asyncdispatch, streams, os, net
proc processClient(client: AsyncSocket) {.async.} =
while true:
let line = await client.recvLine()
if line == "" or line == "\r\n":
break
echo line
proc serve() {.async.} =
var server = newAsyncSocket()
server.setSockOpt(OptReuseAddr, true)
server.bindAddr(Port(8080))
server.listen()
while true:
let client = await server.accept()
asyncCheck processClient(client)
asyncCheck serve()
runForever()
以上です。