summary refs log tree commit diff stats
path: root/tests/async/tasyncudp.nim
blob: fd7f3d5682ded317c2d75876ef934b4f4141c67c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
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 = ""
  var port: TPort
  if s.recvFromAsync(data, 9, address, port):
    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)