ruby_rabbitmq_janus 1.0.2 → 1.0.3

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
  SHA1:
3
- metadata.gz: c75cd0c7c7d224f8c5f3386e7eb847de7ffcecbc
4
- data.tar.gz: 17fe7cc7dfb933f50fe6293fbd9015f209bae0d9
3
+ metadata.gz: bb6b179f8eb2d1d0f17269da3861f0d128100a3e
4
+ data.tar.gz: e4dae7a3f07f17a4d92cf10b537830bc7e74b9a7
5
5
  SHA512:
6
- metadata.gz: 07d48d6283589d3adfd76be6820de3bb3508cf565a0e22af174e1704b8eeefdfb8bffca6d7d3afeb904627e92d71ac0af391545a58abe18d3985fae0d8b4ee36
7
- data.tar.gz: b6704497ca1ed9f0bace2e8f024e6da2a2e4998948a64371a662572aecab6c00a941699e9bbd0a3bc8a16d6f01de39eaa8889e60345df2af3edb3fd8e700377c
6
+ metadata.gz: 95f5ed36b90f240b1c42b36785826795a501a4d7f4c7b57a342dcb55007d1a795d5102efdcd35c49df5571d1188ae12d3c0b7409fa8ee51a7e73dc79b0131e20
7
+ data.tar.gz: 7e352cabebf3d24213768e49466588205c7557d95c6be73e9e31089aa8c73a8331dda52cc2682f2502a7e18bdd01e9be97dff60399e6121e6f3b13f8f2dcabb8
@@ -23,7 +23,8 @@ module RubyRabbitmqJanus
23
23
  # Define an error for simple message
24
24
  class JanusResponseSimple < JanusResponse
25
25
  def initialize(message)
26
- super "[#{message['code']}] #{message['reason']}"
26
+ error = message['error']
27
+ super "[#{error['code']}] #{error['reason']} -- #{message}"
27
28
  end
28
29
  end
29
30
 
@@ -39,7 +40,7 @@ module RubyRabbitmqJanus
39
40
  # Define an exception for json
40
41
  class JanusResponseJson < JanusResponse
41
42
  def initialize(message)
42
- super "Error transform to JSON : #{message}"
43
+ super "Error transform to JSON : #{message[0]} -- message : #{message[1]}"
43
44
  end
44
45
  end
45
46
 
@@ -55,7 +56,7 @@ module RubyRabbitmqJanus
55
56
  # Define an exception for hash
56
57
  class JanusResponseHash < JanusResponse
57
58
  def initialize(message)
58
- super "Error transform to Hash : #{message}"
59
+ super "Error transform to Hash : #{message[0]} -- message : #{message[1]}"
59
60
  end
60
61
  end
61
62
 
data/lib/rrj/info.rb CHANGED
@@ -3,7 +3,7 @@
3
3
  # Define constant to gem.
4
4
  module RubyRabbitmqJanus
5
5
  # Define version to gem
6
- VERSION = '1.0.2'
6
+ VERSION = '1.0.3'
7
7
 
8
8
  # Define a summary description to gem
9
9
  SUMMARY = 'Ruby RabbitMQ Janus'
data/lib/rrj/init.rb CHANGED
@@ -15,20 +15,31 @@ module RubyRabbitmqJanus
15
15
  # @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
16
16
  # Initialize gem and create automatically an session with Janus
17
17
  # @!attribute [r] session
18
- # :reek:BooleanParameter
18
+ # :reek:BooleanParameter and :reek:ControlParameter
19
19
  class RRJ
20
20
  attr_reader :session, :event
21
21
 
22
22
  # Returns a new instance of RubyRabbitmqJanus
23
- def initialize(listen_queue_classic = true)
23
+ def initialize
24
+ # Instanciate singleton tools
24
25
  start_instances_tools
26
+
27
+ # Create an session while time opening
25
28
  @session = Janus::Keepalive.instance.session
26
- Janus::Event.instance if listen_queue_classic
29
+
27
30
  @transaction = nil
28
31
  rescue => error
29
32
  raise Errors::RRJErrorInit, error
30
33
  end
31
34
 
