This is my code (but it obviously blocks everything).
var server = newAsyncHttpServer()
proc handler(req: Request) {.async,gcsafe.} =
#...do some stuff
await req.respond(status.HttpCode, body, headers)
try:
echo ":: Starting server on port " & $(port) & "...\n"
waitFor server.serve(port = port.Port, callback = handler, address = "")
except:
let e = getCurrentException()
echo "Something went wrong." & e.msg
server.close()
How is it possible to execute the program as usual, AFTER calling serve?
using waitFor blocks, so only do that if you want to block, otherwise hold onto the Future returned by server.serve
template handle_server_error()=
let e = getCurrentException()
echo "Something went wrong." & e.msg
server.close()
var server_future:Future[void]
try:
echo ":: Starting server on port " & $(port) & "...\n"
server_future = server.serve(port = port.Port, callback = handler, address = "")
except:
handle_server_error
echo "do some more work"
try:
waitFor server_future
except:
handle_server_error