obsws 0.2.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f23333577b91916057461d9084494c147f63cd3feb90e121ab33c5b795af1566
4
- data.tar.gz: e5b31955a09ace6b520351252034ca8b1bb8932698859b12a3af3dd2b70485d9
3
+ metadata.gz: c125c30687cdcd22d868636a4d7bfbe7776939a8b4997842785b3868e7959151
4
+ data.tar.gz: 7f4c51a8231083c220c95d4e0fa34da8bf7712307adcd21b32565043a3e28d7f
5
5
  SHA512:
6
- metadata.gz: 14411743ad90540ec041ed46c30f1347512174a876a6891bf1351c7f4025c712cc9f57aad1911adabc1368fb1f907b982f519ad713404d516d88af42a0687120
7
- data.tar.gz: 28ac135781ba0610baa21912d9105b1ebd3762b682693d9866172a0ae7dde9e322de68174f7bf23da8fb6d8faf813128fc1a6c1e3d04557be533d4cded5ef59c
6
+ metadata.gz: 5b14e996f1e06788e88b66d44fef72f06d5ba0ad07b38e83332a19dfa833c724f33ea2a2119336105cca63034f0a015e53a38b60d1049dc8745ae9be92d51028
7
+ data.tar.gz: bfd3821cefe5a515feca6746edb5d042141492061bfa6303f1c6daf56a2215d0c4ce076224bb3b7873879649fe96f36a4ee223e6aeae08020988f3d8790fe26c
data/README.md CHANGED
@@ -28,37 +28,39 @@ bundle install
28
28
 
29
29
  #### Example `main.rb`
30
30
 
31
- pass `host`, `port` and `password` as keyword arguments.
31
+ Pass `host`, `port` and `password` as keyword arguments.
32
32
 
33
33
  ```ruby
34
34
  require "obsws"
35
35
 
36
- def main
37
- OBSWS::Requests::Client
38
- .new(host: "localhost", port: 4455, password: "strongpassword")
39
- .run do |client|
40
- # Toggle the mute state of your Mic input
41
- client.toggle_input_mute("Mic/Aux")
42
- end
36
+ class Main
37
+ def run
38
+ OBSWS::Requests::Client
39
+ .new(host: "localhost", port: 4455, password: "strongpassword")
40
+ .run do |client|
41
+ # Toggle the mute state of your Mic input
42
+ client.toggle_input_mute("Mic/Aux")
43
+ end
44
+ end
43
45
  end
44
46
 
45
- main if $0 == __FILE__
47
+ Main.new.run if $PROGRAM_NAME == __FILE__
46
48
  ```
47
49
 
50
+ Passing OBSWS::Requests::Client.run a block closes the socket once the block returns.
51
+
48
52
  ### Requests
49
53
 
50
- Method names for requests match the API calls but snake cased. `run` accepts a block that closes the socket once you are done.
54
+ Method names for requests match the API calls but snake cased.
51
55
 
52
56
  example:
53
57
 
54
58
  ```ruby
55
- r_client.run do
56
- # GetVersion
57
- resp = r_client.get_version
59
+ # GetVersion
60
+ resp = r_client.get_version
58
61
 
59
- # SetCurrentProgramScene
60
- r_client.set_current_program_scene("BRB")
61
- end
62
+ # SetCurrentProgramScene
63
+ r_client.set_current_program_scene("BRB")
62
64
  ```
63
65
 
64
66
  For a full list of requests refer to [Requests](https://github.com/obsproject/obs-websocket/blob/master/docs/generated/protocol.md#requests)
data/lib/obsws/base.rb CHANGED
@@ -2,7 +2,6 @@ require "socket"
2
2
  require "websocket/driver"
3
3
  require "digest/sha2"
4
4
  require "json"
5
- require "observer"
6
5
  require "waitutil"
7
6
 
8
7
  require_relative "mixin"
@@ -23,10 +22,10 @@ module OBSWS
23
22
  end
24
23
 
25
24
  class Base
26
- include Observable
27
25
  include Mixin::OPCodes
28
26
 
29
- attr_reader :id, :driver, :closed
27
+ attr_reader :closed
28
+ attr_writer :updater
30
29
 
31
30
  def initialize(**kwargs)
32
31
  host = kwargs[:host] || "localhost"
@@ -56,7 +55,7 @@ module OBSWS
56
55
  ) { @identified }
57
56
  end
58
57
 
59
- def start_driver
58
+ private def start_driver
60
59
  Thread.new do
61
60
  @driver.start
62
61
 
@@ -68,6 +67,12 @@ module OBSWS
68
67
  end
69
68
  end
70
69
 
70
+ public def stop_driver
71
+ @driver.close
72
+ end
73
+
74
+ private
75
+
71
76
  def auth_token(salt:, challenge:)