35
+ # Listen a standar queue and working if necesary
36
+ def listen(&block)
37
+ # Send a processus to background
38
+ # fork do
39
+ Janus::Event.instance.listen(&block)
40
+ # end
41
+ end
42
+
32
43
  # Send an simple message to janus. No options in request with this method.
33
44
  # @param [String] type
34
45
  # Given a type to request. JSON request writing in 'config/requests/'
@@ -39,7 +50,7 @@ module RubyRabbitmqJanus
39
50
  # #=> {"janus":"server_info","name":"Janus WebRTC Gateway" ... }
40
51
  # @return [RubyRabbitmqJanus::Janus::Response] Give an object response to janus server
41
52
  def message_simple(type = 'base::info', exclusive = false)
42
- Janus::Transaction.new(@session).connect(exclusive) do
53
+ Janus::Transactions::Transaction.new(@session).connect(exclusive) do
43
54
  Janus::Message.new(type)
44
55
  end
45
56
  end
@@ -55,7 +66,7 @@ module RubyRabbitmqJanus
55
66
  # #=> {"janus":"server_info","name":"Janus WebRTC Gateway" ... }
56
67
  # @return [RubyRabbitmqJanus::Janus::Response] Give an object response to janus server
57
68
  def message_session(type, options = {}, exclusive = false)
58
- Janus::TransactionSession.new(@session).session_connect(exclusive) do
69
+ Janus::Transactions::Session.new(@session).session_connect(exclusive) do
59
70
  Janus::Message.new(type, use_current_session?(options))
60
71
  end
61
72
  rescue => error
@@ -71,7 +82,7 @@ module RubyRabbitmqJanus
71
82
  # #=> {"janus":"success","sessions": [12345, 8786567465465, ...] }
72
83
  # @return [RubyRabbitmqJanus::Janus::Response] Give an object response to janus server
73
84
  def message_admin(type, options = {})
74
- Janus::TransactionAdmin.new(@session).connect do
85
+ Janus::Transactions::Admin.new(@session).connect do
75
86
  Janus::MessageAdmin.new(type, options.merge!('session_id' => @session))
76
87
  end
77
88
  end
@@ -92,7 +103,7 @@ module RubyRabbitmqJanus
92
103
 
93
104
  # Define an handle transaction and establish connection with janus
94
105
  def start_handle(exclusive = false)
95
- @transaction ||= Janus::TransactionHandle.new(@session)
106
+ @transaction ||= Janus::Transactions::Handle.new(@session)
96
107
  @transaction.handle_connect(exclusive) { yield }
97
108
  rescue => error
98
109
  raise Errors::RRJErrorHandle, error
@@ -100,7 +111,7 @@ module RubyRabbitmqJanus
100
111
 
101
112
  # Define an handle admin transaction and establish connection with janus
102
113
  def start_handle_admin
103
- @transaction ||= Janus::TransactionAdmin.new(@session)
114
+ @transaction ||= Janus::Transactions::Admin.new(@session)
104
115
  @transaction.handle_connect { yield }
105
116
  rescue => error
106
117
  raise Errors::RRJErrorHandle, error
@@ -113,7 +124,7 @@ module RubyRabbitmqJanus
113
124
 
114
125
  # Start an short transaction, this queue is not exclusive
115
126
  def handle_message_simple(type, replace = {}, add = {})
116
- @transaction ||= Janus::TransactionHandle.new(@session)
127
+ @transaction ||= Janus::Transactions::Handle.new(@session)
117
128
  @transaction.handle_connect_and_stop(false) do
118
129
  message_handle(type, replace, add).for_plugin
119
130
  end
@@ -131,6 +142,7 @@ module RubyRabbitmqJanus
131
142
  Tools::Log.instance
132
143
  Tools::Config.instance
133
144
  Tools::Requests.instance
145
+ Janus::Event.instance
134
146
  end
135
147
 
136
148
  # Return a current session if not specified
@@ -4,6 +4,7 @@ module RubyRabbitmqJanus
4
4
  module Janus
5
5
  # @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
6
6
  # Read and decryt a response to janus
7
+ # :reek:TooManyMethods
7
8
  class Response
8
9
  # Instanciate a response
