obsws 0.2.1 → 0.3.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: 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