Compare commits

..

No commits in common. "e4f4961c561408d8570de803cfd3569ea5ec8ae5" and "155cbe019acea9c4684f92063676556c0c550ef5" have entirely different histories.

6 changed files with 27 additions and 33 deletions

View File

@ -1,7 +1,7 @@
PATH PATH
remote: . remote: .
specs: specs:
obsws (0.4.0) obsws (0.3.3)
waitutil (~> 0.2.1) waitutil (~> 0.2.1)
websocket-driver (~> 0.7.5) websocket-driver (~> 0.7.5)

View File

@ -16,10 +16,14 @@
### Bundler ### Bundler
``` ```
bundle add obsws bundle add 'obsws'
bundle install bundle install
``` ```
### Gem
`gem install 'obsws'`
## `Use` ## `Use`
#### Example `main.rb` #### Example `main.rb`
@ -63,28 +67,23 @@ For a full list of requests refer to [Requests](https://github.com/obsproject/ob
### Events ### Events
Register `on_` callback methods. Method names should match the api event but snake cased. Register an observer class and define `on_` methods for events. Method names should match the api event but snake cased.
example: example:
```ruby ```ruby
class Observer class Observer
def initialize def initialize
@e_client = OBSWS::Events::Client.new(host: "localhost", port: 4455, password: "strongpassword") @e_client = OBSWS::Events::Client.new(**kwargs)
# register callback methods with the Event client # register class with the event client
@e_client.register( @e_client.add_observer(self)
[
method(:on_current_program_scene_changed),
method(:on_input_mute_state_changed)
]
)
end end
# define "on_" event methods. # define "on_" event methods.
def on_current_program_scene_changed(data) def on_current_program_scene_changed
... ...
end end
def on_input_mute_state_changed(data) def on_input_mute_state_changed
... ...
end end
... ...

View File

@ -21,9 +21,11 @@ class Main
def infostring def infostring
resp = @r_client.get_version resp = @r_client.get_version
[ [
"Using obs version: #{resp.obs_version}.", "Using obs version:",
"With websocket version: #{resp.obs_web_socket_version}" resp.obs_version,
].join(" ") "With websocket version:",
resp.obs_web_socket_version
].join("\n")
end end
def on_current_program_scene_changed(data) def on_current_program_scene_changed(data)

View File

@ -1,6 +1,7 @@
require_relative "../../lib/obsws" require_relative "../../lib/obsws"
require "yaml" require "yaml"
module LevelTypes module LevelTypes
VU = 0 VU = 0
POSTFADER = 1 POSTFADER = 1
@ -13,12 +14,7 @@ class Main
def initialize(**kwargs) def initialize(**kwargs)
subs = OBSWS::Events::SUBS::LOW_VOLUME | OBSWS::Events::SUBS::INPUTVOLUMEMETERS subs = OBSWS::Events::SUBS::LOW_VOLUME | OBSWS::Events::SUBS::INPUTVOLUMEMETERS
@e_client = OBSWS::Events::Client.new(subs:, **kwargs) @e_client = OBSWS::Events::Client.new(subs:, **kwargs)
@e_client.register( @e_client.add_observer(self)
[
method(:on_input_mute_state_changed),
method(:on_input_volume_meters)
]
)
end end
def run def run

View File

@ -43,7 +43,7 @@ module OBSWS
def add_observer(observer) def add_observer(observer)
observer = [observer] if !observer.respond_to? :each observer = [observer] if !observer.respond_to? :each
observer.each { |o| observers << o unless observers.include? o } observer.each { |o| observers << o }
end end
def remove_observer(observer) def remove_observer(observer)
@ -52,18 +52,15 @@ module OBSWS
def notify_observers(event, data) def notify_observers(event, data)
observers.each do |o| observers.each do |o|
if o.is_a? Method if o.respond_to? "on_#{snakecase(event)}"
if o.name.to_s == "on_#{snakecase(event)}" if data.empty?
data.empty? ? o.call : o.call(data) o.send("on_#{snakecase(event)}")
end else
elsif o.respond_to? "on_#{snakecase(event)}" o.send("on_#{snakecase(event)}", data)
data.empty? ? o.send("on_#{snakecase(event)}") : o.send("on_#{snakecase(event)}", data) end
end end
end end
end end
alias_method :register, :add_observer
alias_method :deregister, :remove_observer
end end
class Client class Client

View File

@ -7,11 +7,11 @@ module OBSWS
end end
def minor def minor
4 3
end end
def patch def patch
0 3
end end
def to_a def to_a