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 +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
|