mirror of
https://github.com/overte-org/overte.git
synced 2025-08-09 22:51:20 +02: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'
|
require 'socket'
|
||||||
BUFFER_SLEEP_DURATION_MSECS = 20
|
BUFFER_SLEEP_DURATION_MSECS = 20
|
||||||
|
CLIENT_LIST_MEMORY_DURATION_SECS = 1
|
||||||
|
|
||||||
begin
|
begin
|
||||||
# create the UDPSocket object
|
# create the UDPSocket object
|
||||||
socket = UDPSocket.new
|
socket = UDPSocket.new
|
||||||
|
|
||||||
$dataBuffer = Array.new
|
$dataBuffer = nil
|
||||||
$receivers = Hash.new
|
$receivers = Hash.new
|
||||||
|
|
||||||
listenThread = Thread.new(socket) {
|
listenThread = Thread.new(socket) {
|
||||||
|
@ -17,9 +18,20 @@ begin
|
||||||
# while true loop to keep listening for new packets
|
# while true loop to keep listening for new packets
|
||||||
while true do
|
while true do
|
||||||
data, sender = socket.recvfrom 1024
|
data, sender = socket.recvfrom 1024
|
||||||
puts "Recieved #{data.size} bytes from #{sender[3]}"
|
puts "Recieved #{data.size} bytes from #{sender[3]} on #{sender[1]}"
|
||||||
$dataBuffer << data
|
|
||||||
$receivers[sender[3]] = 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
|
end
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -27,15 +39,19 @@ begin
|
||||||
while true do
|
while true do
|
||||||
sleep(BUFFER_SLEEP_DURATION_MSECS/1000)
|
sleep(BUFFER_SLEEP_DURATION_MSECS/1000)
|
||||||
|
|
||||||
if $dataBuffer.size > 0
|
unless $dataBuffer.nil?
|
||||||
$receivers.each do |ip, port|
|
$receivers.each do |ip_port, time|
|
||||||
puts $dataBuffer[0]
|
if (time > Time.now.to_f - CLIENT_LIST_MEMORY_DURATION_SECS)
|
||||||
puts ip
|
ip, port = ip_port.split(':')
|
||||||
puts port
|
socket.send $dataBuffer.pack("s<*"), 0, ip, port
|
||||||
socket.send $dataBuffer[0], 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
|
end
|
||||||
|
|
||||||
$dataBuffer.clear
|
$dataBuffer = nil
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue