mirror of
https://github.com/onyx-and-iris/obsws-ruby.git
synced 2024-11-15 18:50:47 +00:00
assign client updater methods as base lambdas
This commit is contained in:
parent
18d291c6eb
commit
9940fbbf9f
@ -2,7 +2,6 @@ require "socket"
|
||||
require "websocket/driver"
|
||||
require "digest/sha2"
|
||||
require "json"
|
||||
require "observer"
|
||||
require "waitutil"
|
||||
|
||||
require_relative "mixin"
|
||||
@ -23,10 +22,10 @@ module OBSWS
|
||||
end
|
||||
|
||||
class Base
|
||||
include Observable
|
||||
include Mixin::OPCodes
|
||||
|
||||
attr_reader :id, :driver, :closed
|
||||
attr_reader :closed
|
||||
attr_writer :updater
|
||||
|
||||
def initialize(**kwargs)
|
||||
host = kwargs[:host] || "localhost"
|
||||
@ -56,7 +55,7 @@ module OBSWS
|
||||
) { @identified }
|
||||
end
|
||||
|
||||
def start_driver
|
||||
private def start_driver
|
||||
Thread.new do
|
||||
@driver.start
|
||||
|
||||
@ -68,6 +67,12 @@ module OBSWS
|
||||
end
|
||||
end
|
||||
|
||||
public def stop_driver
|
||||
@driver.close
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def auth_token(salt:, challenge:)
|
||||
Digest::SHA256.base64digest(
|
||||
Digest::SHA256.base64digest(@password + salt) + challenge
|
||||
@ -99,12 +104,11 @@ module OBSWS
|
||||
when Mixin::OPCodes::IDENTIFIED
|
||||
@identified = true
|
||||
when Mixin::OPCodes::EVENT, Mixin::OPCodes::REQUESTRESPONSE
|
||||
changed
|
||||
notify_observers(data[:op], data[:d])
|
||||
@updater.call(data[:op], data[:d])
|
||||
end
|
||||
end
|
||||
|
||||
def req(id, type_, data = nil)
|
||||
public def req(id, type_, data = nil)
|
||||
payload = {
|
||||
op: Mixin::OPCodes::REQUEST,
|
||||
d: {
|
||||
|
@ -70,20 +70,18 @@ module OBSWS
|
||||
kwargs[:subs] ||= SUBS::LOW_VOLUME
|
||||
@base_client = Base.new(**kwargs)
|
||||
LOGGER.info("#{self} succesfully identified with server")
|
||||
@base_client.add_observer(self)
|
||||
@base_client.updater = ->(op_code, data) {
|
||||
if op_code == Mixin::OPCodes::EVENT
|
||||
event = data[:eventType]
|
||||
data = data.fetch(:eventData, {})
|
||||
notify_observers(event, Mixin::Data.new(data, data.keys))
|
||||
end
|
||||
}
|
||||
end
|
||||
|
||||
def to_s
|
||||
self.class.name.split("::").last(2).join("::")
|
||||
end
|
||||
|
||||
def update(op_code, data)
|
||||
if op_code == Mixin::OPCodes::EVENT
|
||||
event = data[:eventType]
|
||||
data = data.key?(:eventData) ? data[:eventData] : {}
|
||||
notify_observers(event, Mixin::Data.new(data, data.keys))
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -15,7 +15,9 @@ module OBSWS
|
||||
def initialize(**kwargs)
|
||||
@base_client = Base.new(**kwargs)
|
||||
LOGGER.info("#{self} succesfully identified with server")
|
||||
@base_client.add_observer(self)
|
||||
@base_client.updater = ->(op_code, data) {
|
||||
@response = data if op_code == Mixin::OPCodes::REQUESTRESPONSE
|
||||
}
|
||||
@response = {requestId: 0}
|
||||
end
|
||||
|
||||
@ -26,7 +28,7 @@ module OBSWS
|
||||
def run
|
||||
yield(self)
|
||||
ensure
|
||||
close
|
||||
stop_driver
|
||||
WaitUtil.wait_for_condition(
|
||||
"driver to close",
|
||||
delay_sec: 0.01,
|
||||
@ -34,10 +36,6 @@ module OBSWS
|
||||
) { @base_client.closed }
|
||||
end
|
||||
|
||||
def update(op_code, data)
|
||||
@response = data if op_code == Mixin::OPCodes::REQUESTRESPONSE
|
||||
end
|
||||
|
||||
def call(req, data = nil)
|
||||
id = rand(1..1000)
|
||||
@base_client.req(id, req, data)
|
||||
|
Loading…
Reference in New Issue
Block a user