adds Events::Client.on method

allows registering blocks to be called back later

examples, readme updated

minor bump
This commit is contained in:
2023-08-17 23:09:32 +01:00
parent 662f14282f
commit daa8c6ada1
5 changed files with 61 additions and 90 deletions

View File

@@ -28,43 +28,35 @@ module OBSWS
ALL = LOW_VOLUME | HIGH_VOLUME
end
module Callbacks
module EventDirector
include Util::String
def observers
@observers ||= []
@observers ||= {}
end
def add_observer(observer)
observer = [observer] unless observer.respond_to? :each
observer.each { |o| observers << o unless observers.include? o }
def on(event, method = nil, &block)
(observers[event] ||= []) << (block || method)
end
def remove_observer(observer)
observer = [observer] unless observer.respond_to? :each
observers.reject! { |o| observer.include? o }
def register(cbs)
cbs = [cbs] unless cbs.respond_to? :each
cbs.each { |cb| on(cb.name[3..].to_sym, cb) }
end
private def notify_observers(event, data)
observers.each do |o|
if o.is_a? Method
if o.name.to_s == "on_#{snakecase(event)}"
data.empty? ? o.call : o.call(data)
end
elsif o.respond_to? "on_#{snakecase(event)}"
data.empty? ? o.send("on_#{snakecase(event)}") : o.send("on_#{snakecase(event)}", data)
end
end
def deregister(cbs)
cbs = [cbs] unless cbs.respond_to? :each
cbs.each { |cb| observers[cb.name[3..].to_sym]&.reject! { |o| cbs.include? o } }
end
alias_method :callbacks, :observers
alias_method :register, :add_observer
alias_method :deregister, :remove_observer
def fire(event, data)
observers[snakecase(event).to_sym]&.each { |block| data.empty? ? block.call : block.call(data) }
end
end
class Client
include Logging
include Callbacks
include EventDirector
include Mixin::TearDown
include Mixin::OPCodes
@@ -87,7 +79,7 @@ module OBSWS
logger.debug("received: #{data}")
event = data[:eventType]
data = data.fetch(:eventData, {})
notify_observers(event, Mixin::Data.new(data, data.keys))
fire(event, Mixin::Data.new(data, data.keys))
end
}
end

View File

@@ -7,11 +7,11 @@ module OBSWS
end
def minor
5
6
end
def patch
8
0
end
def to_a