Class: RubyRabbitmqJanus::Janus::Concurrencies::KeepaliveTimer

Inherits:
Object
  • Object
show all
Defined in:
lib/rrj/janus/processus/keepalive/keepalive_timer.rb

Overview

# Manage time for thread

Configure all timer used in keepalive class

Author:

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeKeepaliveTimer

Initialize timer to keeaplive thread.



25
26
27
28
29
30
31
32
# File 'lib/rrj/janus/processus/keepalive/keepalive_timer.rb', line 25

def initialize
  @time_to_live = Tools::Config.instance.ttl
  @time_to_die = test_time_to_die >= 60 ? 59 : test_time_to_die
  @timers = Timers::Group.new
  @timer = nil
rescue
  raise Errors::Janus::KeepaliveTimer::Initializer
end

Instance Attribute Details

#time_to_dieInteger (readonly)

Returns Time before timer stop it.

Returns:

  • (Integer)

    Time before timer stop it



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/rrj/janus/processus/keepalive/keepalive_timer.rb', line 21

class KeepaliveTimer
  attr_reader :time_to_live, :time_to_die

  # Initialize timer to keeaplive thread.
  def initialize
    @time_to_live = Tools::Config.instance.ttl
    @time_to_die = test_time_to_die >= 60 ? 59 : test_time_to_die
    @timers = Timers::Group.new
    @timer = nil
  rescue
    raise Errors::Janus::KeepaliveTimer::Initializer
  end

  # Execute a loop with timer for sending keepalive message
  # to Janus Instance
  def loop_keepalive(&block)
    @timer = @timers.now_and_every(@time_to_live) { prepare_loop(&block) }
    loop { @timers.wait }
  rescue
    raise Errors::Janus::KeepaliveTimer::LoopKeepalive
  end

  # Test if session is present/exist in Janus Instance
  def session(&block)
    Timeout.timeout(@time_to_die) { yield }
  rescue Timeout::Error
    block.binding.receiver.instance_is_down
  rescue
    raise Errors::Janus::KeepaliveTimer::Session
  end

  # Stop timer to keepalive thread
  def stop_timer
    @timer.cancel
    @timer = nil
  rescue
    raise Errors::Janus::KeepaliveTimer::StopTimer
  end

  private

  # :reek:FeatureEnvy
  def prepare_loop(&block)
    Timeout.timeout(@time_to_die) do
      block.binding.receiver.restart_session if yield
    end
  rescue Timeout::Error
    block.binding.receiver.instance_is_down
  end

  def test_time_to_die
    @time_to_live + 5
  end
end

#time_to_liveInteger (readonly)

Returns Time for interval between keepalive message.

Returns:

  • (Integer)

    Time for interval between keepalive message



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/rrj/janus/processus/keepalive/keepalive_timer.rb', line 21

class KeepaliveTimer
  attr_reader :time_to_live, :time_to_die

  # Initialize timer to keeaplive thread.
  def initialize
    @time_to_live = Tools::Config.instance.ttl
    @time_to_die = test_time_to_die >= 60 ? 59 : test_time_to_die
    @timers = Timers::Group.new
    @timer = nil
  rescue
    raise Errors::Janus::KeepaliveTimer::Initializer
  end

  # Execute a loop with timer for sending keepalive message
  # to Janus Instance
  def loop_keepalive(&block)
    @timer = @timers.now_and_every(@time_to_live) { prepare_loop(&block) }
    loop { @timers.wait }
  rescue
    raise Errors::Janus::KeepaliveTimer::LoopKeepalive
  end

  # Test if session is present/exist in Janus Instance
  def session(&block)
    Timeout.timeout(@time_to_die) { yield }
  rescue Timeout::Error
    block.binding.receiver.instance_is_down
  rescue
    raise Errors::Janus::KeepaliveTimer::Session
  end

  # Stop timer to keepalive thread
  def stop_timer
    @timer.cancel
    @timer = nil
  rescue
    raise Errors::Janus::KeepaliveTimer::StopTimer
  end

  private

  # :reek:FeatureEnvy
  def prepare_loop(&block)
    Timeout.timeout(@time_to_die) do
      block.binding.receiver.restart_session if yield
    end
  rescue Timeout::Error
    block.binding.receiver.instance_is_down
  end

  def test_time_to_die
    @time_to_live + 5
  end
end

Instance Method Details

#loop_keepalive(&block) ⇒ Object

Execute a loop with timer for sending keepalive message to Janus Instance



36
37
38
39
40
41
# File 'lib/rrj/janus/processus/keepalive/keepalive_timer.rb', line 36

def loop_keepalive(&block)
  @timer = @timers.now_and_every(@time_to_live) { prepare_loop(&block) }
  loop { @timers.wait }
rescue
  raise Errors::Janus::KeepaliveTimer::LoopKeepalive
end

#session(&block) ⇒ Object

Test if session is present/exist in Janus Instance



44
45
46
47
48
49
50
# File 'lib/rrj/janus/processus/keepalive/keepalive_timer.rb', line 44

def session(&block)
  Timeout.timeout(@time_to_die) { yield }
rescue Timeout::Error
  block.binding.receiver.instance_is_down
rescue
  raise Errors::Janus::KeepaliveTimer::Session
end

#stop_timerObject

Stop timer to keepalive thread



53
54
55
56
57
58
# File 'lib/rrj/janus/processus/keepalive/keepalive_timer.rb', line 53

def stop_timer
  @timer.cancel
  @timer = nil
rescue
  raise Errors::Janus::KeepaliveTimer::StopTimer
end