ruby_rabbitmq_janus 1.2.9 → 2.0.0.pre.42

Sign up to get free protection for your applications and to get access to all the features.
Files changed (118) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +2 -0
  3. data/README.md +145 -32
  4. data/config/default.yml +2 -0
  5. data/config/requests.md +2 -1
  6. data/config/requests/admin/add_token.json +6 -0
  7. data/config/requests/admin/allow_token.json +6 -0
  8. data/config/requests/admin/disallow_token.json +6 -0
  9. data/config/requests/admin/handle_info.json +1 -1
  10. data/config/requests/admin/handles.json +1 -1
  11. data/config/requests/admin/remove_token.json +6 -0
  12. data/config/requests/admin/sessions.json +1 -1
  13. data/config/requests/admin/set_locking_debug.json +6 -0
  14. data/config/requests/admin/{log_level.json → set_log_level.json} +1 -1
  15. data/config/requests/admin/tokens.json +5 -0
  16. data/config/requests/base/attach.json +1 -1
  17. data/config/requests/base/create.json +1 -1
  18. data/config/requests/base/destroy.json +1 -1
  19. data/config/requests/base/detach.json +1 -1
  20. data/config/requests/base/info.json +1 -1
  21. data/config/requests/base/keepalive.json +1 -1
  22. data/config/requests/peer/answer.json +1 -1
  23. data/config/requests/peer/offer.json +1 -1
  24. data/config/requests/peer/trickle.json +1 -1
  25. data/lib/generators/ruby_rabbitmq_janus/initializer_generator.rb +3 -0
  26. data/lib/rrj/admin.rb +34 -0
  27. data/lib/rrj/errors/error.rb +2 -1
  28. data/lib/rrj/errors/init.rb +6 -0
  29. data/lib/rrj/errors/janus/janus.rb +1 -0
  30. data/lib/rrj/errors/janus/janus_message.rb +8 -4
  31. data/lib/rrj/errors/janus/janus_processus_keepalive.rb +1 -0
  32. data/lib/rrj/errors/janus/janus_response.rb +27 -6
  33. data/lib/rrj/errors/janus/janus_transaction.rb +4 -0
  34. data/lib/rrj/errors/rabbit/rabbit.rb +3 -1
  35. data/lib/rrj/errors/tools/config.rb +1 -0
  36. data/lib/rrj/info.rb +1 -1
  37. data/lib/rrj/init.rb +37 -169
  38. data/lib/rrj/janus/messages/admin.rb +1 -2
  39. data/lib/rrj/janus/messages/message.rb +4 -4
  40. data/lib/rrj/janus/messages/standard.rb +3 -5
  41. data/lib/rrj/janus/processus/concurrency.rb +1 -1
  42. data/lib/rrj/janus/processus/keepalive.rb +10 -4
  43. data/lib/rrj/janus/responses/admin.rb +31 -0
  44. data/lib/rrj/janus/responses/event.rb +23 -5
  45. data/lib/rrj/janus/responses/response.rb +2 -0
  46. data/lib/rrj/janus/responses/standard.rb +26 -5
  47. data/lib/rrj/janus/transactions/admin.rb +22 -26
  48. data/lib/rrj/janus/transactions/handle.rb +13 -8
  49. data/lib/rrj/janus/transactions/session.rb +25 -7
  50. data/lib/rrj/janus/transactions/transaction.rb +2 -1
  51. data/lib/rrj/rabbit/connect.rb +2 -3
  52. data/lib/rrj/rabbit/publish/admin.rb +1 -6
  53. data/lib/rrj/rabbit/publish/base_publisher.rb +6 -11
  54. data/lib/rrj/rabbit/publish/exclusive.rb +1 -0
  55. data/lib/rrj/rabbit/publish/listener.rb +10 -27
  56. data/lib/rrj/rabbit/publish/non_exclusive.rb +2 -6
  57. data/lib/rrj/rabbit/publish/publisher.rb +4 -17
  58. data/lib/rrj/tools/{config.rb → gem/config.rb} +5 -5
  59. data/lib/rrj/tools/{log.rb → gem/log.rb} +21 -6
  60. data/lib/rrj/tools/gem/option.rb +57 -0
  61. data/lib/rrj/tools/{requests.rb → gem/requests.rb} +0 -0
  62. data/lib/rrj/tools/replaces/admin.rb +7 -13
  63. data/lib/rrj/tools/replaces/handle.rb +61 -0
  64. data/lib/rrj/tools/replaces/replace.rb +57 -27
  65. data/lib/rrj/tools/replaces/session.rb +34 -0
  66. data/lib/rrj/tools/replaces/type.rb +63 -11
  67. data/lib/rrj/tools/tools.rb +4 -3
  68. data/lib/ruby_rabbitmq_janus.rb +1 -0
  69. data/spec/request/admin/request_handle_info_spec.rb +13 -7
  70. data/spec/request/admin/request_handles_spec.rb +20 -0
  71. data/spec/request/admin/request_sessions_spec.rb +5 -4
  72. data/spec/request/admin/request_set_locking_debug_spec.rb +16 -0
  73. data/spec/request/admin/request_set_log_level_spec.rb +16 -0
  74. data/spec/request/admin/request_tokens_spec.rb +13 -0
  75. data/spec/request/base/request_attach_spec.rb +6 -9
  76. data/spec/request/base/request_create_spec.rb +5 -3
  77. data/spec/request/base/request_destroy_spec.rb +5 -3
  78. data/spec/request/base/request_detach_spec.rb +6 -7
  79. data/spec/request/base/request_info_spec.rb +5 -3
  80. data/spec/request/base/request_keepalive_spec.rb +5 -3
  81. data/spec/request/peer/request_offer_spec.rb +18 -92
  82. data/spec/request/peer/request_trickle_spec.rb +9 -28
  83. data/spec/request/peer/request_trickles_spec.rb +23 -0
  84. data/spec/rrj/responses/responses_admin_spec.rb +39 -0
  85. data/spec/rrj/responses/responses_event_spec.rb +25 -0
  86. data/spec/rrj/responses/responses_response_spec.rb +31 -0
  87. data/spec/rrj/responses/responses_standard_spec.rb +43 -0
  88. data/spec/rrj/rrj_config_spec.rb +7 -7
  89. data/spec/rrj/rrj_rabbitmq_spec.rb +1 -1
  90. data/spec/rrj/tools/replace_admin_spec.rb +86 -0
  91. data/spec/rrj/tools/replace_handle_spec.rb +78 -0
  92. data/spec/rrj/tools/replace_session_spec.rb +66 -0
  93. data/spec/rrj/tools/replace_spec.rb +69 -0
  94. data/spec/rrj/tools/type_spec.rb +150 -0
  95. data/spec/spec_helper.rb +46 -7
  96. data/spec/support/examples_request.rb +33 -61
  97. data/spec/support/examples_response.rb +30 -0
  98. data/spec/support/schemas/request/admin/handles.json +15 -0
  99. data/spec/support/schemas/request/admin/set_locking_debug.json +13 -0
  100. data/spec/support/schemas/request/admin/set_log_level.json +11 -0
  101. data/spec/support/schemas/request/admin/tokens.json +13 -0
  102. data/spec/support/type.rb +66 -0
  103. metadata +41 -69
  104. data/config/requests/peer/trickles.json +0 -7
  105. data/lib/rrj/tools/replaces/standard.rb +0 -101
  106. data/spec/fixtures/config/requests/admin/handle_info.json +0 -3
  107. data/spec/fixtures/config/requests/admin/handles.json +0 -3
  108. data/spec/fixtures/config/requests/admin/log_level.json +0 -3
  109. data/spec/fixtures/config/requests/admin/sessions.json +0 -3
  110. data/spec/fixtures/config/requests/base/attach.json +0 -3
  111. data/spec/fixtures/config/requests/base/create.json +0 -4
  112. data/spec/fixtures/config/requests/base/destroy.json +0 -3
  113. data/spec/fixtures/config/requests/base/detach.json +0 -3
  114. data/spec/fixtures/config/requests/base/info.json +0 -3
  115. data/spec/fixtures/config/requests/base/keepalive.json +0 -3
  116. data/spec/fixtures/config/requests/peer/answer.json +0 -3
  117. data/spec/fixtures/config/requests/peer/offer.json +0 -3
  118. data/spec/fixtures/config/requests/peer/trickle.json +0 -3
@@ -4,10 +4,11 @@ module RubyRabbitmqJanus
4
4
  # Define all error in gem
5
5
  module Errors
6
6
  # @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
7
-
7
+ #
8
8
  # Define errors to gems
9
9
  class RRJError < StandardError
10
10
  # Initialize a error standard in this gem
11
+ #
11
12
  # @param [String] message Text returning in raise
12
13
  # @param [Symbol] level Important to error
13
14
  def initialize(message, level)
@@ -7,6 +7,7 @@ module RubyRabbitmqJanus
7
7
  # Define a super class for all errors in RRJ Class
8
8
  class RRJ < RRJError
9
9
  # Define a message error and level
10
+ #
10
11
  # @param [String] message Text returning in raise
11
12
  # @param [Symbol] level Level to message in log
12
13
  def initalize(message, level)
@@ -17,6 +18,7 @@ module RubyRabbitmqJanus
17
18
  # Define an exception if gem dont initialize correctly
18
19
  class InstanciateGemFailed < RRJ
19
20
  # Initialize a error for instanciate class. It's a fatal error
21
+ #
20
22
  # @param [String] message Text returning in raise
21
23
  def initialize(message)
22
24
  super "Gem is not instanciate correctly : #{message}", :fatal
@@ -26,6 +28,7 @@ module RubyRabbitmqJanus
26
28
  # Define an error if method message_post given an exception
27
29
  class TransactionSessionFailed < RRJ
28
30
  # Initialize a error for message posting. It's a fatal error
31
+ #
29
32
  # @param [String] message Text returning in raise
30
33
  def initialize(message)
31
34
  super "Transaction SESSION failed : #{message}", :fatal
@@ -35,6 +38,7 @@ module RubyRabbitmqJanus
35
38
  # Define a error if method transaction given an exception
36
39
  class TransactionMessageFailed < RRJ
37
40
  # Initialize a error for transaction failed. It's a fatal error
41
+ #
38
42
  # @param [String] message Text returning in raise
39
43
  def initialize(message)
40
44
  super "Message in a transaction HANDLE failed : #{message}", :fatal
@@ -44,6 +48,7 @@ module RubyRabbitmqJanus
44
48
  # Define a error if method start_handle given an exception
45
49
  class TransactionHandleFailed < RRJ
46
50
  # Initialize a error for transaction with a handle. It's a fatal error
51
+ #
47
52
  # @param [String] message Text returning in raise
48
53
  def initialize(message)
49
54
  super "Transaction HANDLE failed : #{message}", :fatal
@@ -53,6 +58,7 @@ module RubyRabbitmqJanus
53
58
  # define a error for Admin Transaction
54
59
  class TransactionAdminFailed < RRJ
55
60
  # Initialize a error for transaction admin
61
+ #
56
62
  # @param [String] message Text returning in raise
57
63
  def initialize(message)
58
64
  super "Transaction ADMIN failed : #{message}", :fatal
@@ -6,6 +6,7 @@ module RubyRabbitmqJanus
6
6
  # Define errors to message sending and response to janus
7
7
  class Janus < RRJError
8
8
  # Initialize a error standard for janus module
9
+ #
9
10
  # @param [String] message Text returning in raise
10
11
  def initialize(message)
11
12
  super "[JANUS]#{message}", :fatal
@@ -3,10 +3,11 @@
3
3
  module RubyRabbitmqJanus
4
4
  module Errors
5
5
  # @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
6
-
6
+ #
7
7
  # Define an exception for janus message class
8
8
  class JanusMessage < Janus
9
9
  # Initialize a error for janus message module
10
+ #
10
11
  # @param [String] message Text returning in raise
11
12
  def initialize(message)
12
13
  super "[Message] #{message}"
@@ -14,10 +15,11 @@ module RubyRabbitmqJanus
14
15
  end
15
16
 
16
17
  # @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
17
-
18
+ #
18
19
  # Define an exception for janus message to_json
19
20
  class JanusMessageJson < JanusMessage
20
21
  # Initialize a error for janus message in to_json
22
+ #
21
23
  # @param [String] message Text returning in raise
22
24
  def initialize(message)
23
25
  super "Error transform to json : #{message}"
