From 3bea53c66b715cce07f80da5f67420d213392ff4 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Fri, 11 Jan 2013 10:43:54 -0700 Subject: [PATCH] mix together multiple packets from clients --- socket.rb | 38 +++++++++++++++++++++++++++----------- 1 file changed, 27 insertions(+), 11 deletions(-) diff --git a/socket.rb b/socket.rb index e3697548f3..1eba4e3581 100644 --- a/socket.rb +++ b/socket.rb @@ -1,11 +1,12 @@ require 'socket' BUFFER_SLEEP_DURATION_MSECS = 20 +CLIENT_LIST_MEMORY_DURATION_SECS = 1 begin # create the UDPSocket object socket = UDPSocket.new - $dataBuffer = Array.new + $dataBuffer = nil $receivers = Hash.new listenThread = Thread.new(socket) { @@ -17,9 +18,20 @@ begin # 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] + puts "Recieved #{data.size} bytes from #{sender[3]} on #{sender[1]}" + + # there are 2 bytes per sample + newSamples = data.unpack("s<*") + + if $dataBuffer.nil? + $dataBuffer = newSamples + else + $dataBuffer.each_with_index do |sample, index| + sample = (sample + newSamples[index]) / 2 + end + end + + $receivers["#{sender[3]}:#{sender[1]}"] = Time.now.to_f end } @@ -27,15 +39,19 @@ begin 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 + unless $dataBuffer.nil? + $receivers.each do |ip_port, time| + if (time > Time.now.to_f - CLIENT_LIST_MEMORY_DURATION_SECS) + ip, port = ip_port.split(':') + socket.send $dataBuffer.pack("s<*"), 0, ip, port + puts "Sent mixed frame to #{ip} on #{port}" + else + puts "Nobody to send mixed frame to" + $receivers.delete(ip_port) + end end - $dataBuffer.clear + $dataBuffer = nil end end }