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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c125c30687cdcd22d868636a4d7bfbe7776939a8b4997842785b3868e7959151
4
- data.tar.gz: 7f4c51a8231083c220c95d4e0fa34da8bf7712307adcd21b32565043a3e28d7f
3
+ metadata.gz: ddfcc82f3a8213d04134762ce838d20cfef23f61fd12bfcdb8d414ca381aaae4
4
+ data.tar.gz: 572f30bae6af2264b9a208eb567ceea95e95b65d6311831d7155f052147ce81f
5
5
  SHA512:
6
- metadata.gz: 5b14e996f1e06788e88b66d44fef72f06d5ba0ad07b38e83332a19dfa833c724f33ea2a2119336105cca63034f0a015e53a38b60d1049dc8745ae9be92d51028
7
- data.tar.gz: bfd3821cefe5a515feca6746edb5d042141492061bfa6303f1c6daf56a2215d0c4ce076224bb3b7873879649fe96f36a4ee223e6aeae08020988f3d8790fe26c
6
+ metadata.gz: c4a6aa4c301fd4f0a339b1f6b06a629d1051499b0cba82485ccbb93428318066515f51cdfda61b0f09c7ebd7a6c3b7a601e08d9d91f95f9111f3166235484e6c
7
+ data.tar.gz: 1b94ca2cf66e810b0a195fbe501518e6c87b0a26844c69303196a0f8cbe41770994d38e8613c3a7a612f723de7736b5e14afd2808fa6a70ef7dd3bfb7e5aff08
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/onyx-and-iris/obsws-ruby/blob/dev/LICENSE)
3
3
  [![Ruby Code Style](https://img.shields.io/badge/code_style-standard-violet.svg)](https://github.com/standardrb/standard)
4
4
 
5
- # A Ruby wrapper around OBS Studio WebSocket v5.0
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 see the raw messages set log level to debug
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
- OBSWS::LOGGER.debug!
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 "mixin"
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
- LOGGER.info("initiating authentication")
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
- LOGGER.debug("sending request: #{payload}")
79
+ logger.debug("sending request: #{payload}")
121
80
  @driver.text(JSON.generate(payload))
122
81
  end
123
82
  end
@@ -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
- LOGGER.info("#{self} succesfully identified with server")
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))
@@ -0,0 +1,11 @@
1
+ require "logger"
2
+
3
+ module OBSWS
4
+ module Logging
5
+ def logger
6
+ @logger = Logger.new($stdout, level: ENV.fetch("OBSWS_LOG_LEVEL", "WARN"))
7
+ @logger.progname = instance_of?(::Module) ? name : self.class.name
8
+ @logger
9
+ end
10
+ end
11
+ end
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
- LOGGER.info("#{self} succesfully identified with server")
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
- LOGGER.error(msg)
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
- self.split(/_/).map(&:capitalize).join
5
+ split("_").map(&:capitalize).join
6
6
  end
7
7
 
8
8
  def to_snake
9
- self
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
@@ -7,7 +7,7 @@ module OBSWS
7
7
  end
8
8
 
9
9
  def minor
10
- 2
10
+ 3
11
11
  end
12
12
 
13
13
  def patch
data/lib/obsws.rb CHANGED
@@ -1,11 +1,5 @@
1
- require "logger"
2
-
3
1
  require_relative "obsws/req"
4
2
  require_relative "obsws/event"
5
3
 
6
4
  module OBSWS
7
- include Logger::Severity
8
-
9
- LOGGER = Logger.new(STDOUT)
10
- LOGGER.level = WARN
11
5
  end
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.2.1
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