@@ -25,10 +27,11 @@ module RubyRabbitmqJanus
25
27
  end
26
28
 
27
29
  # @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
28
-
30
+ #
29
31
  # Define an exception for janus message to_nice_json
30
32
  class JanusMessagePrettyJson < JanusMessage
31
33
  # Initialize a error for janus message in to_nice_json
34
+ #
32
35
  # @param [String] message Text returning in raise
33
36
  def initialize(message)
34
37
  super "Error transform to pretty json : #{message}"
@@ -36,10 +39,11 @@ module RubyRabbitmqJanus
36
39
  end
37
40
 
38
41
  # @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
39
-
42
+ #
40
43
  # Define an exception for janus message to_hash
41
44
  class JanusMessageHash < JanusMessage
42
45
  # Initialize a error for janus message in to_hash
46
+ #
43
47
  # @param [String] message Text returning in raise
44
48
  def initialize(message)
45
49
  super "Error transform to hash : #{message}"
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  # @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
3
4
  # @see RubyRabbitmqJanus::Janus::Keepalive Keepalive thread
4
5
 
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ # :reek:FeatureEnvy
4
+
3
5
  module RubyRabbitmqJanus
4
6
  module Errors
5
7
  # @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
@@ -7,6 +9,7 @@ module RubyRabbitmqJanus
7
9
  # Define an error primary for response
8
10
  class JanusResponse < Janus
9
11
  # Initialize a error for janus response module
12
+ #
10
13
  # @param [String] message Text returning in raise
11
14
  def initialize(message)
12
15
  super "[Response] #{message}"
@@ -14,9 +17,21 @@ module RubyRabbitmqJanus
14
17
  end
15
18
 
16
19
  # @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
20
+ #
21
+ # Define an error for request return
22
+ class JanusResponseRequest < JanusResponse
23
+ # Initialize error
24
+ def initialize(type_rqe, type_msg, message)
25
+ "Error transform to #{type_rqe} : #{type_msg} -- message : #{message}"
26
+ end
27
+ end
28
+
29
+ # @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
30
+ #
17
31
  # Define an error for response initalize
18
32
  class JanusResponseInit < JanusResponse
19
33
  # Initialize a error for janus response module in initializer
34
+ #
20
35
  # @param [String] message Text returning in raise
21
36
  def initialize(message)
22
37
  super "Error create object : #{message}"
@@ -24,20 +39,23 @@ module RubyRabbitmqJanus
24
39
  end
25
40
 
26
41
  # @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
42
+ #
27
43
  # Define an exception for json
28
- class JanusResponseJson < JanusResponse
44
+ class JanusResponseJson < JanusResponseRequest
29
45
  # Initialize a error for janus response module in to_json
46
+ #
30
47
  # @param [String] message Text returning in raise
31
48
  def initialize(message)
32
- super \
33
- "Error transform to JSON : #{message[0]} -- message : #{message[1]}"
49
+ super('JSON', message[0], message[1])
34
50
  end
35
51
  end
36
52
 
37
53
  # @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
54
+ #
38
55
  # Define an exception for nice_json
39
56
  class JanusResponsePrettyJson < JanusResponse
40
57
  # Initialize a error for janus response module in to_nice_json
58
+ #
41
59
  # @param [String] message Text returning in raise
42
60
  def initialize(message)
43
61
  super "Error transform to Pretty JSON : #{message}"
@@ -45,20 +63,23 @@ module RubyRabbitmqJanus
45
63
  end
46
64
 
47
65
  # @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
66
+ #
48
67
  # Define an exception for hash
49
- class JanusResponseHash < JanusResponse
68
+ class JanusResponseHash < JanusResponseRequest
50
69
  # Initialize a error for janus response module in to_hash
70
+ #
51
71
  # @param [String] message Text returning in raise
52
72
  def initialize(message)
53
- super \
54
- "Error transform to Hash : #{message[0]} -- message : #{message[1]}"
73
+ super('HASH', message[0], message[1])
55
74
  end
56
75
  end
57
76
 
58
77
  # @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
78
+ #
59
79
  # Define an error for response data
60
80
  class JanusResponseDataId < JanusResponse
61
81
  # Initialize a error for janus response module in data_id