9
10
  def initialize(response_janus)
@@ -21,7 +22,7 @@ module RubyRabbitmqJanus
21
22
  @request.to_json
22
23
  rescue => error
23
24
  Tools::Log.instance.debug "Request error : #{@request}"
24
- raise Errors::JanusResponseJson, error
25
+ raise Errors::JanusResponseJson, [error, @request]
25
26
  end
26
27
 
27
28
  # Return request to json format with nice format
@@ -38,7 +39,7 @@ module RubyRabbitmqJanus
38
39
  @request
39
40
  rescue => error
40
41
  Tools::Log.instance.debug "Request error : #{@request}"
41
- raise Errors::JanusResponseHash, error
42
+ raise Errors::JanusResponseHash, [error, @request]
42
43
  end
43
44
 
44
45
  # Return a response simple for client
@@ -62,8 +63,33 @@ module RubyRabbitmqJanus
62
63
  data_id
63
64
  end
64
65
 
66
+ # Return event to message
67
+ def event
68
+ @request['janus']
69
+ end
70
+
71
+ # Return body data
72
+ def data
73
+ @request['plugindata']['data'] if plugin_response?
74
+ end
75
+
76
+ # Return jsep data
77
+ def jsep
78
+ @request['jsep'] if contains_jsep?
79
+ end
80
+
65
81
  private
66
82
 
83
+ # Test if response is returning by plugin
84
+ def plugin_response?
85
+ @request.key?('plugindata') && @request['plugindata'].key?('data')
86
+ end
87
+
88
+ # Test if response contains jsep data
89
+ def contains_jsep?
90
+ @request.key?('jsep')
91
+ end
92
+
67
93
  # Read a hash and return an identifier
68
94
  def data_id
69
95
  analysis
@@ -75,7 +101,7 @@ module RubyRabbitmqJanus
75
101
  # Analysis response and send exception if janus return an error
76
102
  # :reek:DuplicateMethodCall
77
103
  def analysis
78
- raise Errors::JanusResponseSimple, @request['error'] if error_simple?
104
+ raise Errors::JanusResponseSimple, @request if error_simple?
79
105
  raise Errors::JanusResponsePlugin, @request['plugindata']['data'] if error_plugin?
80
106
  end
81
107
 
@@ -4,30 +4,24 @@ module RubyRabbitmqJanus
4
4
  # @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
5
5
  module Janus
6
6
  # For listen standard queue ("from-janus" by default)
7
- class Event < OneThread
7
+ class Event < Concurrency
8
8
  include Singleton
9
9
 
10
10
  # Initialize Event object. Is used for listen an standard out queue to Janus
11
11
  def initialize
12
12
  Tools::Log.instance.debug 'Start listen events in from-janus queue'
13
- @response = nil
13
+ @publish = @response = nil
14
14
  super
15
- listen_live
15
+ start_thread
16
16
  end
17
17
 
18
- # Start listen queue and return each message
19
- def listen
20
- lock.synchronize { condition.wait(lock) }
21
- @response
18
+ # Start listen queue and work with each message reading
19
+ def listen(&block)
20
+ loop { @publish.event_received(&block) }
22
21
  end
23
22
 
24
23
  private
25
24
 
26
- # Listen q queue "from-janus"
27
- def listen_live
28
- start_thread
29
- end
30
-
31
25
  # Intialize an listen to queue
32
26
  def initialize_thread
33
27
  start_transaction
@@ -39,9 +33,8 @@ module RubyRabbitmqJanus
39
33
  # Start a transaction with Rabbit an Janus
40
34
  def start_transaction
41
35
  rabbit.transaction_long do
42
- publisher = Rabbit::Publisher::Listener.new(rabbit)
43
- @response = publisher.listen_events
44
- lock.synchronize { condition.signal }
36
+ @publish = Rabbit::Publisher::Listener.new(rabbit)
37
+ @publish.listen_events
45
38
  end
46
39
  end
47
40
  end
@@ -4,44 +4,37 @@ module RubyRabbitmqJanus
4
4
  module Janus
5
5
  # @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
6
6
  # Manage sending keepalive message
7
- class Keepalive < OneThread
7
+ class Keepalive < Concurrency
8
8
  include Singleton
