mirror of
				https://github.com/onyx-and-iris/obsws-ruby.git
				synced 2025-10-31 16:51:44 +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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user