82
+ #
62
83
  # @param [String] message Text returning in raise
63
84
  def initialize(message)
64
85
  super "Error Data : #{message}"
@@ -3,9 +3,11 @@
3
3
  module RubyRabbitmqJanus
4
4
  module Errors
5
5
  # @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
6
+ #
6
7
  # Define an exception for initalizer transaction
7
8
  class JanusTransaction < Janus
8
9
  # Initialize a error for janus transaction class
10
+ #
9
11
  # @param [String] message Text returning in raise
10
12
  def initialize(message)
11
13
  super "[Transaction]#{message}"
@@ -13,9 +15,11 @@ module RubyRabbitmqJanus
13
15
  end
14
16
 
15
17
  # @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
18
+ #
16
19
  # Define an exception for running_handle
17
20
  class JanusTransactionHandle < JanusTransaction
18
21
  # Initialize a error for janus transaction handle class
22
+ #
19
23
  # @param [String] message Text returning in raise
20
24
  def initialize(message)
21
25
  super "[Handle] #{message}"
@@ -3,16 +3,18 @@
3
3
  module RubyRabbitmqJanus
4
4
  module Errors
5
5
  # @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
6
+ #
6
7
  # Define errors if connection to rabbitmq is failed
7
8
  class ConnectionRabbitmqFailed < RRJError
8
9
  # Initialize a error for rabbit module. It's a fatal error
10
+ #
9
11
  # @param [String] message Text returning in raise
10
12
  def initialize(message)
11
13
  super message, :fatal
12
14
  end
13
15
  end
14
16
 
15
- # Execpetion primary for Rabbit class
17
+ # Excepetion primary for Rabbit class
16
18
  class Rabbit < RRJError
17
19
  def initialize(message)
18
20
  super "[Rabbit]#{message}", :fatal
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  # @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
3
4
 
4
5
  module RubyRabbitmqJanus
data/lib/rrj/info.rb CHANGED
@@ -5,7 +5,7 @@
5
5
  # Define constant to gem.
6
6
  module RubyRabbitmqJanus
7
7
  # Define version to gem
8
- VERSION = '1.2.9'
8
+ VERSION = '2.0.0'
9
9
 
10
10
  # Name to gem
11
11
  GEM_NAME = 'ruby_rabbitmq_janus'
data/lib/rrj/init.rb CHANGED
@@ -36,196 +36,64 @@ module RubyRabbitmqJanus
36
36
  # @rrj = RubyRabbitmqJanus::RRJ.new
37
37
  # => #<RubyRabbitmqJanus::RRJ:0x007 @session=123>
38
38
  def initialize
39
- Tools::Log.instance
40
- Tools::Config.instance
41
- Tools::Requests.instance
42
-
43
- # Create an session while time opening
44
- @session = Janus::Concurrencies::Keepalive.instance.session
39
+ @option = Tools::Option.new
40
+ @session = @option.keepalive
45
41
  Tools::Log.instance.info "Create an session janus with id : #{@session}"
46
42
  rescue => error
47
43
  raise Errors::InstanciateGemFailed, error
48
44
  end
49
45
 