9
9
 
10
10
  # Initalize a keepalive message
11
11
  def initialize
12
12
  Tools::Log.instance.debug 'Create an session for keepalive'
13
- super
14
13
  @publish = @response = nil
15
- session_live
14
+ super
15
+ start_thread
16
16
  end
17
17
 
18
18
  # Return an number session created
19
19
  def session
20
- lock.synchronize { condition.wait(lock) }
21
- @response.session
20
+ wait { @response.session }
22
21
  end
23
22
 
24
23
  private
25
24
 
26
- # Send to regular interval a message keepalive
27
- def session_live
28
- start_thread
29
- end
30
-
31
25
  # Initialize an session with janus and start a keepalive transaction
32
26
  def initialize_thread
33
- rabbit.start
34
- @response = session_start
35
- lock.synchronize { condition.signal }
36
- session_keepalive(ttl)
27
+ rabbit.transaction_long { transaction_keepalive }
28
+ rescue Interrupt
29
+ Tools::Log.instance.info 'Stop to sending keepalive'
37
30
  rabbit.close
38
31
  end
39
32
 
40
- # Star an session janus
41
- def session_start
42
- msg_create = Janus::Message.new 'base::create'
43
- @publish = Rabbit::Publisher::PublishExclusive.new(rabbit.channel, '')
44
- @response = Janus::Response.new(@publish.send_a_message(msg_create))
33
+ # Star an session with janus and waiting an signal for saving session_id
34
+ def transaction_keepalive
35
+ @response = Janus::Response.new(create_session)
36
+ signal
37
+ session_keepalive(ttl)
45
38
  end
46
39
 
47
40
  # Create an loop for sending a keepalive message
@@ -49,7 +42,7 @@ module RubyRabbitmqJanus
49
42
  loop do
50
43
  sleep time_to_live
51
44
  @publish.send_a_message(Janus::Message.new('base::keepalive',
52
- 'session_id' => @response.session))
45
+ 'session_id' => running_session))
53
46
  end
54
47
  rescue => message
55
48
  Tools::Log.instance.debug "Error keepalive : #{message}"
@@ -61,6 +54,17 @@ module RubyRabbitmqJanus
61
54
  rescue => error
62
55
  Tools::Log.instance.debug "TTL Not loading - #{error}"
63
56
  end
57
+
58
+ # Create an message and publish for create session in Janus
59
+ def create_session
60
+ @publish = Rabbit::Publisher::PublishExclusive.new(rabbit.channel, '')
61
+ @publish.send_a_message(Janus::Message.new('base::create'))
62
+ end
63
+
64
+ # Return session_id
65
+ def running_session
66
+ @response.session
67
+ end
64
68
  end
65
69
  end
66
70
  end
@@ -4,9 +4,10 @@ module RubyRabbitmqJanus
4
4
  module Janus
5
5
  # @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
6
6
  # Abstract class for janus Event and Keepalive
7
- class OneThread
7
+ class Concurrency
8
8
  # Initialize class with elements for thread communication
9
9
  def initialize
10
+ Tools::Log.instance.info 'Create an subprocess'
10
11
  @rabbit = Rabbit::Connect.new
11
12
  @lock = Mutex.new
12
13
  @condition = ConditionVariable.new
@@ -14,11 +15,28 @@ module RubyRabbitmqJanus
14
15
 
15
16
  private
16
17
 
18
+ # Start a new thread
17
19
  def start_thread
18
20
  Thread.new { initialize_thread }
21
+ # pid = fork { initialize_thread }
22
+ # Tools::Log.instance.info "Process IDentifier : #{pid}"
23
+ # initialize_thread
19
24
  end
20
25
 
21
- attr_accessor :rabbit, :lock, :condition
26
+ # Wait an signal
27
+ def wait
28
+ @lock.synchronize do
29
+ @condition.wait(@lock)
30
+ yield
31
+ end
32
+ end
33
+
34
+ # Send and signal
35
+ def signal
36
+ @lock.synchronize { @condition.signal }
37
+ end
38
+
39
+ attr_accessor :rabbit, :publish
22
40
  end
23
41
  end
