UDP improvements for the sockets module. Renamed ftpclient.fileExists to

existsFile for consistency. Added tasyncudp test.
This commit is contained in:
Dominik Picheta 2012-08-12 11:53:09 +01:00
commit e9604b4433
5 changed files with 186 additions and 26 deletions

View file

@ -18,13 +18,13 @@ const
swarmSize = 50
messagesToSend = 100
proc swarmConnect(s: PAsyncSocket, arg: PObject) {.nimcall.} =
proc swarmConnect(s: PAsyncSocket) =
#echo("Connected")
for i in 1..messagesToSend:
s.send("Message " & $i & "\c\L")
s.close()
proc serverRead(s: PAsyncSocket, arg: PObject) {.nimcall.} =
proc serverRead(s: PAsyncSocket) =
var line = ""
assert s.recvLine(line)
if line != "":
@ -36,7 +36,7 @@ proc serverRead(s: PAsyncSocket, arg: PObject) {.nimcall.} =
else:
s.close()
proc serverAccept(s: PAsyncSocket, arg: Pobject) {.nimcall.} =
proc serverAccept(s: PAsyncSocket) =
var client: PAsyncSocket
new(client)
s.accept(client)
@ -83,6 +83,8 @@ while true:
break
if not disp.poll(): break
if disp.len == serverCount:
# Only the servers are left in the dispatcher. All clients finished,
# we need to therefore break.
break
assert msgCount == (swarmSize * messagesToSend) * serverCount

77
tests/run/tasyncudp.nim Normal file
View 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)