50
- # Send an simple message to janus.
51
- #
52
- # @param [String] type
53
- # Given a type to request. JSON request writing in 'config/requests/'
54
- # @param [Bollean] exclusive
55
- # Use an exclusive queue or not
56
- # @param [Hash] options Options update in request
57
- #
58
- # @example Sending an message info in queue 'to-janus'
59
- # RubyRabbitmqJanus::RRJ.new.message_simple('base::info', true)
60
- # #=> {}
61
- # @example Sending an message info in queue exclusive 'ampq.gen-xxxxx'
62
- # RubyRabbitmqJanus::RRJ.new.message_simple('base::info')
63
- # #=> {"janus":"server_info","name":"Janus WebRTC Gateway" ... }
64
- #
65
- # @return [RubyRabbitmqJanus::Janus::Responses::Standard]
66
- # Give an object response to janus server
67
- #
68
- # @since 1.0.0
69
- def message_simple(type = 'base::info', exclusive = false,
70
- options = { 'replace' => {}, 'add' => {} })
71
- Janus::Transactions::Session.new(@session).connect(exclusive) do
72
- Janus::Messages::Standard.new(type, options)
73
- end
74
- rescue => error
75
- raise Errors::TransactionSessionFailed, error
76
- end
77
-
78
- # Send an message simple in current session.
79
- #
80
- # @param [String] type
81
- # Given a type to request. JSON request writing in 'config/requests/'
82
- # @param [Hash] options Options update in request
83
- # @param [Bollean] exclusive
84
- # Use an exclusive queue or not
85
- #
86
- # @example Sending an message create
87
- # RubyRabbitmqJanus::RRJ.new.message_session('base::create')
88
- # #=> {"janus":"server_info","name":"Janus WebRTC Gateway" ... }
89
- #
90
- # @return [RubyRabbitmqJanus::Janus::Responses::Standard]
91
- # Give an object response to janus server
92
- #
93
- # @since 1.0.0
94
- def message_session(type, options = { 'replace' => {}, 'add' => {} },
95
- exclusive = true)
96
- Janus::Transactions::Session.new(@session).connect(exclusive) do
97
- Janus::Messages::Standard.new(type, use_current_session?(options))
98
- end
99
- rescue => error
100
- raise Errors::TransactionSessionFailed, error
101
- end
102
-
103
- # Send a message simple for admin Janus.
104
- # **Is used just for sending a message to Janus Monitor/Admin API**. The
105
- # queue is exclusive for not transmitting data to anyone.
46
+ # Start a transaction with Janus. Request use session_id information.
106
47
  #
107
- # @param [String] type
108
- # Given a type to request. JSON request writing in `config/requests/`
109
- # @param [Hash] options Fields updating in request sending to janus.
110
- # **This hash must imperatively contains the key `replace`**
111
- # @option options [Hash] :replace Contains all fields who be replaced in
112
- # request sending to janus.
113
- # @option options [Hash] :add Contains all fields adding to request.
48
+ # @param [Boolean] exclusive Choose if message is storage in exclusive queue
49
+ # @param [Hash] options
50
+ # Give a session number for use another session in Janus
114
51
  #
115
- # @example Sending an message create
116
- # RubyRabbitmqJanus::RRJ.new.message_admin('admin::sessions')
117
- # #=> {"janus":"success","sessions": [12345, 8786567465465, ...] }
118
- #
119
- # @return [RubyRabbitmqJanus::Janus::Responses::Standard]
120
- # Give an object response to janus server
52
+ # @example Get Janus information
53
+ # @rrj.start_transaction do |transaction|
54
+ # response = transaction.publish_message('base::info').to_hash
55
+ # end
121
56
  #
122
- # @since 1.0.0
123
- def message_admin(type, options = { 'replace' => {}, 'add' => {} })
124
- Janus::Transactions::Admin.new(@session,
125
- true,
126
- handle?(options)).connect do
127
- Janus::Messages::Admin.new(type, options)
128
- end
129
- rescue => error
130
- raise Errors::TransactionAdminFailed, error
57
+ # @since 2.0.0
58
+ def start_transaction(exclusive = true, options = {})
59
+ session = @option.use_current_session?(options)
60
+ transaction = Janus::Transactions::Session.new(exclusive, session)
61
+ transaction.connect { yield(transaction) }
131
62
  end
132
63
 
133
- # Send an message in handle session in current session.
134
- #
135
- # @param [String] type
136
- # Given a type to request. JSON request writing in 'config/requests/'
137
- # @param [Hash] options Fields updating in request sending to janus.
138
- # **This hash must imperatively contains the key `replace`**
139
- # @option options [Hash] :replace Contains all fields who be replaced in
140
- # request sending to janus.
141
- # @option options [Hash] :add Contains all fields adding to request.
64
+ # Start a transaction with Janus. Request used session_id/handle_id
65
+ # information.
142
66
  #
143
- # @example Sending an message create
144
- # RubyRabbitmqJanus::RRJ.new.message_session('base::create')
145
- # #=> {"janus":"server_info","name":"Janus WebRTC Gateway" ... }
67
+ # @param [Boolean] exclusive Choose if message is storage in exclusive queue
68
+ # @param [Hash] options
69
+ # Give a session number for use another session in Janus
146
70
  #