24
42
  end
@@ -2,42 +2,44 @@
2
2
 
3
3
  module RubyRabbitmqJanus
4
4
  module Janus
5
- # @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
6
- # This class work with janus and send a series of message
7
- class TransactionAdmin < TransactionHandle
8
- # Initialize conncetion to Rabbit and Janus
9
- def connect
10
- rabbit.transaction_short do
11
- choose_queue
12
- send_a_message { yield }
5
+ module Transactions
6
+ # @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
7
+ # This class work with janus and send a series of message
8
+ class Admin < Handle
9
+ # Initialize conncetion to Rabbit and Janus
10
+ def connect
11
+ rabbit.transaction_short do
12
+ choose_queue
13
+ send_a_message { yield }
14
+ end
13
15
  end
14
- end
15
16
 
16
- # Choose queue, create an handle, connect to rabbitmq server and send messages
17
- def handle_connect
18
- rabbit.transaction_long do
19
- choose_queue
20
- create_handle
21
- yield
17
+ # Choose queue, create an handle, connect to rabbitmq server and send messages
18
+ def handle_connect
19
+ rabbit.transaction_long do
20
+ choose_queue
21
+ create_handle
22
+ yield
23
+ end
22
24
  end
23
- end
24
25
 
25
- # Publish an message in handle
26
- def publish_message_handle(type, options = {})
27
- opts = { 'session_id' => session, 'handle_id' => handle }
28
- msg = Janus::MessageAdmin.new(type, opts.merge!(options))
29
- Janus::Response.new(publish.send_a_message(msg))
30
- end
26
+ # Publish an message in handle
27
+ def publish_message_handle(type, options = {})
28
+ opts = { 'session_id' => session, 'handle_id' => handle }
29
+ msg = Janus::MessageAdmin.new(type, opts.merge!(options))
30
+ Janus::Response.new(publish.send_a_message(msg))
31
+ end
31
32
 
32
- # Stop an handle running
33
- def handle_running_stop
34
- secret = Tools::Config.instance.options['rabbit']['admin_pass']
35
- publish_message_handle('base::detach', admin_secret: secret)
36
- end
33
+ # Stop an handle running
34
+ def handle_running_stop
35
+ secret = Tools::Config.instance.options['rabbit']['admin_pass']
36
+ publish_message_handle('base::detach', admin_secret: secret)
37
+ end
37
38
 
38
- # Define queue used for admin message
39
- def choose_queue
40
- @publish = Rabbit::PublisherPublishAdmin.new(rabbit.channel)
39
+ # Define queue used for admin message
40
+ def choose_queue
41
+ @publish = Rabbit::PublisherPublishAdmin.new(rabbit.channel)
42
+ end
41
43
  end
42
44
  end
43
45
  end
@@ -2,38 +2,40 @@
2
2
 
3
3
  module RubyRabbitmqJanus
4
4
  module Janus
5
- # @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
6
- # This class work with janus and send a series of message
7
- class TransactionHandle < TransactionSession
8
- # Initialize connection to Rabbit and Janus
9
- def handle_connect(exclusive)
10
- rabbit.transaction_long do
11
- choose_queue(exclusive)
12
- create_handle
13
- yield
5
+ module Transactions
6
+ # @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
7
+ # This class work with janus and send a series of message
8
+ class Handle < Session
9
+ # Initialize connection to Rabbit and Janus
10
+ def handle_connect(exclusive)
11
+ rabbit.transaction_long do
12
+ choose_queue(exclusive)
13
+ create_handle
14
+ yield
15
+ end
14
16
  end
15
- end
16
17
 
17
- # Initialize connection to Rabbit and Janus and close after sending an received
18
- # a response
19
- def handle_connect_and_stop(exclusive)
20
- rabbit.transaction_short do
21
- choose_queue(exclusive)
22
- create_handle
23
- yield
18
+ # Initialize connection to Rabbit and Janus and close after sending an received
19
+ # a response
20
+ def handle_connect_and_stop(exclusive)
21
+ rabbit.transaction_short do
22
+ choose_queue(exclusive)
23
+ create_handle
24
+ yield
25
+ end
24
26
  end
25
- end
26
27
 
27
- # Stop an handle running
28
- def handle_running_stop
29
- publish_message_handle('base::detach')
30
- end
28
+ # Stop an handle running
29
+ def handle_running_stop
30
+ publish_message_handle('base::detach')
31
+ end
31
32
 
32
- # Publish an message in handle
33
- def publish_message_handle(type, options = {})
34
- opts = { 'session_id' => session, 'handle_id' => handle }
35
- msg = Janus::Message.new(type, opts.merge!(options))
36
- Janus::Response.new(publish.send_a_message(msg))
33
+ # Publish an message in handle
34
+ def publish_message_handle(type, options = {})
35
+ opts = { 'session_id' => session, 'handle_id' => handle }
36
+ msg = Janus::Message.new(type, opts.merge!(options))
37
+ Janus::Response.new(publish.send_a_message(msg))
38
+ end
37
39
  end
38
40
  end
39
41
  end
@@ -2,14 +2,16 @@
2
2
 
3
3
  module RubyRabbitmqJanus
4
4
  module Janus
5
- # @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
6
- # This class work with janus and send a series of message for session level
7
- class TransactionSession < Transaction
8
- # Connect to session and post an message
9
- def session_connect(exclusive)
10
- rabbit.transaction_short do
11
- choose_queue(exclusive)
12
- send_a_message { yield }
5
+ module Transactions
6
+ # @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
7
+ # This class work with janus and send a series of message for session level
8
+ class Session < Transaction
9
+ # Connect to session and post an message
10
+ def session_connect(exclusive)
11
+ rabbit.transaction_short do
12
+ choose_queue(exclusive)
13
+ send_a_message { yield }
14
+ end
13
15
  end
14
16
  end
15
17
  end
@@ -2,53 +2,58 @@
2
2
 
3
3
  module RubyRabbitmqJanus
4
4
  module Janus
5
- # @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
6
- # This class work with janus and send a series of message
7
- # :reek:TooManyInstanceVariables
8
- class Transaction
9
- # Initialize an transaction
10
- def initialize(session)
11
- @rabbit = Rabbit::Connect.new
12
- @session = session
13
- @response = @handle = @publish = nil
14
- rescue => error
15
- raise Errors::JanusTransaction, error
16
- end
5
+ # Define an module for manipulate a message between apps and janus
6
+ module Transactions
7
+ # @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
8
+ # This class work with janus and send a series of message
9
+ # :reek:TooManyInstanceVariables
10
+ class Transaction
11
+ # Initialize an transaction
12
+ def initialize(session)
13
+ @rabbit = Rabbit::Connect.new
14
+ @session = session
15
+ @response = @handle = @publish = nil
16
+ rescue => error
17
+ raise Errors::JanusTransaction, error
18
+ end
17
19
 
18
- # Opening a short transaction with rabbitmq and close when is ending
19
- def connect(exclusive)
20
- @rabbit.transaction_short do
21
- choose_queue(exclusive)
22
- send_a_message { yield }
20
+ # Opening a short transaction with rabbitmq and close when is ending
21
+ def connect(exclusive)
22
+ @rabbit.transaction_short do
23
+ choose_queue(exclusive)
24
+ send_a_message { yield }
25
+ end
23
26
  end
24
- end
25
27
 
26
- private
27
-
28
- attr_reader :rabbit, :session, :response, :handle, :publish
29
-
30
- # determine queue used
31
- # :reek:ControlParameter and :reek:BooleanParameter
32
- def choose_queue(exclusive = false)
33
- chan = @rabbit.channel
34
- @publish = if exclusive
35
- Tools::Log.instance.debug 'Choose an queue non Exclusive : to-janus'
36
- Rabbit::Publisher::PublishNonExclusive.new(chan)
37
- else
38
- Tools::Log.instance.debug 'Choose an queue Exclusive : ampq.gen-xxx'
39
- Rabbit::Publisher::PublishExclusive.new(chan, '')
40
- end
41
- end
28
+ private
42
29
 
43
- # Send a message to queue
44
- def send_a_message
45
- Janus::Response.new(@publish.send_a_message(yield))
46
- end
30
+ attr_reader :rabbit, :session, :response, :handle, :publish
47
31
 
48
- # Associate handle to transaction
49
- def create_handle
50
- msg = Janus::Message.new('base::attach', 'session_id' => @session)
51
- @handle = send_a_message { msg }.sender
32
+ # determine queue used
33
+ # :reek:ControlParameter and :reek:BooleanParameter
34
+ def choose_queue(exclusive = false)
35
+ chan = @rabbit.channel
36
+ @publish = if exclusive
37
+ Tools::Log.instance.debug \
38
+ 'Choose an queue non Exclusive : to-janus'
39
+ Rabbit::Publisher::PublishNonExclusive.new(chan)
40
+ else
41
+ Tools::Log.instance.debug \
42
+ 'Choose an queue Exclusive : ampq.gen-xxx'
43
+ Rabbit::Publisher::PublishExclusive.new(chan, '')
44
+ end
45
+ end
46
+
47
+ # Send a message to queue
48
+ def send_a_message
49
+ Janus::Response.new(@publish.send_a_message(yield))
50
+ end
51
+
52
+ # Associate handle to transaction
53
+ def create_handle
54
+ msg = Janus::Message.new('base::attach', 'session_id' => @session)
55
+ @handle = send_a_message { msg }.sender
56
+ end
52
57
  end
53
58
  end
54
59
  end
@@ -2,6 +2,7 @@
2
2
 
3
3
  module RubyRabbitmqJanus
4
4
  module Rabbit
5
+ # Define an module for create an publisher
5
6
  module Publisher
6
7
  # @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
7
8
  # @abstract Publish message in RabbitMQ
@@ -22,10 +23,10 @@ module RubyRabbitmqJanus
22
23
 
23
24
  # return an response when signal is trigger
24
25
  def return_response
25
- Tools::Log.instance.debug 'Waiting an response ...'
26
+ Tools::Log.instance.debug 'Response received'
26
27
  @lock.synchronize do
27
28
  @condition.wait(@lock)
28
- response
29
+ @response
29
30
  end
30
31
  end
31
32
  end
@@ -10,6 +10,7 @@ module RubyRabbitmqJanus
10
10
  # Define an publisher
11
11
  def initialize(rabbit)
12
12
  super()
13
+ @response = nil
13
14
  @count = 1
14
15
  @rabbit = rabbit.channel
15
16
  @reply = @rabbit.queue(Tools::Config.instance.options['queues']['queue_from'])
@@ -21,16 +22,25 @@ module RubyRabbitmqJanus
21
22
  @reply.subscribe do |_info_delivery, _propertie, payload|
22
23
  synchronize_response(payload)
23
24
  end
24
- return_response
25
+ end
26
+
27
+ # Execute an action for each response received in queue
28
+ def event_received
29
+ Tools::Log.instance.debug 'Response received'
30
+ lock.synchronize do
31
+ condition.wait(lock)
32
+ yield @response.event, @response.data, @response.jsep
33
+ end
25
34
  end
26
35
 
27
36
  private
28
37
 
29
38
  # Sending an signal when an response is reading in queue
30
39
  def synchronize_response(payload)
31
- @response = JSON.parse payload
32
- Tools::Log.instance.debug \
33
- "[X] Message number reading : #{@count} -- type : #{response['janus']}"
40
+ @response = Janus::Response.new(JSON.parse(payload))
41
+ Tools::Log.instance.info \
42
+ "[X] Message number reading : #{@count} --\n\r" \
43
+ "type : #{@response}"
34
44
  @count += 1
35
45
  lock.synchronize { condition.signal }
36
46
  end
@@ -7,6 +7,7 @@ module RubyRabbitmqJanus
7
7
  # Publish message in queue non exclusive. By default "to-janus".
8
8
  # This an option in config to this gem.
9
9
  class PublishNonExclusive < Publisher
10
+ # Define an publisher for create non exclusive queue
10
11
  def initialize(exchange)
11
12
  @reply = exchange.queue(queue_from)
12
13
  super(exchange)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby_rabbitmq_janus
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - VAILLANT Jeremy
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-11-09 00:00:00.000000000 Z
11
+ date: 2016-11-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler