Merge branch 'master' of github.com:Araq/Nimrod
This commit is contained in:
commit
adb73ec9ed
6 changed files with 212 additions and 64 deletions
|
|
@ -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
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