parent
6b5e2adfd0
commit
75a981cf80
2 changed files with 32 additions and 0 deletions
29
tests/async/t3075.nim
Normal file
29
tests/async/t3075.nim
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
import asyncnet, asyncdispatch, strtabs
|
||||
|
||||
type
|
||||
WebSocketCallback = proc (client: WebSocket, message: WebSocketMessage) {.closure, gcsafe.}
|
||||
WebSocketRecvClosure = proc (ws: WebSocket): Future[string] {.gcsafe.}
|
||||
|
||||
WebSocketMessage = ref object
|
||||
msg: string
|
||||
|
||||
WebSocket = ref object
|
||||
socket: AsyncSocket
|
||||
header: StringTableRef
|
||||
onOpen: WebSocketCallback
|
||||
onMessage: WebSocketCallback
|
||||
onClose: WebSocketCallback
|
||||
|
||||
proc recv(ws: WebSocket, p: WebSocketRecvClosure): Future[string] {.async.}=
|
||||
if not ws.socket.isClosed():
|
||||
result = await ws.p()
|
||||
if result == "":
|
||||
ws.socket.close()
|
||||
if ws.onClose != nil:
|
||||
ws.onClose(ws, nil)
|
||||
return result
|
||||
|
||||
proc reсvSize(ws: WebSocket, size: int): Future[string] {.async.} =
|
||||
proc recvSizeClosure(ws: WebSocket): Future[string] {.async.} =
|
||||
return await ws.socket.recv(size)
|
||||
return await ws.recv(recvSizeClosure)
|
||||
Loading…
Add table
Add a link
Reference in a new issue