ruby_rabbitmq_janus 1.0.5 → 1.0.6
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/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
|