mix together multiple packets from clients

This commit is contained in:
Stephen Birarda 2013-01-11 10:43:54 -07:00
parent 168d366120
commit 3bea53c66b

View file

@ -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
}