mirror of
https://github.com/codex-storage/nim-websock.git
synced 2025-02-02 13:53:21 +00:00
3923a9be20
* Use seq[byte] to store data. * Working bytes conversion. * Refactor the code. * Add test. * Add websocket test and fix closing handshake. * Add MsgReader to read data in external buffer. * rework frame reading * don't do toTitleCase * fix examples * use byte for more comfort * rework message reading + api * fix tests * adding specific exception types * minor cleanup * fixing tests * more tests * check the fin flag at the correct place * info for debug * split data not encoded frames * more tests * wip - control messages * closing flow and more explicit exception handling * test close and pings * add tests task to nimble * adding ci * change recv semantics * add frame tests * remove echo * better frame tests * fix * fix * handle continuation frames properly * more close logic handling * wip tests * handle close reasons properly * test control frames encoding * don't pass ws to event callbacks * fix masking and use correct base64 encoding * fix ci * addressing review comments * fix client example * i386 ci fix * wip ci * fix reading offset * don't read if socket closed * fix ci * wip * don't read if socket is closed Co-authored-by: Arijit Das <arijit@status.im> Co-authored-by: Arijit Das <arijitad.in@gmail.com>
32 lines
699 B
Nim
32 lines
699 B
Nim
import ../src/ws, nativesockets, chronos, os, chronicles, stew/byteutils
|
|
|
|
proc main() {.async.} =
|
|
let ws = await connect(
|
|
"127.0.0.1", Port(8888),
|
|
path = "/ws")
|
|
|
|
debug "Websocket client: ", State = ws.readyState
|
|
|
|
let reqData = "Hello Server"
|
|
while true:
|
|
try:
|
|
await ws.send(reqData)
|
|
let buff = await ws.recv()
|
|
if buff.len <= 0:
|
|
break
|
|
|
|
let dataStr = string.fromBytes(buff)
|
|
debug "Server:", data = dataStr
|
|
|
|
assert dataStr == reqData
|
|
return # bail out
|
|
except WebSocketError as exc:
|
|
error "WebSocket error:", exception = exc.msg
|
|
|
|
await sleepAsync(100.millis)
|
|
|
|
# close the websocket
|
|
await ws.close()
|
|
|
|
waitFor(main())
|