obsws 0.2.1 → 0.3.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 +5 -8
- data/lib/obsws/base.rb +8 -49
- data/lib/obsws/driver.rb +51 -0
- data/lib/obsws/event.rb +4 -1
- data/lib/obsws/logger.rb +11 -0
- data/lib/obsws/req.rb +5 -2
- data/lib/obsws/util.rb +2 -3
- data/lib/obsws/version.rb +1 -1
- data/lib/obsws.rb +0 -6
- metadata +3 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ddfcc82f3a8213d04134762ce838d20cfef23f61fd12bfcdb8d414ca381aaae4
|
4
|
+
data.tar.gz: 572f30bae6af2264b9a208eb567ceea95e95b65d6311831d7155f052147ce81f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c4a6aa4c301fd4f0a339b1f6b06a629d1051499b0cba82485ccbb93428318066515f51cdfda61b0f09c7ebd7a6c3b7a601e08d9d91f95f9111f3166235484e6c
|
7
|
+
data.tar.gz: 1b94ca2cf66e810b0a195fbe501518e6c87b0a26844c69303196a0f8cbe41770994d38e8613c3a7a612f723de7736b5e14afd2808fa6a70ef7dd3bfb7e5aff08
|
data/README.md
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
[](https://github.com/onyx-and-iris/obsws-ruby/blob/dev/LICENSE)
|
3
3
|
[](https://github.com/standardrb/standard)
|
4
4
|
|
5
|
-
#
|
5
|
+
# Ruby Clients for OBS Studio WebSocket v5.0
|
6
6
|
|
7
7
|
## Requirements
|
8
8
|
|
@@ -114,15 +114,12 @@ For a full list of status codes refer to [Codes](https://github.com/obsproject/o
|
|
114
114
|
|
115
115
|
### Logging
|
116
116
|
|
117
|
-
To
|
117
|
+
To enable logs set an environmental variable `OBSWS_LOG_LEVEL` to the appropriate level.
|
118
118
|
|
119
|
-
example:
|
120
|
-
|
121
|
-
```ruby
|
122
|
-
require "obsws"
|
119
|
+
example in powershell:
|
123
120
|
|
124
|
-
|
125
|
-
|
121
|
+
```powershell
|
122
|
+
$env:OBSWS_LOG_LEVEL="DEBUG"
|
126
123
|
```
|
127
124
|
|
128
125
|
### Tests
|
data/lib/obsws/base.rb
CHANGED
@@ -1,27 +1,16 @@
|
|
1
|
-
require "socket"
|
2
|
-
require "websocket/driver"
|
3
1
|
require "digest/sha2"
|
4
2
|
require "json"
|
5
3
|
require "waitutil"
|
6
4
|
|
7
|
-
require_relative "
|
5
|
+
require_relative "driver"
|
8
6
|
require_relative "error"
|
7
|
+
require_relative "logger"
|
8
|
+
require_relative "mixin"
|
9
9
|
|
10
10
|
module OBSWS
|
11
|
-
class Socket
|
12
|
-
attr_reader :url
|
13
|
-
|
14
|
-
def initialize(url, socket)
|
15
|
-
@url = url
|
16
|
-
@socket = socket
|
17
|
-
end
|
18
|
-
|
19
|
-
def write(s)
|
20
|
-
@socket.write(s)
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
11
|
class Base
|
12
|
+
include Logging
|
13
|
+
include Driver
|
25
14
|
include Mixin::OPCodes
|
26
15
|
|
27
16
|
attr_reader :closed
|
@@ -32,21 +21,7 @@ module OBSWS
|
|
32
21
|
port = kwargs[:port] || 4455
|
33
22
|
@password = kwargs[:password] || ""
|
34
23
|
@subs = kwargs[:subs] || 0
|
35
|
-
|
36
|
-
@socket = TCPSocket.new(host, port)
|
37
|
-
@driver =
|
38
|
-
WebSocket::Driver.client(Socket.new("ws://#{host}:#{port}", @socket))
|
39
|
-
@driver.on :open do |msg|
|
40
|
-
LOGGER.debug("driver socket open")
|
41
|
-
end
|
42
|
-
@driver.on :close do |msg|
|
43
|
-
LOGGER.debug("driver socket closed")
|
44
|
-
@closed = true
|
45
|
-
end
|
46
|
-
@driver.on :message do |msg|
|
47
|
-
LOGGER.debug("received: #{msg.data}")
|
48
|
-
msg_handler(JSON.parse(msg.data, symbolize_names: true))
|
49
|
-
end
|
24
|
+
setup_driver(host, port)
|
50
25
|
start_driver
|
51
26
|
WaitUtil.wait_for_condition(
|
52
27
|
"successful identification",
|
@@ -55,22 +30,6 @@ module OBSWS
|
|
55
30
|
) { @identified }
|
56
31
|
end
|
57
32
|
|
58
|
-
private def start_driver
|
59
|
-
Thread.new do
|
60
|
-
@driver.start
|
61
|
-
|
62
|
-
loop do
|
63
|
-
@driver.parse(@socket.readpartial(4096))
|
64
|
-
rescue EOFError
|
65
|
-
break
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
public def stop_driver
|
71
|
-
@driver.close
|
72
|
-
end
|
73
|
-
|
74
33
|
private
|
75
34
|
|
76
35
|
def auth_token(salt:, challenge:)
|
@@ -91,7 +50,7 @@ module OBSWS
|
|
91
50
|
if @password.empty?
|
92
51
|
raise OBSWSError("auth enabled but no password provided")
|
93
52
|
end
|
94
|
-
|
53
|
+
logger.info("initiating authentication")
|
95
54
|
payload[:d][:authentication] = auth_token(**auth)
|
96
55
|
end
|
97
56
|
@driver.text(JSON.generate(payload))
|
@@ -117,7 +76,7 @@ module OBSWS
|
|
117
76
|
}
|
118
77
|
}
|
119
78
|
payload[:d][:requestData] = data if data
|
120
|
-
|
79
|
+
logger.debug("sending request: #{payload}")
|
121
80
|
@driver.text(JSON.generate(payload))
|
122
81
|
end
|
123
82
|
end
|
data/lib/obsws/driver.rb
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
require "socket"
|
2
|
+
require "websocket/driver"
|
3
|
+
|
4
|
+
module OBSWS
|
5
|
+
module Driver
|
6
|
+
class Socket
|
7
|
+
attr_reader :url
|
8
|
+
|
9
|
+
def initialize(url, socket)
|
10
|
+
@url = url
|
11
|
+
@socket = socket
|
12
|
+
end
|
13
|
+
|
14
|
+
def write(s)
|
15
|
+
@socket.write(s)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def setup_driver(host, port)
|
20
|
+
@socket = TCPSocket.new(host, port)
|
21
|
+
@driver =
|
22
|
+
WebSocket::Driver.client(Socket.new("ws://#{host}:#{port}", @socket))
|
23
|
+
@driver.on :open do |msg|
|
24
|
+
logger.debug("driver socket open")
|
25
|
+
end
|
26
|
+
@driver.on :close do |msg|
|
27
|
+
logger.debug("driver socket closed")
|
28
|
+
@closed = true
|
29
|
+
end
|
30
|
+
@driver.on :message do |msg|
|
31
|
+
msg_handler(JSON.parse(msg.data, symbolize_names: true))
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
private def start_driver
|
36
|
+
Thread.new do
|
37
|
+
@driver.start
|
38
|
+
|
39
|
+
loop do
|
40
|
+
@driver.parse(@socket.readpartial(4096))
|
41
|
+
rescue EOFError
|
42
|
+
break
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
public def stop_driver
|
48
|
+
@driver.close
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
data/lib/obsws/event.rb
CHANGED
@@ -2,6 +2,7 @@ require "json"
|
|
2
2
|
|
3
3
|
require_relative "util"
|
4
4
|
require_relative "mixin"
|
5
|
+
require_relative "logger"
|
5
6
|
|
6
7
|
module OBSWS
|
7
8
|
module Events
|
@@ -62,6 +63,7 @@ module OBSWS
|
|
62
63
|
end
|
63
64
|
|
64
65
|
class Client
|
66
|
+
include Logging
|
65
67
|
include Callbacks
|
66
68
|
include Mixin::TearDown
|
67
69
|
include Mixin::OPCodes
|
@@ -69,9 +71,10 @@ module OBSWS
|
|
69
71
|
def initialize(**kwargs)
|
70
72
|
kwargs[:subs] ||= SUBS::LOW_VOLUME
|
71
73
|
@base_client = Base.new(**kwargs)
|
72
|
-
|
74
|
+
logger.info("#{self} successfully identified with server")
|
73
75
|
@base_client.updater = ->(op_code, data) {
|
74
76
|
if op_code == Mixin::OPCodes::EVENT
|
77
|
+
logger.debug("received: #{data}")
|
75
78
|
event = data[:eventType]
|
76
79
|
data = data.fetch(:eventData, {})
|
77
80
|
notify_observers(event, Mixin::Data.new(data, data.keys))
|
data/lib/obsws/logger.rb
ADDED
data/lib/obsws/req.rb
CHANGED
@@ -4,18 +4,21 @@ require_relative "base"
|
|
4
4
|
require_relative "error"
|
5
5
|
require_relative "util"
|
6
6
|
require_relative "mixin"
|
7
|
+
require_relative "logger"
|
7
8
|
|
8
9
|
module OBSWS
|
9
10
|
module Requests
|
10
11
|
class Client
|
12
|
+
include Logging
|
11
13
|
include Error
|
12
14
|
include Mixin::TearDown
|
13
15
|
include Mixin::OPCodes
|
14
16
|
|
15
17
|
def initialize(**kwargs)
|
16
18
|
@base_client = Base.new(**kwargs)
|
17
|
-
|
19
|
+
logger.info("#{self} successfully identified with server")
|
18
20
|
@base_client.updater = ->(op_code, data) {
|
21
|
+
logger.debug("response received: #{data}")
|
19
22
|
@response = data if op_code == Mixin::OPCodes::REQUESTRESPONSE
|
20
23
|
}
|
21
24
|
@response = {requestId: 0}
|
@@ -56,7 +59,7 @@ module OBSWS
|
|
56
59
|
@response[:responseData]
|
57
60
|
rescue WaitUtil::TimeoutError
|
58
61
|
msg = "no response with matching id received"
|
59
|
-
|
62
|
+
logger.error(msg)
|
60
63
|
raise OBSWSError.new(msg)
|
61
64
|
end
|
62
65
|
|
data/lib/obsws/util.rb
CHANGED
@@ -2,12 +2,11 @@ module OBSWS
|
|
2
2
|
module Util
|
3
3
|
class ::String
|
4
4
|
def to_camel
|
5
|
-
|
5
|
+
split("_").map(&:capitalize).join
|
6
6
|
end
|
7
7
|
|
8
8
|
def to_snake
|
9
|
-
|
10
|
-
.gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
|
9
|
+
gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
|
11
10
|
.gsub(/([a-z\d])([A-Z])/, '\1_\2')
|
12
11
|
.downcase
|
13
12
|
end
|
data/lib/obsws/version.rb
CHANGED
data/lib/obsws.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: obsws
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- onyx_online
|
@@ -106,8 +106,10 @@ files:
|
|
106
106
|
- README.md
|
107
107
|
- lib/obsws.rb
|
108
108
|
- lib/obsws/base.rb
|
109
|
+
- lib/obsws/driver.rb
|
109
110
|
- lib/obsws/error.rb
|
110
111
|
- lib/obsws/event.rb
|
112
|
+
- lib/obsws/logger.rb
|
111
113
|
- lib/obsws/mixin.rb
|
112
114
|
- lib/obsws/req.rb
|
113
115
|
- lib/obsws/util.rb
|