diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..93037b0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +test +*.exe diff --git a/README.md b/README.md index 8b13789..6452a75 100644 --- a/README.md +++ b/README.md @@ -1 +1,65 @@ +# NEWS - Nim Easy WebSocket. + +* Based on https://github.com/treeform/ws +* Support `asyncdispatch` and https://github.com/status-im/nim-chronos + +## Example Echo Server: + +Example echo server, will repeat what you send it: + +```nim +import news, asyncdispatch, asynchttpserver + +var server = newAsyncHttpServer() +proc cb(req: Request) {.async.} = + if req.url.path == "/ws": + var ws = await newWebsocket(req) + await ws.send("Welcome to simple echo server") + while ws.readyState == Open: + let packet = await ws.receivePacket() + await ws.send(packet) + await req.respond(Http200, "Hello World") + +asyncCheck server.serve(Port(9001), cb) +runForever() +``` + +## Websocket client +Send messages to Echo server and receive unswer +```nim +import news, asyncdispatch + +proc sendMsg() {.async.} = + var ws = await newWebSocket("ws://localhost:9001/ws") + await ws.send("hi") + while ws.readyState == Open: + let packet = await ws.receivePacket() + echo "received ", packet + +asyncCheck sendMsg() +runForever() +``` + +## Websocket with chronos support: +```nim +import chronos + +const newsUseChronos = true +include news + +proc sendMsg() {.async.} = + var ws = await newWebSocket("ws://localhost:9001/ws") + await ws.send("hi") + while ws.readyState == Open: + let packet = await ws.receivePacket() + echo "received ", packet + +asyncCheck sendMsg() +runForever() +``` + +SSL is also supported: +```nim +var ws = await newWebsocket("wss://echo.websocket.org") +``` \ No newline at end of file diff --git a/tests/test.nim b/tests/test.nim new file mode 100644 index 0000000..0add05d --- /dev/null +++ b/tests/test.nim @@ -0,0 +1,23 @@ +import news, asyncdispatch, asynchttpserver + +var server = newAsyncHttpServer() +proc cb(req: Request) {.async.} = + if req.url.path == "/ws": + var ws = await newWebsocket(req) + await ws.send("Welcome to simple echo server") + while ws.readyState == Open: + let packet = await ws.receivePacket() + await ws.send(packet) + await req.respond(Http200, "Hello World") + +asyncCheck server.serve(Port(9001), cb) + +proc sendMsg() {.async.} = + var ws = await newWebSocket("ws://localhost:9001/ws") + await ws.send("hi") + while ws.readyState == Open: + let packet = await ws.receivePacket() + echo "received ", packet + +asyncCheck sendMsg() +runForever()