From 168d3661202c17c5110758b18d989816bb67e5e9 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Wed, 9 Jan 2013 17:00:58 -0700 Subject: [PATCH] added 20msec delay in reply of buffered data --- socket.rb | 55 +++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 41 insertions(+), 14 deletions(-) diff --git a/socket.rb b/socket.rb index 97d82b2a6c..e3697548f3 100644 --- a/socket.rb +++ b/socket.rb @@ -1,23 +1,50 @@ require 'socket' +BUFFER_SLEEP_DURATION_MSECS = 20 + begin # create the UDPSocket object - sock = UDPSocket.new - - # bind it to 0.0.0.0 at the given port - port = 55443 - sock.bind "0.0.0.0", port - puts "UDP Socket bound to port #{port} and listening." + socket = UDPSocket.new - # while true loop to keep listening for new packets - while true do - data, sender = sock.recvfrom 1024 - puts "Recieved #{data.size} bytes from #{sender[3]}" - puts "Echoing data back to #{sender[3]}" - sock.send data, 0, sender[3], sender[1] - end + $dataBuffer = Array.new + $receivers = Hash.new + + listenThread = Thread.new(socket) { + # bind it to 0.0.0.0 at the given port + port = 55443 + socket.bind "0.0.0.0", port + puts "UDP Socket bound to port #{port} and listening." + + # while true loop to keep listening for new packets + while true do + data, sender = socket.recvfrom 1024 + puts "Recieved #{data.size} bytes from #{sender[3]}" + $dataBuffer << data + $receivers[sender[3]] = sender[1] + end + } + + sendThread = Thread.new(socket) { + while true do + sleep(BUFFER_SLEEP_DURATION_MSECS/1000) + + if $dataBuffer.size > 0 + $receivers.each do |ip, port| + puts $dataBuffer[0] + puts ip + puts port + socket.send $dataBuffer[0], 0, ip, port + end + + $dataBuffer.clear + end + end + } + + listenThread.join + sendThread.join rescue SystemExit, Interrupt => e puts puts "Okay, fine. I'll stop listening." - sock.close + socket.close end