Class: RubyRabbitmqJanus::Janus::Keepalive

Inherits:
OneThread
  • Object
show all
Includes:
Singleton
Defined in:
lib/rrj/janus/threads/keepalive.rb

Overview

Manage sending keepalive message

Author:

Instance Attribute Summary

Attributes inherited from OneThread

#condition, #lock, #rabbit

Instance Method Summary collapse

Methods inherited from OneThread

#start_thread

Constructor Details

#initializeKeepalive

Initalize a keepalive message



11
12
13
14
15
16
# File 'lib/rrj/janus/threads/keepalive.rb', line 11

def initialize
  Tools::Log.instance.debug 'Create an session for keepalive'
  super
  @publish = @response = nil
  session_live
end

Instance Method Details

#initialize_threadObject (private)

Initialize an session with janus and start a keepalive transaction



32
33
34
35
36
37
38
# File 'lib/rrj/janus/threads/keepalive.rb', line 32

def initialize_thread
  rabbit.start
  @response = session_start
  lock.synchronize { condition.signal }
  session_keepalive(ttl)
  rabbit.close
end

#sessionObject

Return an number session created



19
20
21
22
# File 'lib/rrj/janus/threads/keepalive.rb', line 19

def session
  lock.synchronize { condition.wait(lock) }
  @response.session
end

#session_keepalive(time_to_live) ⇒ Object (private)

Create an loop for sending a keepalive message



48
49
50
51
52
53
54
55
56
# File 'lib/rrj/janus/threads/keepalive.rb', line 48

def session_keepalive(time_to_live)
  loop do
    sleep time_to_live
    @publish.send_a_message(Janus::Message.new('base::keepalive',
                                               'session_id' => @response.session))
  end
rescue => message
  Tools::Log.instance.debug "Error keepalive : #{message}"
end

#session_liveObject (private)

Send to regular interval a message keepalive



27
28
29
# File 'lib/rrj/janus/threads/keepalive.rb', line 27

def session_live
  start_thread
end

#session_startObject (private)

Star an session janus



41
42
43
44
45
# File 'lib/rrj/janus/threads/keepalive.rb', line 41

def session_start
  msg_create = Janus::Message.new 'base::create'
  @publish = Rabbit::Publisher::PublishExclusive.new(rabbit.channel, '')
  @response = Janus::Response.new(@publish.send_a_message(msg_create))
end

#ttlObject (private)

Define a Time To Live between each request sending to janus



59
60
61
62
63
# File 'lib/rrj/janus/threads/keepalive.rb', line 59

def ttl
  Tools::Config.instance.options['gem']['session']['keepalive'].to_i
rescue => error
  Tools::Log.instance.debug "TTL Not loading - #{error}"
end