obsws 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
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