72
77
  Digest::SHA256.base64digest(
73
78
  Digest::SHA256.base64digest(@password + salt) + challenge
@@ -99,12 +104,11 @@ module OBSWS
99
104
  when Mixin::OPCodes::IDENTIFIED
100
105
  @identified = true
101
106
  when Mixin::OPCodes::EVENT, Mixin::OPCodes::REQUESTRESPONSE
102
- changed
103
- notify_observers(data[:op], data[:d])
107
+ @updater.call(data[:op], data[:d])
104
108
  end
105
109
  end
106
110
 
107
- def req(id, type_, data = nil)
111
+ public def req(id, type_, data = nil)
108
112
  payload = {
109
113
  op: Mixin::OPCodes::REQUEST,
110
114
  d: {
@@ -114,7 +118,7 @@ module OBSWS
114
118
  }
115
119
  payload[:d][:requestData] = data if data
116
120
  LOGGER.debug("sending request: #{payload}")
117
- queued = @driver.text(JSON.generate(payload))
121
+ @driver.text(JSON.generate(payload))
118
122
  end
119
123
  end
120
124
  end
data/lib/obsws/event.rb CHANGED
@@ -70,20 +70,18 @@ module OBSWS
70
70
  kwargs[:subs] ||= SUBS::LOW_VOLUME
71
71
  @base_client = Base.new(**kwargs)
72
72
  LOGGER.info("#{self} succesfully identified with server")
73
- @base_client.add_observer(self)
73
+ @base_client.updater = ->(op_code, data) {
74
+ if op_code == Mixin::OPCodes::EVENT
75
+ event = data[:eventType]
76
+ data = data.fetch(:eventData, {})
77
+ notify_observers(event, Mixin::Data.new(data, data.keys))
78
+ end
79
+ }
74
80
  end
75
81
 
76
82
  def to_s
77
83
  self.class.name.split("::").last(2).join("::")
78
84
  end
79
-
80
- def update(op_code, data)
81
- if op_code == Mixin::OPCodes::EVENT
82
- event = data[:eventType]
83
- data = data.key?(:eventData) ? data[:eventData] : {}
84
- notify_observers(event, Mixin::Data.new(data, data.keys))
85
- end
86
- end
87
85
  end
88
86
  end
89
87
  end
data/lib/obsws/mixin.rb CHANGED
@@ -18,7 +18,7 @@ module OBSWS
18
18
  def initialize(resp, fields)
19
19
  @resp = resp
20
20
  @fields = fields
21
- self.make_field_methods *fields
21
+ make_field_methods(*fields)
22
22
  end
23
23
 
24
24
  def empty? = @fields.empty?
@@ -33,9 +33,11 @@ module OBSWS
33
33
  end
34
34
 
35
35
  module TearDown
36
- def close
37
- @base_client.driver.close
36
+ def stop_driver
37
+ @base_client.stop_driver
38
38
  end
39
+
40
+ alias_method :close, :stop_driver
39
41
  end
40
42
 
41
43
  module OPCodes
data/lib/obsws/req.rb CHANGED
@@ -15,7 +15,9 @@ module OBSWS
15
15
  def initialize(**kwargs)
16
16
  @base_client = Base.new(**kwargs)
17
17
  LOGGER.info("#{self} succesfully identified with server")
18
- @base_client.add_observer(self)
18
+ @base_client.updater = ->(op_code, data) {
19
+ @response = data if op_code == Mixin::OPCodes::REQUESTRESPONSE
20
+ }
19
21
  @response = {requestId: 0}
20
22
  end
21
23
 
@@ -26,7 +28,7 @@ module OBSWS
26
28
  def run
27
29
  yield(self)
28
30
  ensure
29
- close
31
+ stop_driver
30
32
  WaitUtil.wait_for_condition(
31
33
  "driver to close",
32
34
  delay_sec: 0.01,
@@ -34,10 +36,6 @@ module OBSWS
34
36
  ) { @base_client.closed }
35
37
  end
36
38
 
37
- def update(op_code, data)
38
- @response = data if op_code == Mixin::OPCodes::REQUESTRESPONSE
39
- end
40
-
41
39
  def call(req, data = nil)
42
40
  id = rand(1..1000)
43
41
  @base_client.req(id, req, data)
data/lib/obsws/version.rb CHANGED
@@ -11,7 +11,7 @@ module OBSWS
11
11
  end
12
12
 
13
13
  def patch
14
- 0
14
+ 1
15
15
  end
16
16
 
17
17
  def to_a
metadata CHANGED
@@ -1,29 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: obsws
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - onyx_online
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-07-19 00:00:00.000000000 Z
11
+ date: 2023-07-26 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: observer
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: 0.1.1
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: 0.1.1
27
13
  - !ruby/object:Gem::Dependency
28
14
  name: websocket-driver
29
15
  requirement: !ruby/object:Gem::Requirement