ruby_rabbitmq_janus 1.0.3 → 1.0.4
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/lib/rrj/info.rb +1 -1
- data/lib/rrj/init.rb +1 -12
- data/lib/rrj/janus/janus.rb +1 -1
- data/lib/rrj/janus/processus/concurrency.rb +54 -0
- data/lib/rrj/janus/processus/event.rb +36 -0
- data/lib/rrj/janus/processus/keepalive.rb +62 -0
- data/lib/rrj/rabbit/publish/listener.rb +3 -4
- data/listen.rb +55 -0
- metadata +6 -5
- data/lib/rrj/janus/threads/event.rb +0 -42
- data/lib/rrj/janus/threads/keepalive.rb +0 -70
- data/lib/rrj/janus/threads/thread.rb +0 -45
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 140c1b43d9ba2409e0b80b35e19d48f6a04fd56e
|
4
|
+
data.tar.gz: 808fbef0a6edb0cd92f5ed0b9f4abb134e8b899d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4ac7f253fd46569ddc326b40e5e2e47b6aef05986be23a6b0016d2016f3d49e317d40507ffcadaaa11bd4a690d57c3cf457374fec7f9287766cb5e0e036cd76b
|
7
|
+
data.tar.gz: b312ac04662450523558cf049e9bb8dec3ce659422824ac4b1b3cac164f2ae5fe08da472721d04df0b9451e9b09ad8ec9f4c1ab8c393665e0942b19eb619760d
|
data/lib/rrj/info.rb
CHANGED
data/lib/rrj/init.rb
CHANGED
@@ -25,19 +25,9 @@ module RubyRabbitmqJanus
|
|
25
25
|
start_instances_tools
|
26
26
|
|
27
27
|
# Create an session while time opening
|
28
|
-
@session = Janus::Keepalive.instance.session
|
28
|
+
@session = Janus::Concurrencies::Keepalive.instance.session
|
29
29
|
|
30
30
|
@transaction = nil
|
31
|
-
rescue => error
|
32
|
-
raise Errors::RRJErrorInit, error
|
33
|
-
end
|
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
31
|
end
|
42
32
|
|
43
33
|
# Send an simple message to janus. No options in request with this method.
|
@@ -142,7 +132,6 @@ module RubyRabbitmqJanus
|
|
142
132
|
Tools::Log.instance
|
143
133
|
Tools::Config.instance
|
144
134
|
Tools::Requests.instance
|
145
|
-
Janus::Event.instance
|
146
135
|
end
|
147
136
|
|
148
137
|
# Return a current session if not specified
|
data/lib/rrj/janus/janus.rb
CHANGED
@@ -0,0 +1,54 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RubyRabbitmqJanus
|
4
|
+
module Janus
|
5
|
+
# Modules for create autonomous processus
|
6
|
+
module Concurrencies
|
7
|
+
# @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
|
8
|
+
# Abstract class for janus Event and Keepalive
|
9
|
+
class Concurrency
|
10
|
+
# Initialize class with elements for thread communication
|
11
|
+
def initialize
|
12
|
+
Tools::Log.instance.info "Create an thread -- #{self.class.name}"
|
13
|
+
@rabbit = Rabbit::Connect.new
|
14
|
+
@lock = Mutex.new
|
15
|
+
@condition = ConditionVariable.new
|
16
|
+
@thread = Thread.new { initialize_thread }
|
17
|
+
@thread.abort_on_exception = true
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
# Initialize a thread
|
23
|
+
def initialize_thread
|
24
|
+
rabbit.transaction_long { transaction_running }
|
25
|
+
rescue Interrupt
|
26
|
+
Tools::Log.instance.info "Stop transaction #{self.class.name}"
|
27
|
+
rabbit.close
|
28
|
+
end
|
29
|
+
|
30
|
+
# Wait an signal
|
31
|
+
def wait
|
32
|
+
@lock.synchronize do
|
33
|
+
@condition.wait(@lock)
|
34
|
+
Tools::Log.instance.info 'Waitting signal'
|
35
|
+
yield
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
# Send and signal
|
40
|
+
def signal
|
41
|
+
@lock.synchronize do
|
42
|
+
Tools::Log.instance.info 'Sending signal'
|
43
|
+
@condition.signal
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
attr_accessor :rabbit, :publish
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
require 'rrj/janus/processus/keepalive'
|
54
|
+
require 'rrj/janus/processus/event'
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RubyRabbitmqJanus
|
4
|
+
# @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
|
5
|
+
module Janus
|
6
|
+
module Concurrencies
|
7
|
+
# For listen standard queue ("from-janus" by default)
|
8
|
+
class Event < Concurrency
|
9
|
+
include Singleton
|
10
|
+
|
11
|
+
# Initialize Event object. Is used for listen an standard out queue to Janus
|
12
|
+
def initialize
|
13
|
+
@publish = @response = nil
|
14
|
+
super
|
15
|
+
end
|
16
|
+
|
17
|
+
# Start listen queue and work with each message reading
|
18
|
+
def listen(&block)
|
19
|
+
wait do
|
20
|
+
Tools::Log.instance.info 'Action !!!'.red
|
21
|
+
@publish.event_received(&block)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
# Start a transaction with Rabbit an Janus
|
28
|
+
def transaction_running
|
29
|
+
@publish = Rabbit::Publisher::Listener.new(rabbit)
|
30
|
+
@response = @publish.listen_events
|
31
|
+
signal
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RubyRabbitmqJanus
|
4
|
+
module Janus
|
5
|
+
module Concurrencies
|
6
|
+
# @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
|
7
|
+
# Manage sending keepalive message
|
8
|
+
class Keepalive < Concurrency
|
9
|
+
include Singleton
|
10
|
+
|
11
|
+
# Initalize a keepalive message
|
12
|
+
def initialize
|
13
|
+
@publish = @response = nil
|
14
|
+
super
|
15
|
+
end
|
16
|
+
|
17
|
+
# Return an number session created
|
18
|
+
def session
|
19
|
+
wait { @response.session }
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
# Star an session with janus and waiting an signal for saving session_id
|
25
|
+
def transaction_running
|
26
|
+
@response = Janus::Response.new(create_session)
|
27
|
+
signal
|
28
|
+
session_keepalive(ttl)
|
29
|
+
end
|
30
|
+
|
31
|
+
# Create an loop for sending a keepalive message
|
32
|
+
def session_keepalive(time_to_live)
|
33
|
+
loop do
|
34
|
+
sleep time_to_live
|
35
|
+
@publish.send_a_message(Janus::Message.new('base::keepalive',
|
36
|
+
'session_id' => running_session))
|
37
|
+
end
|
38
|
+
rescue => message
|
39
|
+
Tools::Log.instance.debug "Error keepalive : #{message}"
|
40
|
+
end
|
41
|
+
|
42
|
+
# Define a Time To Live between each request sending to janus
|
43
|
+
def ttl
|
44
|
+
Tools::Config.instance.options['gem']['session']['keepalive'].to_i
|
45
|
+
rescue => error
|
46
|
+
Tools::Log.instance.debug "TTL Not loading - #{error}"
|
47
|
+
end
|
48
|
+
|
49
|
+
# Create an message and publish for create session in Janus
|
50
|
+
def create_session
|
51
|
+
@publish = Rabbit::Publisher::PublishExclusive.new(rabbit.channel, '')
|
52
|
+
@publish.send_a_message(Janus::Message.new('base::create'))
|
53
|
+
end
|
54
|
+
|
55
|
+
# Return session_id
|
56
|
+
def running_session
|
57
|
+
@response.session
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -26,9 +26,8 @@ module RubyRabbitmqJanus
|
|
26
26
|
|
27
27
|
# Execute an action for each response received in queue
|
28
28
|
def event_received
|
29
|
-
|
30
|
-
|
31
|
-
condition.wait(lock)
|
29
|
+
loop do
|
30
|
+
return_response
|
32
31
|
yield @response.event, @response.data, @response.jsep
|
33
32
|
end
|
34
33
|
end
|
@@ -40,7 +39,7 @@ module RubyRabbitmqJanus
|
|
40
39
|
@response = Janus::Response.new(JSON.parse(payload))
|
41
40
|
Tools::Log.instance.info \
|
42
41
|
"[X] Message number reading : #{@count} --\n\r" \
|
43
|
-
"
|
42
|
+
"#{@response.to_hash}"
|
44
43
|
@count += 1
|
45
44
|
lock.synchronize { condition.signal }
|
46
45
|
end
|
data/listen.rb
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# :reek:NilCheck and :reek:TooManyStatements
|
4
|
+
|
5
|
+
require 'ruby_rabbitmq_janus'
|
6
|
+
|
7
|
+
@t = RubyRabbitmqJanus::RRJ.new
|
8
|
+
|
9
|
+
def case_event(data, jsep)
|
10
|
+
puts "Event : #{data.class} -- #{data}"
|
11
|
+
case data['videocontrol']
|
12
|
+
when 'joined'
|
13
|
+
puts 'Joined request ...'
|
14
|
+
@t.handle_message_simple('channel::offer', jsep)
|
15
|
+
when 'selected' then puts 'Selected request ...'
|
16
|
+
when 'unselected' then puts 'Unselected request ...'
|
17
|
+
when 'left' then puts 'Left request ...'
|
18
|
+
end
|
19
|
+
update_jsep(jsep) unless jsep.nil?
|
20
|
+
end
|
21
|
+
|
22
|
+
def update_jsep(jsep)
|
23
|
+
puts "JSEP : #{jsep}"
|
24
|
+
end
|
25
|
+
|
26
|
+
def case_hangup
|
27
|
+
puts 'Hangup'
|
28
|
+
Thread.stop
|
29
|
+
end
|
30
|
+
|
31
|
+
def case_stop
|
32
|
+
puts 'Stop'
|
33
|
+
Thread.stop
|
34
|
+
end
|
35
|
+
|
36
|
+
def case_error
|
37
|
+
puts 'Error ...'
|
38
|
+
end
|
39
|
+
|
40
|
+
puts "## Start listen Block"
|
41
|
+
RubyRabbitmqJanus::Janus::Concurrencies::Event.instance.listen do |reason, data, jsep|
|
42
|
+
case reason
|
43
|
+
when 'event' then case_event(data, jsep)
|
44
|
+
when 'hangup' then case_hangup
|
45
|
+
when 'stop' then case_stop
|
46
|
+
when 'error' then case_error
|
47
|
+
else
|
48
|
+
puts "REASON default : #{reason}"
|
49
|
+
end
|
50
|
+
end
|
51
|
+
puts "## End listen block"
|
52
|
+
|
53
|
+
#puts "apps running"
|
54
|
+
#loop do
|
55
|
+
#end
|
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.
|
4
|
+
version: 1.0.4
|
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-
|
11
|
+
date: 2016-11-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -343,10 +343,10 @@ files:
|
|
343
343
|
- lib/rrj/janus/admin.rb
|
344
344
|
- lib/rrj/janus/janus.rb
|
345
345
|
- lib/rrj/janus/message.rb
|
346
|
+
- lib/rrj/janus/processus/concurrency.rb
|
347
|
+
- lib/rrj/janus/processus/event.rb
|
348
|
+
- lib/rrj/janus/processus/keepalive.rb
|
346
349
|
- lib/rrj/janus/response.rb
|
347
|
-
- lib/rrj/janus/threads/event.rb
|
348
|
-
- lib/rrj/janus/threads/keepalive.rb
|
349
|
-
- lib/rrj/janus/threads/thread.rb
|
350
350
|
- lib/rrj/janus/transactions/admin.rb
|
351
351
|
- lib/rrj/janus/transactions/handle.rb
|
352
352
|
- lib/rrj/janus/transactions/session.rb
|
@@ -368,6 +368,7 @@ files:
|
|
368
368
|
- lib/rrj/tools/requests.rb
|
369
369
|
- lib/rrj/tools/tools.rb
|
370
370
|
- lib/ruby_rabbitmq_janus.rb
|
371
|
+
- listen.rb
|
371
372
|
- rrj.gemspec
|
372
373
|
homepage: https://github.com/dazzl-tv/ruby-rabbitmq-janus
|
373
374
|
licenses:
|
@@ -1,42 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module RubyRabbitmqJanus
|
4
|
-
# @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
|
5
|
-
module Janus
|
6
|
-
# For listen standard queue ("from-janus" by default)
|
7
|
-
class Event < Concurrency
|
8
|
-
include Singleton
|
9
|
-
|
10
|
-
# Initialize Event object. Is used for listen an standard out queue to Janus
|
11
|
-
def initialize
|
12
|
-
Tools::Log.instance.debug 'Start listen events in from-janus queue'
|
13
|
-
@publish = @response = nil
|
14
|
-
super
|
15
|
-
start_thread
|
16
|
-
end
|
17
|
-
|
18
|
-
# Start listen queue and work with each message reading
|
19
|
-
def listen(&block)
|
20
|
-
loop { @publish.event_received(&block) }
|
21
|
-
end
|
22
|
-
|
23
|
-
private
|
24
|
-
|
25
|
-
# Intialize an listen to queue
|
26
|
-
def initialize_thread
|
27
|
-
start_transaction
|
28
|
-
rescue Interrupt
|
29
|
-
Tools::Log.instance.info 'Stop to listen standard queue'
|
30
|
-
rabbit.close
|
31
|
-
end
|
32
|
-
|
33
|
-
# Start a transaction with Rabbit an Janus
|
34
|
-
def start_transaction
|
35
|
-
rabbit.transaction_long do
|
36
|
-
@publish = Rabbit::Publisher::Listener.new(rabbit)
|
37
|
-
@publish.listen_events
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
@@ -1,70 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module RubyRabbitmqJanus
|
4
|
-
module Janus
|
5
|
-
# @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
|
6
|
-
# Manage sending keepalive message
|
7
|
-
class Keepalive < Concurrency
|
8
|
-
include Singleton
|
9
|
-
|
10
|
-
# Initalize a keepalive message
|
11
|
-
def initialize
|
12
|
-
Tools::Log.instance.debug 'Create an session for keepalive'
|
13
|
-
@publish = @response = nil
|
14
|
-
super
|
15
|
-
start_thread
|
16
|
-
end
|
17
|
-
|
18
|
-
# Return an number session created
|
19
|
-
def session
|
20
|
-
wait { @response.session }
|
21
|
-
end
|
22
|
-
|
23
|
-
private
|
24
|
-
|
25
|
-
# Initialize an session with janus and start a keepalive transaction
|
26
|
-
def initialize_thread
|
27
|
-
rabbit.transaction_long { transaction_keepalive }
|
28
|
-
rescue Interrupt
|
29
|
-
Tools::Log.instance.info 'Stop to sending keepalive'
|
30
|
-
rabbit.close
|
31
|
-
end
|
32
|
-
|
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)
|
38
|
-
end
|
39
|
-
|
40
|
-
# Create an loop for sending a keepalive message
|
41
|
-
def session_keepalive(time_to_live)
|
42
|
-
loop do
|
43
|
-
sleep time_to_live
|
44
|
-
@publish.send_a_message(Janus::Message.new('base::keepalive',
|
45
|
-
'session_id' => running_session))
|
46
|
-
end
|
47
|
-
rescue => message
|
48
|
-
Tools::Log.instance.debug "Error keepalive : #{message}"
|
49
|
-
end
|
50
|
-
|
51
|
-
# Define a Time To Live between each request sending to janus
|
52
|
-
def ttl
|
53
|
-
Tools::Config.instance.options['gem']['session']['keepalive'].to_i
|
54
|
-
rescue => error
|
55
|
-
Tools::Log.instance.debug "TTL Not loading - #{error}"
|
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
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|
@@ -1,45 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module RubyRabbitmqJanus
|
4
|
-
module Janus
|
5
|
-
# @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
|
6
|
-
# Abstract class for janus Event and Keepalive
|
7
|
-
class Concurrency
|
8
|
-
# Initialize class with elements for thread communication
|
9
|
-
def initialize
|
10
|
-
Tools::Log.instance.info 'Create an subprocess'
|
11
|
-
@rabbit = Rabbit::Connect.new
|
12
|
-
@lock = Mutex.new
|
13
|
-
@condition = ConditionVariable.new
|
14
|
-
end
|
15
|
-
|
16
|
-
private
|
17
|
-
|
18
|
-
# Start a new thread
|
19
|
-
def start_thread
|
20
|
-
Thread.new { initialize_thread }
|
21
|
-
# pid = fork { initialize_thread }
|
22
|
-
# Tools::Log.instance.info "Process IDentifier : #{pid}"
|
23
|
-
# initialize_thread
|
24
|
-
end
|
25
|
-
|
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
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
require 'rrj/janus/threads/keepalive'
|
45
|
-
require 'rrj/janus/threads/event'
|