voicemeeter-rb/lib/voicemeeter/worker.rb

65 lines
1.8 KiB
Ruby
Raw Normal View History

2023-07-13 21:57:32 +01:00
module Voicemeeter
module Worker
include Logging
2023-07-13 21:57:32 +01:00
private
2023-07-13 21:57:32 +01:00
def init_producer(que)
@producer = Thread.new do
2023-08-03 11:04:13 +01:00
Thread.current.name = "producer"
2023-08-31 21:52:25 +01:00
while @running
2023-07-13 21:57:32 +01:00
que << :pdirty if event.pdirty
que << :mdirty if event.mdirty
que << :midi if event.midi
que << :ldirty if event.ldirty
sleep(@ratelimit)
end
2023-08-03 11:04:13 +01:00
logger.debug "closing #{Thread.current.name} thread"
2023-08-31 21:52:25 +01:00
que << @running
2023-07-13 21:57:32 +01:00
end
end
def init_worker(que)
logger.info "Listening for #{event.get.join(", ")} events"
2023-08-06 18:02:48 +01:00
cache[:strip_level], cache[:bus_level] = _get_levels
cache[:strip_comp] = Array.new(kind.num_strip_levels, false)
cache[:bus_comp] = Array.new(kind.num_bus_levels, false)
2023-07-13 21:57:32 +01:00
Thread.new do
2023-08-03 11:04:13 +01:00
Thread.current.name = "worker"
while (event = que.pop)
fire :pdirty if event == :pdirty && pdirty?
fire :mdirty if event == :mdirty && mdirty?
fire :midi if event == :midi && get_midi_message
if event == :ldirty && ldirty?
cache[:strip_comp] = cache[:strip_level].zip(cache[:strip_buf]).map { |a, b| a != b }
cache[:bus_comp] = cache[:bus_level].zip(cache[:bus_buf]).map { |a, b| a != b }
2023-07-14 01:46:25 +01:00
cache[:strip_level] = cache[:strip_buf]
cache[:bus_level] = cache[:bus_buf]
fire :ldirty
2023-07-13 21:57:32 +01:00
end
end
logger.debug "closing #{Thread.current.name} thread"
2023-07-13 21:57:32 +01:00
end
end
public
def running?
2023-08-29 11:21:05 +01:00
@producer&.alive?
end
def init_event_threads
que = Queue.new
2023-08-31 21:52:25 +01:00
@running = true
2023-08-03 18:50:25 +01:00
init_worker(que) and init_producer(que)
end
def end_event_threads
2023-08-10 20:37:55 +01:00
if running?
2023-08-31 21:52:25 +01:00
@running = false
@producer.join
end
2023-07-13 21:57:32 +01:00
end
end
end