1- import chronicles
1+ import chronicles, sequtils
22import chronos
33import chronos/ osdefs
44import results
@@ -10,7 +10,7 @@ type ConnectionManager* = ref object of RootObj
1010 tlsConfig* : TLSConfig
1111 udp* : DatagramTransport
1212 quicContext* : QuicContext
13- outgoing* : AsyncQueue [Datagram ]
13+ outgoing* : ManyQueue [Datagram ]
1414 connections: seq [Connection ]
1515 loop* : Future [void ]
1616 closed* : Future [void ]
@@ -20,7 +20,7 @@ proc init*(
2020 tlsConfig: TLSConfig ,
2121 udp: DatagramTransport ,
2222 quicContext: QuicContext ,
23- outgoing: AsyncQueue [Datagram ],
23+ outgoing: ManyQueue [Datagram ],
2424) =
2525 c.tlsConfig = tlsConfig
2626 c.quicContext = quicContext
@@ -34,7 +34,7 @@ proc new*(
3434 tlsConfig: TLSConfig ,
3535 udp: DatagramTransport ,
3636 quicContext: QuicContext ,
37- outgoing: AsyncQueue [Datagram ],
37+ outgoing: ManyQueue [Datagram ],
3838): T =
3939 let ret = ConnectionManager ()
4040 ret.init (tlsConfig, udp, quicContext, outgoing)
@@ -50,12 +50,12 @@ proc startSending*(connman: ConnectionManager) =
5050
5151 proc send () {.async : (raises: [CancelledError ]).} =
5252 try :
53- let datagram = await connman.outgoing.get ()
54- if datagram.len == 0 :
55- # In windows, empty datagrams will make the peer stop receiving data
56- return
57- await connman.udp. sendTo (datagram.taddr, datagram.data)
58- except TransportError as e:
53+ let datagrams = await connman.outgoing.get ()
54+ let req = datagrams. mapIt ((it.taddr, it.data))
55+ # echo "111111111 ", req.len
56+ await connman.udp. sendTo (req)
57+ # echo "2222222"
58+ except CatchableError as e:
5959 debug " Failed to send datagram" , errorMsg = e.msg
6060
6161 connman.loop = asyncLoop (send)
0 commit comments