UDP improvements for the sockets module. Renamed ftpclient.fileExists to
existsFile for consistency. Added tasyncudp test.
This commit is contained in:
parent
f686647f58
commit
e9604b4433
5 changed files with 186 additions and 26 deletions
77
tests/run/tasyncudp.nim
Normal file
77
tests/run/tasyncudp.nim
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
discard """
|
||||
file: "tasyncudp.nim"
|
||||
output: "2000"
|
||||
"""
|
||||
import asyncio, sockets, strutils, times
|
||||
|
||||
const
|
||||
swarmSize = 5
|
||||
messagesToSend = 200
|
||||
|
||||
var
|
||||
disp = newDispatcher()
|
||||
msgCount = 0
|
||||
currentClient = 0
|
||||
|
||||
proc serverRead(s: PAsyncSocket) =
|
||||
var data = ""
|
||||
var address = ""
|
||||
if s.recvFromAsync(data, 9, address):
|
||||
assert address == "127.0.0.1"
|
||||
msgCount.inc()
|
||||
|
||||
discard """
|
||||
|
||||
var line = ""
|
||||
assert s.recvLine(line)
|
||||
|
||||
if line == "":
|
||||
assert(false)
|
||||
else:
|
||||
if line.startsWith("Message "):
|
||||
msgCount.inc()
|
||||
else:
|
||||
assert(false)
|
||||
"""
|
||||
|
||||
proc swarmConnect(s: PAsyncSocket) =
|
||||
for i in 1..messagesToSend:
|
||||
s.send("Message\c\L")
|
||||
|
||||
proc createClient(disp: var PDispatcher, port: TPort,
|
||||
buffered = true) =
|
||||
currentClient.inc()
|
||||
var client = AsyncSocket(typ = SOCK_DGRAM, protocol = IPPROTO_UDP,
|
||||
buffered = buffered)
|
||||
client.handleConnect = swarmConnect
|
||||
disp.register(client)
|
||||
client.connect("localhost", port)
|
||||
|
||||
proc createServer(port: TPort, buffered = true) =
|
||||
var server = AsyncSocket(typ = SOCK_DGRAM, protocol = IPPROTO_UDP,
|
||||
buffered = buffered)
|
||||
server.handleRead = serverRead
|
||||
disp.register(server)
|
||||
server.bindAddr(port)
|
||||
|
||||
let serverCount = 2
|
||||
|
||||
createServer(TPort(10335), false)
|
||||
createServer(TPort(10336), true)
|
||||
var startTime = epochTime()
|
||||
while true:
|
||||
if epochTime() - startTime >= 300.0:
|
||||
break
|
||||
|
||||
if not disp.poll():
|
||||
break
|
||||
|
||||
if (msgCount div messagesToSend) * serverCount == currentClient:
|
||||
createClient(disp, TPort(10335), false)
|
||||
createClient(disp, TPort(10336), true)
|
||||
|
||||
if msgCount == messagesToSend * serverCount * swarmSize:
|
||||
break
|
||||
|
||||
assert msgCount == messagesToSend * serverCount * swarmSize
|
||||
echo(msgCount)
|
||||
Loading…
Add table
Add a link
Reference in a new issue