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 +4 -4
- data/README.md +18 -16
- data/lib/obsws/base.rb +12 -8
- data/lib/obsws/event.rb +7 -9
- data/lib/obsws/mixin.rb +5 -3
- data/lib/obsws/req.rb +4 -6
- data/lib/obsws/version.rb +1 -1
- metadata +2 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c125c30687cdcd22d868636a4d7bfbe7776939a8b4997842785b3868e7959151
|
4
|
+
data.tar.gz: 7f4c51a8231083c220c95d4e0fa34da8bf7712307adcd21b32565043a3e28d7f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
|
31
|
+
Pass `host`, `port` and `password` as keyword arguments.
|
32
32
|
|
33
33
|
```ruby
|
34
34
|
require "obsws"
|
35
35
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
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
|
-
|
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.
|
54
|
+
Method names for requests match the API calls but snake cased.
|
51
55
|
|
52
56
|
example:
|
53
57
|
|
54
58
|
```ruby
|
55
|
-
|
56
|
-
|
57
|
-
resp = r_client.get_version
|
59
|
+
# GetVersion
|
60
|
+
resp = r_client.get_version
|
58
61
|
|
59
|
-
|
60
|
-
|
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 :
|
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
|
-
|
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
|
-
|
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.
|
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
|
-
|
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
|
37
|
-
@base_client.
|
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.
|
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
|
-
|
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
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.
|
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-
|
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
|