147
- # @return [RubyRabbitmqJanus::Janus::Responses::Standard]
148
- # Give a object response to janus server
71
+ # @note Use transaction.detach for closing handle in Janus
149
72
  #
150
- # @since 1.0.0
151
- def message_handle(type, transaction,
152
- options = { 'replace' => {}, 'add' => {} })
153
- transaction.publish_message_handle(type, options)
154
- rescue => error
155
- raise Errors::TransactionMessageFailed, error
156
- end
157
-
158
- # Define an handle transaction and establish connection with janus
159
- #
160
- # @param [Bollean] exclusive
161
- # Use an exclusive queue or not
162
- #
163
- # @yield Sending requests to Janus.
73
+ # @example Send request trickles for exclusive queue
74
+ # @cde = { 'sdpMid' => '...', sdpMLineIndex => 0, 'candidate' => '...' }
75
+ # @rrj.start_transaction_handle do |transaction|
76
+ # transaction.publish_message('base::trickle', @cde)
77
+ # end
164
78
  #
165
- # @example Start a transaction with janus with a exclusive queue
166
- # @rrj.start_handle(true) do |transaction|
167
- # @rrj.message_handle('peer:trickle', transaction)
79
+ # @example Send request trickles for non exclusive queue
80
+ # @cde = { 'sdpMid' => '...', sdpMLineIndex => 0, 'candidate' => '...' }
81
+ # @rrj.start_transaction_handle(false) do |transaction|
82
+ # transaction.publish_message('base::trickle', @cde)
168
83
  # end
169
84
  #
170
- # @see #message_handle
85
+ # @return [Fixnum] Handle used for transaction
171
86
  #
172
- # @since 1.0.0
173
- def start_handle(exclusive = false)
174
- transaction = Janus::Transactions::Handle.new(@session, exclusive)
87
+ # @since 2.0.0
88
+ def start_transaction_handle(exclusive = true, options = {})
89
+ session = @option.use_current_session?(options)
90
+ handle = @option.use_current_handle?(options)
91
+ transaction = Janus::Transactions::Handle.new(exclusive, session, handle)
175
92
  transaction.connect { yield(transaction) }
176
- rescue => error
177
- raise Errors::TransactionHandleFailed, error
178
- end
179
-
180
- # Start an short transaction. Create an handle and send one message to
181
- # queue. **This queue is not exclusive**, so this message is sending in
182
- # queue 'to-janus' and a response is return in queue 'from-janus'.
183
- #
184
- # @param [String] type
185
- # Given a type to request. JSON request writing in 'config/requests/'
186
- # @param [Hash] options Fields updating in request sending to janus.
187
- # **This hash must imperatively contains the key `replace`**
188
- # @option options [Hash] :replace Contains all fields who be replaced in
189
- # request sending to janus.
190
- # @option options [Hash] :add Contains all fields adding to request.
191
- #
192
- # @example Send an request trickle
193
- # cdn = {
194
- # 'candidate' => {
195
- # 'sdpMid' => 'video',
196
- # 'sdpMLineIndex' => 1,
197
- # 'candidate' => '...'
198
- # }
199
- # }
200
- # RubyRabbitmqJanus::RRJ.new.handle_message_simple('peer::trickle', cdn)
201
- # #=> { 'janus' => 'trickle', ..., 'candidate' => { ... } }
202
- #
203
- # @since 1.0.0
204
- def handle_message_simple(type, options = { 'replace' => {}, 'add' => {} })
205
- transaction = Janus::Transactions::Handle.new(session?(options),
206
- false, handle?(options))
207
- transaction.connect { message_handle(type, transaction, options) }
208
- rescue => error
209
- raise Errors::TransactionHandleFailed, error
210
93
  end
211
94
 
212
95
  private
213
96
 
214
- def use_current_session?(option)
215
- { 'session_id' => @session } unless option.key?('session_id')
216
- end
217
-
218
- def session?(options)
219
- return_value(options, 'session_id', @session)
220
- end
221
-
222
- def handle?(options)
223
- return_value(options, 'handle_id', 0)
224
- end
225
-
226
- def return_value(opt, key, value)
227
- replace = opt['replace']
228
- replace.key?(key) ? replace[key] : value
229
- end
97
+ attr_reader :option
230
98
  end
231
99
  end