ruby_rabbitmq_janus 0.3.0 → 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +64 -7
- data/.reek +7 -0
- data/.rubocop.yml +0 -3
- data/README.md +40 -2
- data/config/default.md +22 -6
- data/config/default.yml +24 -6
- data/config/requests/{test.json → admin/handle_info.json} +2 -4
- data/config/requests/admin/handles.json +6 -0
- data/config/requests/admin/log_level.json +6 -0
- data/config/requests/admin/sessions.json +5 -0
- data/config/requests/{attach.json → base/attach.json} +0 -0
- data/config/requests/{create.json → base/create.json} +0 -0
- data/config/requests/{destroy.json → base/destroy.json} +0 -0
- data/config/requests/{detach.json → base/detach.json} +0 -0
- data/config/requests/{info.json → base/info.json} +0 -0
- data/config/requests/base/keepalive.json +5 -0
- data/lib/generators/ruby_rabbitmq_janus/configuration_generator.rb +23 -0
- data/lib/generators/ruby_rabbitmq_janus/create_request_generator.rb +90 -0
- data/lib/generators/ruby_rabbitmq_janus/default_request_generator.rb +21 -0
- data/lib/generators/ruby_rabbitmq_janus/initializer_generator.rb +17 -0
- data/lib/rrj/errors/config.rb +21 -0
- data/lib/rrj/errors/error.rb +56 -0
- data/lib/rrj/errors/janus.rb +14 -0
- data/lib/rrj/errors/janus_message.rb +45 -0
- data/lib/rrj/errors/janus_response.rb +78 -0
- data/lib/rrj/errors/janus_transaction.rb +31 -0
- data/lib/rrj/errors/rabbit.rb +21 -0
- data/lib/rrj/errors/request.rb +21 -0
- data/lib/rrj/info.rb +40 -0
- data/lib/rrj/init.rb +113 -44
- data/lib/rrj/janus/admin.rb +27 -0
- data/lib/rrj/janus/janus.rb +10 -33
- data/lib/rrj/janus/keepalive.rb +69 -0
- data/lib/rrj/janus/message.rb +77 -22
- data/lib/rrj/janus/response.rb +79 -41
- data/lib/rrj/janus/transaction.rb +53 -0
- data/lib/rrj/janus/transaction_admin.rb +43 -0
- data/lib/rrj/janus/transaction_handle.rb +40 -0
- data/lib/rrj/janus/transaction_session.rb +17 -0
- data/lib/rrj/rabbit/connect.rb +75 -0
- data/lib/rrj/rabbit/propertie.rb +37 -0
- data/lib/rrj/rabbit/publish.rb +100 -0
- data/lib/rrj/rabbit/rabbit.rb +11 -0
- data/lib/rrj/tools/config.rb +63 -0
- data/lib/rrj/tools/env.rb +21 -0
- data/lib/rrj/tools/log.rb +106 -0
- data/lib/rrj/tools/replaces.rb +115 -0
- data/lib/rrj/tools/replaces_admin.rb +44 -0
- data/lib/rrj/tools/requests.rb +57 -0
- data/lib/rrj/tools/tools.rb +14 -0
- data/lib/ruby_rabbitmq_janus.rb +8 -13
- data/rrj.gemspec +7 -3
- metadata +108 -28
- data/config.reek +0 -3
- data/lib/rrj/config.rb +0 -57
- data/lib/rrj/janus/error.rb +0 -8
- data/lib/rrj/janus/message_async.rb +0 -54
- data/lib/rrj/janus/message_sync.rb +0 -34
- data/lib/rrj/log.rb +0 -63
- data/lib/rrj/rabbitmq/rabbitmq.rb +0 -82
- data/lib/rrj/request/path.rb +0 -21
- data/lib/rrj/request/replaces.rb +0 -109
- data/lib/rrj/request/requests.rb +0 -55
- data/lib/rrj/request/type_data.rb +0 -30
- data/lib/rrj/version.rb +0 -17
@@ -0,0 +1,78 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# :reek:FeatureEnvy
|
3
|
+
|
4
|
+
module RubyRabbitmqJanus
|
5
|
+
module Errors
|
6
|
+
# @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
|
7
|
+
# Define an error primary for response
|
8
|
+
class JanusResponse < JanusError
|
9
|
+
def initialize(message)
|
10
|
+
super "[Response] #{message}"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
# @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
|
15
|
+
# Define an error for response initalize
|
16
|
+
class JanusResponseInit < JanusResponse
|
17
|
+
def initalize(message)
|
18
|
+
super "Error create object : #{message}"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
# @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
|
23
|
+
# Define an error for simple message
|
24
|
+
class JanusResponseSimple < JanusResponse
|
25
|
+
def initialize(message)
|
26
|
+
super "[#{message['code']}] #{message['reason']}"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
# @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
|
31
|
+
# Define an error for plugin
|
32
|
+
class JanusResponsePlugin < JanusResponse
|
33
|
+
def initialize(message)
|
34
|
+
super "[#{message['error_code']}] #{message['error']}"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
# @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
|
39
|
+
# Define an exception for json
|
40
|
+
class JanusResponseJson < JanusResponse
|
41
|
+
def initialize(message)
|
42
|
+
super "Error transform to JSON : #{message}"
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
# @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
|
47
|
+
# Define an exception for nice_json
|
48
|
+
class JanusResponsePrettyJson < JanusResponse
|
49
|
+
def initialize(message)
|
50
|
+
super "Error transform to Pretty JSON : #{message}"
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
# @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
|
55
|
+
# Define an exception for hash
|
56
|
+
class JanusResponseHash < JanusResponse
|
57
|
+
def initialize(message)
|
58
|
+
super "Error transform to Hash : #{message}"
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
# @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
|
63
|
+
# Define an error for response plugin
|
64
|
+
class JanusResponsePluginData < JanusResponse
|
65
|
+
def initialize(message)
|
66
|
+
super "Error data response : #{message}"
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
# @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
|
71
|
+
# Define an error for response data
|
72
|
+
class JanusResponseDataId < JanusResponse
|
73
|
+
def initalize(message)
|
74
|
+
super "Error Data : #{message}"
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RubyRabbitmqJanus
|
4
|
+
module Errors
|
5
|
+
# @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
|
6
|
+
# Define errors to message sending and response to janus
|
7
|
+
# @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
|
8
|
+
# Define an exception for initaliser transaction
|
9
|
+
class JanusTransaction < JanusError
|
10
|
+
def initialize(message)
|
11
|
+
super "[Transaction] Error initialize : #{message}"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
# @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
|
16
|
+
# Define an exception for running_handle
|
17
|
+
class JanusTransactionHandle
|
18
|
+
def initalize(message)
|
19
|
+
super "[Transaction] Error handle #{message}"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
# @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
|
24
|
+
# Define an exception for sending_message
|
25
|
+
class JanusTransactionPost < JanusError
|
26
|
+
def initialize(message)
|
27
|
+
super "[Transaction] Error sending message : #{message}"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RubyRabbitmqJanus
|
4
|
+
module Errors
|
5
|
+
# @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
|
6
|
+
# Define errors with Rabbitmq when request is not sending
|
7
|
+
class RequestNotExecuted < Errors::RRJError
|
8
|
+
def initialize(request)
|
9
|
+
super "Error in request executed : #{request}", :error
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
# @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
|
14
|
+
# Define errors if connection to rabbitmq is failed
|
15
|
+
class ConnectionRabbitmqFailed < Errors::RRJError
|
16
|
+
def initialize(message)
|
17
|
+
super message, :fatal
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RubyRabbitmqJanus
|
4
|
+
module Errors
|
5
|
+
# @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
|
6
|
+
# Define errors with Rabbitmq when connection is failed
|
7
|
+
class RequestTemplateNotExist < Errors::RRJError
|
8
|
+
def initialize(request_name)
|
9
|
+
super "The template request (#{request_name}) does not exist", :fatal
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
# @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
|
14
|
+
# Define errors if request folder does not exist
|
15
|
+
class RequestFolerDoesntExist < Errors::RRJError
|
16
|
+
def initialize
|
17
|
+
super 'The requests folder does not exist', :fatal
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/lib/rrj/info.rb
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
|
3
|
+
# Define constant to gem.
|
4
|
+
module RubyRabbitmqJanus
|
5
|
+
# Define version to gem
|
6
|
+
VERSION = '1.0.1'
|
7
|
+
|
8
|
+
# Define a summary description to gem
|
9
|
+
SUMMARY = 'Ruby RabbitMQ Janus'
|
10
|
+
|
11
|
+
# Define a long description to gem
|
12
|
+
DESCRIPTION = 'This gem is used to communicate to a server Janus through RabbitMQ '\
|
13
|
+
'software (Message-oriented middleware). It waiting a messages to Rails API who ' \
|
14
|
+
'send to RabbitMQ server in a queue for janus server. Janus processes a message ' \
|
15
|
+
'and send to RabbitMQ server in a queue for gem. Once the received message is ' \
|
16
|
+
'decoded and returned through the Rails API.'
|
17
|
+
|
18
|
+
# Define homepage
|
19
|
+
HOMEPAGE = 'https://github.com/dazzl-tv/ruby-rabbitmq-janus'
|
20
|
+
|
21
|
+
# Define a post install message
|
22
|
+
POST_INSTALL = \
|
23
|
+
"# ====================================================== #\n" \
|
24
|
+
"# Thanks for installing! #\n" \
|
25
|
+
"# #{HOMEPAGE}. #\n" \
|
26
|
+
"# ;;;;;;;;;;;:. #\n" \
|
27
|
+
"# ;;;;;;;;;;;;;;;;;; #\n" \
|
28
|
+
"# ;;;;;;;;;;;:;;;;;;;; #\n" \
|
29
|
+
"# ;;;;;;;;;;` ;;;;;;;; #\n" \
|
30
|
+
"# ;;;;;;;;; :;;;;;;;;. #\n" \
|
31
|
+
"# ;;;;;;;; :::::;;;;; #\n" \
|
32
|
+
"# ;;;;;;, ,;;;;;; #\n" \
|
33
|
+
"# ;;;;; ;;;;;;;; #\n" \
|
34
|
+
"# ;;;;;;;;; ;;;;;;;;, #\n" \
|
35
|
+
"# ;;;;;;;;; `;;;;;;;;; A ZZZZZZZ ZZZZZZZ LL #\n" \
|
36
|
+
"# ;;;;;;;;.:;;;;;;;;;; A A ZZZ ZZZ LL #\n" \
|
37
|
+
"# ;;;;;;;;;;;;;;;;; AAAAA ZZ ZZ LL #\n" \
|
38
|
+
"# ;;;;;;;;;;;;;, A A ZZZZZZZ ZZZZZZZ LLLLLLL #\n" \
|
39
|
+
'# ====================================================== #'
|
40
|
+
end
|
data/lib/rrj/init.rb
CHANGED
@@ -1,73 +1,142 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'singleton'
|
4
|
+
require 'yaml'
|
5
|
+
require 'json'
|
6
|
+
require 'securerandom'
|
7
|
+
require 'bunny'
|
8
|
+
require 'logger'
|
9
|
+
require 'key_path'
|
10
|
+
require 'active_support'
|
11
|
+
require 'concurrent'
|
12
|
+
require 'colorize'
|
13
|
+
|
3
14
|
module RubyRabbitmqJanus
|
4
15
|
# @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
|
5
|
-
# Initialize gem
|
16
|
+
# Initialize gem and create automatically an session with Janus
|
6
17
|
# @!attribute [r] session
|
7
|
-
#
|
18
|
+
# :reek:BooleanParameter
|
8
19
|
class RRJ
|
9
20
|
attr_reader :session
|
10
21
|
|
11
22
|
# Returns a new instance of RubyRabbitmqJanus
|
12
23
|
def initialize
|
13
|
-
|
14
|
-
|
15
|
-
|
24
|
+
Tools::Env.instance
|
25
|
+
Tools::Log.instance
|
26
|
+
Tools::Config.instance
|
27
|
+
Tools::Requests.instance
|
16
28
|
|
17
|
-
@
|
29
|
+
@session = Janus::Keepalive.new.session
|
18
30
|
|
19
|
-
@
|
31
|
+
@transaction = nil
|
32
|
+
rescue => error
|
33
|
+
raise Errors::RRJErrorInit, error
|
20
34
|
end
|
21
35
|
|
22
|
-
# Send
|
23
|
-
# @
|
24
|
-
#
|
25
|
-
# @param [
|
26
|
-
#
|
27
|
-
# @
|
28
|
-
#
|
29
|
-
|
30
|
-
|
36
|
+
# Send an simple message to janus. No options in request with this method.
|
37
|
+
# @param [String] type
|
38
|
+
# Given a type to request. JSON request writing in 'config/requests/'
|
39
|
+
# @param [Bollean] exclusive
|
40
|
+
# Use an exclusive queue or not
|
41
|
+
# @exemple Sending an message info
|
42
|
+
# RubyRabbitmqJanus::RRJ.new.message_simple('base::info')
|
43
|
+
# #=> {"janus":"server_info","name":"Janus WebRTC Gateway" ... }
|
44
|
+
# @return [RubyRabbitmqJanus::Janus::Response] Give an object response to janus server
|
45
|
+
def message_simple(type = 'base::info', exclusive = false)
|
46
|
+
Janus::Transaction.new(@session).connect(exclusive) do
|
47
|
+
Janus::Message.new(type)
|
48
|
+
end
|
31
49
|
end
|
32
50
|
|
33
|
-
# Send
|
34
|
-
# @
|
35
|
-
#
|
36
|
-
# @
|
37
|
-
# @
|
38
|
-
#
|
39
|
-
|
40
|
-
|
51
|
+
# Send an message simple in current session.
|
52
|
+
# @param [String] type
|
53
|
+
# Given a type to request. JSON request writing in 'config/requests/'
|
54
|
+
# @param [Hash] options Options update in request
|
55
|
+
# @param [Bollean] exclusive
|
56
|
+
# Use an exclusive queue or not
|
57
|
+
# @exemple Sending an message create
|
58
|
+
# RubyRabbitmqJanus::RRJ.new.message_session('base::create')
|
59
|
+
# #=> {"janus":"server_info","name":"Janus WebRTC Gateway" ... }
|
60
|
+
# @return [RubyRabbitmqJanus::Janus::Response] Give an object response to janus server
|
61
|
+
def message_session(type, options = {}, exclusive = false)
|
62
|
+
Janus::TransactionSession.new(@session).session_connect(exclusive) do
|
63
|
+
Janus::Message.new(type, use_current_session?(options))
|
64
|
+
end
|
65
|
+
rescue => error
|
66
|
+
raise Errors::RRJErrorPost, error
|
41
67
|
end
|
42
68
|
|
43
|
-
#
|
44
|
-
#
|
45
|
-
#
|
46
|
-
# @
|
47
|
-
# @
|
48
|
-
|
49
|
-
|
50
|
-
|
69
|
+
# Send a message simple for admin Janus
|
70
|
+
# @param [String] type
|
71
|
+
# Given a type to request. JSON request writing in 'config/requests/'
|
72
|
+
# @param [Hash] options Options update in request
|
73
|
+
# @exemple Sending an message create
|
74
|
+
# RubyRabbitmqJanus::RRJ.new.message_admin('admin::sessions')
|
75
|
+
# #=> {"janus":"success","sessions": [12345, 8786567465465, ...] }
|
76
|
+
# @return [RubyRabbitmqJanus::Janus::Response] Give an object response to janus server
|
77
|
+
def message_admin(type, options = {})
|
78
|
+
Janus::TransactionAdmin.new(@session).connect do
|
79
|
+
Janus::MessageAdmin.new(type, options.merge!('session_id' => @session))
|
80
|
+
end
|
51
81
|
end
|
52
82
|
|
53
|
-
|
54
|
-
|
83
|
+
# Send an message in handle session in current session.
|
84
|
+
# @param [String] type
|
85
|
+
# Given a type to request. JSON request writing in 'config/requests/'
|
86
|
+
# @param [Hash] options Options update in request
|
87
|
+
# @param [Bollean] exclusive
|
88
|
+
# Use an exclusive queue or not
|
89
|
+
# @exemple Sending an message create
|
90
|
+
# RubyRabbitmqJanus::RRJ.new.message_session('base::create')
|
91
|
+
# #=> {"janus":"server_info","name":"Janus WebRTC Gateway" ... }
|
92
|
+
# @return [RubyRabbitmqJanus::Janus::Response] Give an object response to janus server
|
93
|
+
def message_handle(type, replace = {}, add = {})
|
94
|
+
options = { 'replace' => replace, 'add' => add }
|
95
|
+
Tools::Log.instance.debug "Transaction : #{@transaction}"
|
96
|
+
@transaction.publish_message_handle(type, options)
|
55
97
|
end
|
56
98
|
|
57
|
-
|
58
|
-
|
59
|
-
|
99
|
+
# Manage a transaction simple. Just for create element or destroy
|
100
|
+
# def transaction_simple(type, replace = {}, add = {})
|
101
|
+
# options = { 'replace' => replace, 'add' => add }
|
102
|
+
# Janus::Transaction.new(@session).handle_running_simple(type, options)
|
103
|
+
# end
|
60
104
|
|
61
|
-
|
105
|
+
# Define an handle and establish connection with janus
|
106
|
+
def start_handle(exclusive = false)
|
107
|
+
@transaction = Janus::TransactionHandle.new(@session)
|
108
|
+
@transaction.handle_connect(exclusive) { yield }
|
109
|
+
rescue => error
|
110
|
+
raise Errors::RRJErrorHandle, error
|
111
|
+
end
|
112
|
+
|
113
|
+
def start_handle_admin
|
114
|
+
@transaction = Janus::TransactionAdmin.new(@session)
|
115
|
+
@transaction.handle_connect { yield }
|
116
|
+
rescue => error
|
117
|
+
raise Errors::RRJErrorHandle, error
|
118
|
+
end
|
62
119
|
|
63
|
-
|
64
|
-
|
65
|
-
|
120
|
+
# Stop an handle existing in session running
|
121
|
+
def stop_handle
|
122
|
+
@transaction.handle_running_stop
|
66
123
|
end
|
67
124
|
|
68
|
-
|
69
|
-
|
70
|
-
|
125
|
+
# Start an short transaction, this queue is not exclusive
|
126
|
+
def handle_message_simple(type, replace = {}, add = {})
|
127
|
+
@transaction = Janus::TransactionHandle.new(@session)
|
128
|
+
@transaction.handle_connect_and_stop(false) do
|
129
|
+
message_handle(type, replace, add).for_plugin
|
130
|
+
end
|
131
|
+
rescue => error
|
132
|
+
raise Errors::RRJErrorHandle, error
|
133
|
+
end
|
134
|
+
|
135
|
+
private
|
136
|
+
|
137
|
+
# Return a current session if not specified
|
138
|
+
def use_current_session?(option)
|
139
|
+
{ 'session_id' => @session } unless option.key?('session_id')
|
71
140
|
end
|
72
141
|
end
|
73
142
|
end
|
@@ -0,0 +1,27 @@
|
|
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/janus.rb
CHANGED
@@ -1,39 +1,16 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require '
|
3
|
+
require 'rrj/janus/keepalive'
|
4
|
+
require 'rrj/janus/message'
|
5
|
+
require 'rrj/janus/admin'
|
6
|
+
require 'rrj/janus/response'
|
7
|
+
require 'rrj/janus/transaction'
|
8
|
+
require 'rrj/janus/transaction_session'
|
9
|
+
require 'rrj/janus/transaction_handle'
|
10
|
+
require 'rrj/janus/transaction_admin'
|
4
11
|
|
5
12
|
module RubyRabbitmqJanus
|
6
|
-
#
|
7
|
-
|
8
|
-
class Janus
|
9
|
-
# Returns a new instance of Janus
|
10
|
-
# @param connection [String] Connection to RabbitMQ server
|
11
|
-
# @param logs [RRJ::Log] Instance to log
|
12
|
-
def initialize(connection)
|
13
|
-
@channel = connection.create_channel
|
14
|
-
end
|
15
|
-
|
16
|
-
# Send a message to RabbitMQ
|
17
|
-
# @param request [String] Type request used by transaction
|
18
|
-
# @param opts [Hash] Contains the parameters used by request if necessary
|
19
|
-
# @return [Hash] Result to request
|
20
|
-
def send(request, opts)
|
21
|
-
message = Sync.new(opts, @channel)
|
22
|
-
message.send(request)
|
23
|
-
end
|
24
|
-
|
25
|
-
def send_async(request, opts)
|
26
|
-
message = ASync.new(opts, @channel)
|
27
|
-
message.send(request)
|
28
|
-
end
|
29
|
-
|
30
|
-
# Read a message to RabbitMQ
|
31
|
-
# @param info_message [Hash] Information request asking to janus
|
32
|
-
# @param connection [Object] Object contains a information to connection
|
33
|
-
# @return [Hash] Result to request
|
34
|
-
def read(info_message, connection)
|
35
|
-
response = ResponseJanus.new(@channel, connection, info_message)
|
36
|
-
response.read
|
37
|
-
end
|
13
|
+
# Module interaction with Janus
|
14
|
+
module Janus
|
38
15
|
end
|
39
16
|
end
|
@@ -0,0 +1,69 @@
|
|
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
|
+
# :reek:TooManyInstanceVariables { max_instance_variables: 6 }
|
8
|
+
class Keepalive
|
9
|
+
# Initalize a keepalive message
|
10
|
+
def initialize
|
11
|
+
@response, @publish = nil
|
12
|
+
@rabbit = Rabbit::Connect.new
|
13
|
+
@lock = Mutex.new
|
14
|
+
@condition = ConditionVariable.new
|
15
|
+
session_live
|
16
|
+
end
|
17
|
+
|
18
|
+
# Return an number session created
|
19
|
+
def session
|
20
|
+
@lock.synchronize { @condition.wait(@lock) }
|
21
|
+
@response.session
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
# Send to regular interval a message keepalive
|
27
|
+
def session_live
|
28
|
+
Thread.new do
|
29
|
+
Tools::Log.instance.debug 'Create an session for keepalive'
|
30
|
+
initialize_thread
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
# Initialize an session with janus and start a keepalive transaction
|
35
|
+
def initialize_thread
|
36
|
+
@rabbit.start
|
37
|
+
@response = session_start
|
38
|
+
@lock.synchronize { @condition.signal }
|
39
|
+
session_keepalive(ttl)
|
40
|
+
@rabbit.close
|
41
|
+
end
|
42
|
+
|
43
|
+
# Star an session janus
|
44
|
+
def session_start
|
45
|
+
msg_create = Janus::Message.new 'base::create'
|
46
|
+
@publish = Rabbit::PublishExclusive.new(@rabbit.channel, '')
|
47
|
+
Janus::Response.new @publish.send_a_message(msg_create)
|
48
|
+
end
|
49
|
+
|
50
|
+
# Create an loop for sending a keepalive message
|
51
|
+
def session_keepalive(time_to_live)
|
52
|
+
loop do
|
53
|
+
sleep time_to_live
|
54
|
+
@publish.send_a_message(Janus::Message.new('base::keepalive',
|
55
|
+
'session_id' => @response.session))
|
56
|
+
end
|
57
|
+
rescue => message
|
58
|
+
Tools::Log.instance.debug "Error keepalive : #{message}"
|
59
|
+
end
|
60
|
+
|
61
|
+
# Define a Time To Live between each request sending to janus
|
62
|
+
def ttl
|
63
|
+
Tools::Config.instance.options['gem']['session']['keepalive'].to_i
|
64
|
+
rescue => error
|
65
|
+
Tools::Log.instance.debug "TTL Not loading - #{error}"
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
data/lib/rrj/janus/message.rb
CHANGED
@@ -1,31 +1,86 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'securerandom'
|
4
|
-
require 'thread'
|
5
|
-
|
6
3
|
module RubyRabbitmqJanus
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
@
|
16
|
-
@
|
17
|
-
@
|
18
|
-
|
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
|
19
69
|
|
20
|
-
|
70
|
+
private
|
21
71
|
|
22
|
-
|
23
|
-
|
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
|
24
77
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
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
|
29
84
|
end
|
30
85
|
end
|
31
86
|
end
|