mirror of
https://thingvellir.net/git/overte
synced 2025-03-27 23:52:03 +01:00
mix together multiple packets from clients
This commit is contained in:
parent
168d366120
commit
3bea53c66b
1 changed files with 27 additions and 11 deletions
38
socket.rb
38
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
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue