ruby_rabbitmq_janus 1.0.5 → 1.0.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/generators/ruby_rabbitmq_janus/initializer_generator.rb +1 -1
- data/lib/rrj/info.rb +1 -1
- data/lib/rrj/init.rb +11 -7
- data/lib/rrj/janus/janus.rb +2 -3
- data/lib/rrj/janus/messages/admin.rb +28 -0
- data/lib/rrj/janus/messages/message.rb +85 -0
- data/lib/rrj/janus/messages/standard.rb +27 -0
- data/lib/rrj/janus/processus/event.rb +10 -24
- data/lib/rrj/janus/processus/keepalive.rb +9 -4
- data/lib/rrj/janus/responses/event.rb +38 -0
- data/lib/rrj/janus/responses/response.rb +74 -0
- data/lib/rrj/janus/responses/standard.rb +42 -0
- data/lib/rrj/janus/transactions/admin.rb +1 -1
- data/lib/rrj/janus/transactions/handle.rb +2 -2
- data/lib/rrj/janus/transactions/transaction.rb +2 -2
- data/lib/rrj/rabbit/publish/listener.rb +6 -10
- data/listen.rb +7 -18
- metadata +8 -5
- data/lib/rrj/janus/admin.rb +0 -27
- data/lib/rrj/janus/message.rb +0 -86
- data/lib/rrj/janus/response.rb +0 -119
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e84f3c116610870506f8213232cf882aa0aad776
|
4
|
+
data.tar.gz: a1110cd51f6224d547de7590b6c22dd37f9396e4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b6ab1a091ae05441689f106b6f40981e9c2ee45e3123ef053dab9b5034c539b290cf04d51755bd70f472d818da4c3d62166b0ae44044d19a482359e6626ed63e
|
7
|
+
data.tar.gz: 617a00b0eeb0853caded62f4d65543c8a812b7077831aaf5b0ebf0c930075a0e58304dd666f924940f669e21258f444a24b052b948d035b9ea7bbb81a137a53c
|
@@ -11,7 +11,7 @@ module RubyRabbitmqJanus
|
|
11
11
|
initializer 'ruby_rabbitmq_janus.rb' do
|
12
12
|
"# frozen_string_literal: true\n\n" \
|
13
13
|
"::RRJ = RubyRabbitmqJanus::RRJ.new\n"\
|
14
|
-
'::
|
14
|
+
'::JanusEvents = RubyRabbitmqJanus::Janus::Concurrencies::Event.instance'
|
15
15
|
end
|
16
16
|
end
|
17
17
|
end
|
data/lib/rrj/info.rb
CHANGED
data/lib/rrj/init.rb
CHANGED
@@ -38,10 +38,11 @@ module RubyRabbitmqJanus
|
|
38
38
|
# @example Sending an message info
|
39
39
|
# RubyRabbitmqJanus::RRJ.new.message_simple('base::info')
|
40
40
|
# #=> {"janus":"server_info","name":"Janus WebRTC Gateway" ... }
|
41
|
-
# @return [RubyRabbitmqJanus::Janus::
|
41
|
+
# @return [RubyRabbitmqJanus::Janus::Responses::Standard]
|
42
|
+
# Give an object response to janus server
|
42
43
|
def message_simple(type = 'base::info', exclusive = false)
|
43
44
|
Janus::Transactions::Transaction.new(@session).connect(exclusive) do
|
44
|
-
Janus::
|
45
|
+
Janus::Messages::Standard.new(type)
|
45
46
|
end
|
46
47
|
end
|
47
48
|
|
@@ -54,10 +55,11 @@ module RubyRabbitmqJanus
|
|
54
55
|
# @example Sending an message create
|
55
56
|
# RubyRabbitmqJanus::RRJ.new.message_session('base::create')
|
56
57
|
# #=> {"janus":"server_info","name":"Janus WebRTC Gateway" ... }
|
57
|
-
# @return [RubyRabbitmqJanus::Janus::
|
58
|
+
# @return [RubyRabbitmqJanus::Janus::Responses::Standard]
|
59
|
+
# Give an object response to janus server
|
58
60
|
def message_session(type, options = {}, exclusive = false)
|
59
61
|
Janus::Transactions::Session.new(@session).session_connect(exclusive) do
|
60
|
-
Janus::
|
62
|
+
Janus::Messages::Standard.new(type, use_current_session?(options))
|
61
63
|
end
|
62
64
|
rescue => error
|
63
65
|
raise Errors::RRJErrorPost, error
|
@@ -70,10 +72,11 @@ module RubyRabbitmqJanus
|
|
70
72
|
# @example Sending an message create
|
71
73
|
# RubyRabbitmqJanus::RRJ.new.message_admin('admin::sessions')
|
72
74
|
# #=> {"janus":"success","sessions": [12345, 8786567465465, ...] }
|
73
|
-
# @return [RubyRabbitmqJanus::Janus::
|
75
|
+
# @return [RubyRabbitmqJanus::Janus::Responses::Standard]
|
76
|
+
# Give an object response to janus server
|
74
77
|
def message_admin(type, options = {})
|
75
78
|
Janus::Transactions::Admin.new(@session).connect do
|
76
|
-
Janus::
|
79
|
+
Janus::Messages::Admin.new(type, options.merge!('session_id' => @session))
|
77
80
|
end
|
78
81
|
end
|
79
82
|
|
@@ -85,7 +88,8 @@ module RubyRabbitmqJanus
|
|
85
88
|
# @example Sending an message create
|
86
89
|
# RubyRabbitmqJanus::RRJ.new.message_session('base::create')
|
87
90
|
# #=> {"janus":"server_info","name":"Janus WebRTC Gateway" ... }
|
88
|
-
# @return [RubyRabbitmqJanus::Janus::
|
91
|
+
# @return [RubyRabbitmqJanus::Janus::Responses::Standard]
|
92
|
+
# Give an object response to janus server
|
89
93
|
def message_handle(type, replace = {}, add = {})
|
90
94
|
options = { 'replace' => replace, 'add' => add }
|
91
95
|
@transaction.publish_message_handle(type, options)
|
data/lib/rrj/janus/janus.rb
CHANGED
@@ -1,9 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'rrj/janus/processus/concurrency'
|
4
|
-
require 'rrj/janus/message'
|
5
|
-
require 'rrj/janus/
|
6
|
-
require 'rrj/janus/response'
|
4
|
+
require 'rrj/janus/messages/message'
|
5
|
+
require 'rrj/janus/responses/response'
|
7
6
|
require 'rrj/janus/transactions/transaction'
|
8
7
|
|
9
8
|
module RubyRabbitmqJanus
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RubyRabbitmqJanus
|
4
|
+
module Janus
|
5
|
+
module Messages
|
6
|
+
# @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
|
7
|
+
# Create an message for janus
|
8
|
+
class Admin < Message
|
9
|
+
# Return options to message for rabbitmq
|
10
|
+
def options
|
11
|
+
Tools::Log.instance.debug 'Options used for admin message'
|
12
|
+
properties.options_admin
|
13
|
+
rescue => error
|
14
|
+
raise Errors::JanusMessagePropertie, error
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
# Transform raw request in request to janus, so replace element <string>, <number>
|
20
|
+
# and other with real value
|
21
|
+
def prepare_request(options)
|
22
|
+
@request = Tools::AdminReplace.new(request, options).transform_request
|
23
|
+
super
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,85 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RubyRabbitmqJanus
|
4
|
+
module Janus
|
5
|
+
# Modules for create message for Janus
|
6
|
+
module Messages
|
7
|
+
# @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
|
8
|
+
# Create an message for janus
|
9
|
+
class Message
|
10
|
+
attr_reader :type
|
11
|
+
|
12
|
+
# Instanciate an message
|
13
|
+
# @param template_request [String] Name of request prepare
|
14
|
+
# @param [Hash] options Options to request (replace element or add in body)
|
15
|
+
# @option options [String] :session_id Identifier to session
|
16
|
+
# @option options [String] :handle_id Identifier to session manipulate
|
17
|
+
# @option options [Hash] :other Element contains in request sending to janus
|
18
|
+
# @example Initialize a message
|
19
|
+
# Message.new('test', {
|
20
|
+
# "session_id": 42,
|
21
|
+
# "handle_id": 42,
|
22
|
+
# "replace": {
|
23
|
+
# "audio": false,
|
24
|
+
# "video": true
|
25
|
+
# },
|
26
|
+
# "add": {
|
27
|
+
# "subtitle": true
|
28
|
+
# })
|
29
|
+
def initialize(template_request, options = {})
|
30
|
+
@request = {}
|
31
|
+
@type = template_request
|
32
|
+
@properties = Rabbit::Propertie.new
|
33
|
+
load_request_file
|
34
|
+
prepare_request(options)
|
35
|
+
rescue => error
|
36
|
+
raise Errors::JanusMessage, error
|
37
|
+
end
|
38
|
+
|
39
|
+
# Return request to json format
|
40
|
+
def to_json
|
41
|
+
@request.to_json
|
42
|
+
rescue => error
|
43
|
+
raise Errors::JanusMessageJson, error
|
44
|
+
end
|
45
|
+
|
46
|
+
# Return request to json format with nice format
|
47
|
+
def to_nice_json
|
48
|
+
JSON.pretty_generate to_hash
|
49
|
+
rescue => error
|
50
|
+
raise Errors::JanusMessagePrettyJson, error
|
51
|
+
end
|
52
|
+
|
53
|
+
# Return request to hash format
|
54
|
+
def to_hash
|
55
|
+
@request
|
56
|
+
rescue => error
|
57
|
+
raise Errors::JanusMessageHash, error
|
58
|
+
end
|
59
|
+
|
60
|
+
# Return correlation to message
|
61
|
+
def correlation
|
62
|
+
@properties.correlation
|
63
|
+
end
|
64
|
+
|
65
|
+
private
|
66
|
+
|
67
|
+
attr_accessor :properties, :request
|
68
|
+
|
69
|
+
# Load raw request
|
70
|
+
def load_request_file
|
71
|
+
@request = JSON.parse File.read Tools::Requests.instance.requests[@type]
|
72
|
+
Tools::Log.instance.debug "Opening request : #{to_json}"
|
73
|
+
end
|
74
|
+
|
75
|
+
# Transform JSON request with elements necessary
|
76
|
+
def prepare_request(_options)
|
77
|
+
Tools::Log.instance.debug "Prepare request for janus : #{to_json}"
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
require 'rrj/janus/messages/standard'
|
85
|
+
require 'rrj/janus/messages/admin'
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RubyRabbitmqJanus
|
4
|
+
module Janus
|
5
|
+
module Messages
|
6
|
+
# @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
|
7
|
+
# # Create an standard message
|
8
|
+
class Standard < Message
|
9
|
+
# Return options to message for rabbitmq
|
10
|
+
def options
|
11
|
+
properties.options
|
12
|
+
rescue => error
|
13
|
+
raise Errors::JanusMessagePropertie, error
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
# Transform raw request in request to janus, so replace element <string>, <number>
|
19
|
+
# and other with real value
|
20
|
+
def prepare_request(options)
|
21
|
+
@request = Tools::Replace.new(request, options).transform_request
|
22
|
+
super
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -7,43 +7,29 @@ module RubyRabbitmqJanus
|
|
7
7
|
# For listen standard queue ("from-janus" by default)
|
8
8
|
# :reek:InstanceVariableAssumption and :reek:NilCheck
|
9
9
|
# :reek:TooManyInstanceVariables and :reek:TooManyStatements
|
10
|
-
class Event
|
10
|
+
class Event < Concurrency
|
11
11
|
include Singleton
|
12
12
|
|
13
13
|
# Initialize Event object. Is used for listen an standard out queue to Janus
|
14
14
|
def initialize
|
15
|
+
super
|
15
16
|
@publish = @response = nil
|
16
|
-
Tools::Log.instance.info "Create an thread -- #{self.class.name}"
|
17
|
-
@rabbit = Rabbit::Connect.new
|
18
|
-
@lock = Mutex.new
|
19
|
-
@condition = ConditionVariable.new
|
20
|
-
@thread_subscribe = Thread.new { initialize_thread }
|
21
17
|
end
|
22
18
|
|
23
|
-
#
|
24
|
-
def
|
25
|
-
@
|
26
|
-
|
27
|
-
|
28
|
-
puts 'LISTEN in thread !!'
|
29
|
-
Thread.pass
|
30
|
-
@publish.event_received(&block)
|
19
|
+
# Execute an block code in a thread
|
20
|
+
def run(&block)
|
21
|
+
@thread.join
|
22
|
+
Thread.new do
|
23
|
+
loop { @thread.thread_variable_get(:publish).listen_events(&block) }
|
31
24
|
end
|
32
25
|
end
|
33
26
|
|
34
27
|
private
|
35
28
|
|
36
29
|
# Initialize a thread
|
37
|
-
def
|
38
|
-
Thread.
|
39
|
-
|
40
|
-
@publish = Rabbit::Publisher::Listener.new(@rabbit)
|
41
|
-
@response = @publish.listen_events
|
42
|
-
@thread_listen&.join # Call if not nil
|
43
|
-
end
|
44
|
-
rescue Interrupt
|
45
|
-
Tools::Log.instance.info "Stop transaction #{self.class.name}"
|
46
|
-
@rabbit.close
|
30
|
+
def transaction_running
|
31
|
+
Thread.current.thread_variable_set(:publish,
|
32
|
+
Rabbit::Publisher::Listener.new(rabbit))
|
47
33
|
end
|
48
34
|
end
|
49
35
|
end
|
@@ -23,7 +23,7 @@ module RubyRabbitmqJanus
|
|
23
23
|
|
24
24
|
# Star an session with janus and waiting an signal for saving session_id
|
25
25
|
def transaction_running
|
26
|
-
@response = Janus::
|
26
|
+
@response = Janus::Responses::Standard.new(create_session)
|
27
27
|
signal
|
28
28
|
session_keepalive(ttl)
|
29
29
|
end
|
@@ -32,8 +32,7 @@ module RubyRabbitmqJanus
|
|
32
32
|
def session_keepalive(time_to_live)
|
33
33
|
loop do
|
34
34
|
sleep time_to_live
|
35
|
-
@publish.send_a_message(
|
36
|
-
'session_id' => running_session))
|
35
|
+
@publish.send_a_message(message_keepalive)
|
37
36
|
end
|
38
37
|
rescue => message
|
39
38
|
Tools::Log.instance.debug "Error keepalive : #{message}"
|
@@ -49,13 +48,19 @@ module RubyRabbitmqJanus
|
|
49
48
|
# Create an message and publish for create session in Janus
|
50
49
|
def create_session
|
51
50
|
@publish = Rabbit::Publisher::PublishExclusive.new(rabbit.channel, '')
|
52
|
-
@publish.send_a_message(Janus::
|
51
|
+
@publish.send_a_message(Janus::Messages::Standard.new('base::create'))
|
53
52
|
end
|
54
53
|
|
55
54
|
# Return session_id
|
56
55
|
def running_session
|
57
56
|
@response.session
|
58
57
|
end
|
58
|
+
|
59
|
+
# Create an message with type keepalive
|
60
|
+
def message_keepalive
|
61
|
+
Janus::Messages::Standard.new('base::keepalive',
|
62
|
+
'session_id' => running_session)
|
63
|
+
end
|
59
64
|
end
|
60
65
|
end
|
61
66
|
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RubyRabbitmqJanus
|
4
|
+
module Janus
|
5
|
+
# Modules for manipulate responses sending by Janus
|
6
|
+
module Responses
|
7
|
+
# Response for events message
|
8
|
+
class Event < Standard
|
9
|
+
# Return event to message
|
10
|
+
def event
|
11
|
+
request['janus']
|
12
|
+
end
|
13
|
+
|
14
|
+
# Return body data
|
15
|
+
def data
|
16
|
+
request['plugindata']['data'] if plugin_response?
|
17
|
+
end
|
18
|
+
|
19
|
+
# Return jsep data
|
20
|
+
def jsep
|
21
|
+
request['jsep'] if contains_jsep?
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
# Test if response contains jsep data
|
27
|
+
def contains_jsep?
|
28
|
+
request.key?('jsep')
|
29
|
+
end
|
30
|
+
|
31
|
+
# Test if response is returning by plugin
|
32
|
+
def plugin_response?
|
33
|
+
request.key?('plugindata') && request['plugindata'].key?('data')
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RubyRabbitmqJanus
|
4
|
+
module Janus
|
5
|
+
# Modules for manipulate responses sending by Janus
|
6
|
+
module Responses
|
7
|
+
# @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
|
8
|
+
# Read and decryt a response to janus
|
9
|
+
# :reek:TooManyMethods
|
10
|
+
class Response
|
11
|
+
# Instanciate a response
|
12
|
+
def initialize(response_janus)
|
13
|
+
@request = response_janus
|
14
|
+
rescue => error
|
15
|
+
Tools::Log.instance.debug "Request error : #{@request}"
|
16
|
+
raise Errors::JanusResponseInit, error
|
17
|
+
else
|
18
|
+
Tools::Log.instance.debug "Response return : #{to_json}"
|
19
|
+
end
|
20
|
+
|
21
|
+
# Return request to json format
|
22
|
+
def to_json
|
23
|
+
analysis
|
24
|
+
@request.to_json
|
25
|
+
rescue => error
|
26
|
+
Tools::Log.instance.debug "Request error : #{@request}"
|
27
|
+
raise Errors::JanusResponseJson, [error, @request]
|
28
|
+
end
|
29
|
+
|
30
|
+
# Return request to json format with nice format
|
31
|
+
def to_nice_json
|
32
|
+
JSON.pretty_generate to_hash
|
33
|
+
rescue => error
|
34
|
+
Tools::Log.instance.debug "Request error : #{@request}"
|
35
|
+
raise Errors::JanusResponsePrettyJson, error
|
36
|
+
end
|
37
|
+
|
38
|
+
# Return request to hash format
|
39
|
+
def to_hash
|
40
|
+
analysis
|
41
|
+
@request
|
42
|
+
rescue => error
|
43
|
+
Tools::Log.instance.debug "Request error : #{@request}"
|
44
|
+
raise Errors::JanusResponseHash, [error, @request]
|
45
|
+
end
|
46
|
+
|
47
|
+
private
|
48
|
+
|
49
|
+
attr_accessor :request
|
50
|
+
|
51
|
+
# Analysis response and send exception if janus return an error
|
52
|
+
# :reek:DuplicateMethodCall
|
53
|
+
def analysis
|
54
|
+
raise Errors::JanusResponseSimple, @request if error_simple?
|
55
|
+
raise Errors::JanusResponsePlugin, @request['plugindata']['data'] \
|
56
|
+
if error_plugin?
|
57
|
+
end
|
58
|
+
|
59
|
+
# Test if message response contains an simple error
|
60
|
+
def error_simple?
|
61
|
+
@request['janus'].equal? 'error'
|
62
|
+
end
|
63
|
+
|
64
|
+
# Test if message response contains an error in plugin
|
65
|
+
def error_plugin?
|
66
|
+
@request.key?('plugindata') && @request['plugindata']['data'].key?('error_code')
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
require 'rrj/janus/responses/standard'
|
74
|
+
require 'rrj/janus/responses/event'
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RubyRabbitmqJanus
|
4
|
+
module Janus
|
5
|
+
# Modules for manipulate responses sending by Janus
|
6
|
+
module Responses
|
7
|
+
# Response for events message
|
8
|
+
class Standard < Response
|
9
|
+
# Return a response simple for client
|
10
|
+
def for_plugin
|
11
|
+
case request['janus']
|
12
|
+
when 'success' then request['plugindata']['data']
|
13
|
+
when 'ack' then {}
|
14
|
+
end
|
15
|
+
rescue => error
|
16
|
+
Tools::Log.instance.debug "Request error : #{request}"
|
17
|
+
raise Errors::JanusResponsePluginData, error
|
18
|
+
end
|
19
|
+
|
20
|
+
# Return a integer to session
|
21
|
+
def session
|
22
|
+
data_id
|
23
|
+
end
|
24
|
+
|
25
|
+
# Return a integer to handle
|
26
|
+
def sender
|
27
|
+
data_id
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
# Read a hash and return an identifier
|
33
|
+
def data_id
|
34
|
+
analysis
|
35
|
+
request['data']['id'].to_i
|
36
|
+
rescue => error
|
37
|
+
raise Errors::JanusResponseDataId, error
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -27,7 +27,7 @@ module RubyRabbitmqJanus
|
|
27
27
|
def publish_message_handle(type, options = {})
|
28
28
|
opts = { 'session_id' => session, 'handle_id' => handle }
|
29
29
|
msg = Janus::MessageAdmin.new(type, opts.merge!(options))
|
30
|
-
Janus::
|
30
|
+
Janus::Responses::Standard.new(publish.send_a_message(msg))
|
31
31
|
end
|
32
32
|
|
33
33
|
# Stop an handle running
|
@@ -33,8 +33,8 @@ module RubyRabbitmqJanus
|
|
33
33
|
# Publish an message in handle
|
34
34
|
def publish_message_handle(type, options = {})
|
35
35
|
opts = { 'session_id' => session, 'handle_id' => handle }
|
36
|
-
msg = Janus::
|
37
|
-
Janus::
|
36
|
+
msg = Janus::Messages::Standard.new(type, opts.merge!(options))
|
37
|
+
Janus::Responses::Standard.new(publish.send_a_message(msg))
|
38
38
|
end
|
39
39
|
end
|
40
40
|
end
|
@@ -46,12 +46,12 @@ module RubyRabbitmqJanus
|
|
46
46
|
|
47
47
|
# Send a message to queue
|
48
48
|
def send_a_message
|
49
|
-
Janus::
|
49
|
+
Janus::Responses::Standard.new(@publish.send_a_message(yield))
|
50
50
|
end
|
51
51
|
|
52
52
|
# Associate handle to transaction
|
53
53
|
def create_handle
|
54
|
-
msg = Janus::
|
54
|
+
msg = Janus::Messages::Standard.new('base::attach', 'session_id' => @session)
|
55
55
|
@handle = send_a_message { msg }.sender
|
56
56
|
end
|
57
57
|
end
|
@@ -15,19 +15,15 @@ module RubyRabbitmqJanus
|
|
15
15
|
@rabbit = rabbit.channel
|
16
16
|
@reply = @rabbit.queue(Tools::Config.instance.options['queues']['queue_from'])
|
17
17
|
Tools::Log.instance.debug "Waiting message from queue : #{@reply.name}"
|
18
|
-
end
|
19
|
-
|
20
|
-
# Listen a queue and return a body response
|
21
|
-
def listen_events
|
22
18
|
@reply.subscribe do |_info_delivery, _propertie, payload|
|
23
19
|
synchronize_response(payload)
|
24
20
|
end
|
25
21
|
end
|
26
22
|
|
27
|
-
#
|
28
|
-
def
|
29
|
-
|
30
|
-
|
23
|
+
# Listen a queue and return a body response
|
24
|
+
def listen_events
|
25
|
+
lock.synchronize do
|
26
|
+
condition.wait(lock)
|
31
27
|
yield @response.event, @response.data, @response.jsep
|
32
28
|
end
|
33
29
|
end
|
@@ -36,9 +32,9 @@ module RubyRabbitmqJanus
|
|
36
32
|
|
37
33
|
# Sending an signal when an response is reading in queue
|
38
34
|
def synchronize_response(payload)
|
39
|
-
@response = Janus::
|
35
|
+
@response = Janus::Responses::Event.new(JSON.parse(payload))
|
40
36
|
Tools::Log.instance.info \
|
41
|
-
"[X] Message number reading
|
37
|
+
"[X] Message number reading ##{@count} --\n\r" \
|
42
38
|
"#{@response.to_hash}"
|
43
39
|
@count += 1
|
44
40
|
lock.synchronize { condition.signal }
|
data/listen.rb
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
require 'ruby_rabbitmq_janus'
|
5
5
|
|
6
6
|
@t = RubyRabbitmqJanus::RRJ.new
|
7
|
-
@
|
7
|
+
@e = RubyRabbitmqJanus::Janus::Concurrencies::Event.instance
|
8
8
|
|
9
9
|
# :reek:NilCheck and :reek:TooManyStatements
|
10
10
|
def case_event(data, jsep)
|
@@ -13,9 +13,6 @@ def case_event(data, jsep)
|
|
13
13
|
when 'joined'
|
14
14
|
puts 'Joined request ...'
|
15
15
|
@t.handle_message_simple('channel::offer', jsep)
|
16
|
-
when 'selected' then puts 'Selected request ...'
|
17
|
-
when 'unselected' then puts 'Unselected request ...'
|
18
|
-
when 'left' then puts 'Left request ...'
|
19
16
|
end
|
20
17
|
update_jsep(jsep) unless jsep.nil?
|
21
18
|
end
|
@@ -24,33 +21,25 @@ def update_jsep(jsep)
|
|
24
21
|
puts "JSEP : #{jsep}"
|
25
22
|
end
|
26
23
|
|
27
|
-
def case_hangup
|
28
|
-
puts 'REASON : Hangup'
|
29
|
-
Thread.current.stop
|
30
|
-
end
|
31
|
-
|
32
24
|
def case_stop
|
33
25
|
puts 'REASON : Stop'
|
34
26
|
Thread.current.stop
|
35
27
|
end
|
36
28
|
|
37
|
-
|
38
|
-
puts
|
39
|
-
end
|
40
|
-
|
41
|
-
puts '## Start listen Block'
|
42
|
-
@events.listen do |reason, data, jsep|
|
29
|
+
events = lambda do |reason, data = nil, jsep = nil|
|
30
|
+
puts "Execute block code with reason : #{reason}"
|
43
31
|
case reason
|
44
32
|
when 'event' then case_event(data, jsep)
|
45
|
-
when 'hangup' then case_hangup
|
46
33
|
when 'stop' then case_stop
|
47
|
-
when 'error' then case_error
|
48
34
|
else
|
49
35
|
puts 'REASON default'
|
50
36
|
end
|
51
37
|
end
|
38
|
+
|
39
|
+
puts '## Start listen Block'
|
40
|
+
@e.run(&events)
|
52
41
|
puts '## End listen block'
|
53
42
|
|
54
|
-
puts '
|
43
|
+
puts '## APPS RUNNING'
|
55
44
|
loop do
|
56
45
|
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.6
|
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-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -340,13 +340,16 @@ files:
|
|
340
340
|
- lib/rrj/errors/request.rb
|
341
341
|
- lib/rrj/info.rb
|
342
342
|
- lib/rrj/init.rb
|
343
|
-
- lib/rrj/janus/admin.rb
|
344
343
|
- lib/rrj/janus/janus.rb
|
345
|
-
- lib/rrj/janus/
|
344
|
+
- lib/rrj/janus/messages/admin.rb
|
345
|
+
- lib/rrj/janus/messages/message.rb
|
346
|
+
- lib/rrj/janus/messages/standard.rb
|
346
347
|
- lib/rrj/janus/processus/concurrency.rb
|
347
348
|
- lib/rrj/janus/processus/event.rb
|
348
349
|
- lib/rrj/janus/processus/keepalive.rb
|
349
|
-
- lib/rrj/janus/
|
350
|
+
- lib/rrj/janus/responses/event.rb
|
351
|
+
- lib/rrj/janus/responses/response.rb
|
352
|
+
- lib/rrj/janus/responses/standard.rb
|
350
353
|
- lib/rrj/janus/transactions/admin.rb
|
351
354
|
- lib/rrj/janus/transactions/handle.rb
|
352
355
|
- lib/rrj/janus/transactions/session.rb
|
data/lib/rrj/janus/admin.rb
DELETED
@@ -1,27 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
# :reek:InstanceVariableAssumption
|
3
|
-
|
4
|
-
module RubyRabbitmqJanus
|
5
|
-
module Janus
|
6
|
-
# @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
|
7
|
-
# Create an message for janus
|
8
|
-
class MessageAdmin < Message
|
9
|
-
# Return options to message for rabbitmq
|
10
|
-
def options
|
11
|
-
Tools::Log.instance.debug 'Options used for admin message'
|
12
|
-
@properties.options_admin
|
13
|
-
rescue => error
|
14
|
-
raise Errors::JanusMessagePropertie, error
|
15
|
-
end
|
16
|
-
|
17
|
-
private
|
18
|
-
|
19
|
-
# Transform raw request in request to janus, so replace element <string>, <number>
|
20
|
-
# and other with real value
|
21
|
-
def prepare_request(options)
|
22
|
-
@request = Tools::AdminReplace.new(@request, options).transform_request
|
23
|
-
Tools::Log.instance.debug "Prepare request admin for janus : #{to_json}"
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
data/lib/rrj/janus/message.rb
DELETED
@@ -1,86 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module RubyRabbitmqJanus
|
4
|
-
module Janus
|
5
|
-
# @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
|
6
|
-
# Create an message for janus
|
7
|
-
class Message
|
8
|
-
attr_reader :type
|
9
|
-
|
10
|
-
# Instanciate an message
|
11
|
-
# @param template_request [String] Name of request prepare
|
12
|
-
# @param [Hash] options Options to request (replace element or add in body)
|
13
|
-
# @option options [String] :session_id Identifier to session
|
14
|
-
# @option options [String] :handle_id Identifier to session manipulate
|
15
|
-
# @option options [Hash] :other Element contains in request sending to janus
|
16
|
-
# @example Initialize a message
|
17
|
-
# Message.new('test', {
|
18
|
-
# "session_id": 42,
|
19
|
-
# "handle_id": 42,
|
20
|
-
# "replace": {
|
21
|
-
# "audio": false,
|
22
|
-
# "video": true
|
23
|
-
# },
|
24
|
-
# "add": {
|
25
|
-
# "subtitle": true
|
26
|
-
# })
|
27
|
-
def initialize(template_request, options = {})
|
28
|
-
@request = {}
|
29
|
-
@type = template_request
|
30
|
-
@properties = Rabbit::Propertie.new
|
31
|
-
load_request_file
|
32
|
-
prepare_request(options)
|
33
|
-
rescue => error
|
34
|
-
raise Errors::JanusMessage, error
|
35
|
-
end
|
36
|
-
|
37
|
-
# Return request to json format
|
38
|
-
def to_json
|
39
|
-
@request.to_json
|
40
|
-
rescue => error
|
41
|
-
raise Errors::JanusMessageJson, error
|
42
|
-
end
|
43
|
-
|
44
|
-
# Return request to json format with nice format
|
45
|
-
def to_nice_json
|
46
|
-
JSON.pretty_generate to_hash
|
47
|
-
rescue => error
|
48
|
-
raise Errors::JanusMessagePrettyJson, error
|
49
|
-
end
|
50
|
-
|
51
|
-
# Return request to hash format
|
52
|
-
def to_hash
|
53
|
-
@request
|
54
|
-
rescue => error
|
55
|
-
raise Errors::JanusMessageHash, error
|
56
|
-
end
|
57
|
-
|
58
|
-
# Return options to message for rabbitmq
|
59
|
-
def options
|
60
|
-
@properties.options
|
61
|
-
rescue => error
|
62
|
-
raise Errors::JanusMessagePropertie, error
|
63
|
-
end
|
64
|
-
|
65
|
-
# Return correlation to message
|
66
|
-
def correlation
|
67
|
-
@properties.correlation
|
68
|
-
end
|
69
|
-
|
70
|
-
private
|
71
|
-
|
72
|
-
# Load raw request
|
73
|
-
def load_request_file
|
74
|
-
@request = JSON.parse File.read Tools::Requests.instance.requests[@type]
|
75
|
-
Tools::Log.instance.debug "Opening request : #{to_json}"
|
76
|
-
end
|
77
|
-
|
78
|
-
# Transform raw request in request to janus, so replace element <string>, <number>
|
79
|
-
# and other with real value
|
80
|
-
def prepare_request(options)
|
81
|
-
@request = Tools::Replace.new(@request, options).transform_request
|
82
|
-
Tools::Log.instance.debug "Prepare request for janus : #{to_json}"
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|
data/lib/rrj/janus/response.rb
DELETED
@@ -1,119 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module RubyRabbitmqJanus
|
4
|
-
module Janus
|
5
|
-
# @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
|
6
|
-
# Read and decryt a response to janus
|
7
|
-
# :reek:TooManyMethods
|
8
|
-
class Response
|
9
|
-
# Instanciate a response
|
10
|
-
def initialize(response_janus)
|
11
|
-
@request = response_janus
|
12
|
-
rescue => error
|
13
|
-
Tools::Log.instance.debug "Request error : #{@request}"
|
14
|
-
raise Errors::JanusResponseInit, error
|
15
|
-
else
|
16
|
-
Tools::Log.instance.debug "Response return : #{to_json}"
|
17
|
-
end
|
18
|
-
|
19
|
-
# Return request to json format
|
20
|
-
def to_json
|
21
|
-
analysis
|
22
|
-
@request.to_json
|
23
|
-
rescue => error
|
24
|
-
Tools::Log.instance.debug "Request error : #{@request}"
|
25
|
-
raise Errors::JanusResponseJson, [error, @request]
|
26
|
-
end
|
27
|
-
|
28
|
-
# Return request to json format with nice format
|
29
|
-
def to_nice_json
|
30
|
-
JSON.pretty_generate to_hash
|
31
|
-
rescue => error
|
32
|
-
Tools::Log.instance.debug "Request error : #{@request}"
|
33
|
-
raise Errors::JanusResponsePrettyJson, error
|
34
|
-
end
|
35
|
-
|
36
|
-
# Return request to hash format
|
37
|
-
def to_hash
|
38
|
-
analysis
|
39
|
-
@request
|
40
|
-
rescue => error
|
41
|
-
Tools::Log.instance.debug "Request error : #{@request}"
|
42
|
-
raise Errors::JanusResponseHash, [error, @request]
|
43
|
-
end
|
44
|
-
|
45
|
-
# Return a response simple for client
|
46
|
-
def for_plugin
|
47
|
-
case @request['janus']
|
48
|
-
when 'success' then @request['plugindata']['data']
|
49
|
-
when 'ack' then {}
|
50
|
-
end
|
51
|
-
rescue => error
|
52
|
-
Tools::Log.instance.debug "Request error : #{@request}"
|
53
|
-
raise Errors::JanusResponsePluginData, error
|
54
|
-
end
|
55
|
-
|
56
|
-
# Return a integer to session
|
57
|
-
def session
|
58
|
-
data_id
|
59
|
-
end
|
60
|
-
|
61
|
-
# Return a integer to handle
|
62
|
-
def sender
|
63
|
-
data_id
|
64
|
-
end
|
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
|
-
|
81
|
-
private
|
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
|
-
|
93
|
-
# Read a hash and return an identifier
|
94
|
-
def data_id
|
95
|
-
analysis
|
96
|
-
@request['data']['id'].to_i
|
97
|
-
rescue => error
|
98
|
-
raise Errors::JanusResponseDataId, error
|
99
|
-
end
|
100
|
-
|
101
|
-
# Analysis response and send exception if janus return an error
|
102
|
-
# :reek:DuplicateMethodCall
|
103
|
-
def analysis
|
104
|
-
raise Errors::JanusResponseSimple, @request if error_simple?
|
105
|
-
raise Errors::JanusResponsePlugin, @request['plugindata']['data'] if error_plugin?
|
106
|
-
end
|
107
|
-
|
108
|
-
# Test if message response contains an simple error
|
109
|
-
def error_simple?
|
110
|
-
@request['janus'].equal? 'error'
|
111
|
-
end
|
112
|
-
|
113
|
-
# Test if message response contains an error in plugin
|
114
|
-
def error_plugin?
|
115
|
-
@request.key?('plugindata') && @request['plugindata']['data'].key?('error_code')
|
116
|
-
end
|
117
|
-
end
|
118
|
-
end
|
119
|
-
end
|