class JanusGateway::Resource::Session

Public Class Methods

new(client) click to toggle source

@param [JanusGateway::Client] client

Calls superclass method JanusGateway::Resource::new
# File lib/janus_gateway/resource/session.rb, line 4
def initialize(client)
  @heartbeat_thread = nil

  super
end

Public Instance Methods

create() click to toggle source

@return [Concurrent::Promise]

# File lib/janus_gateway/resource/session.rb, line 11
def create
  promise = Concurrent::Promise.new

  client.send_transaction(
    janus: 'create'
  ).then do |*args|
    _on_created(*args)
    heartbeat

    promise.set(self).execute
  end.rescue do |error|
    promise.fail(error).execute
  end

  promise
end
destroy() click to toggle source

@return [Concurrent::Promise]

# File lib/janus_gateway/resource/session.rb, line 29
def destroy
  promise = Concurrent::Promise.new

  client.send_transaction(
    janus: 'destroy',
    session_id: id
  ).then do |*_args|
    _on_destroyed

    promise.set(self).execute
  end.rescue do |error|
    promise.fail(error).execute
  end

  promise
end
heartbeat() click to toggle source

@return [Thread]

# File lib/janus_gateway/resource/session.rb, line 47
def heartbeat
  @heartbeat_thread.exit unless @heartbeat_thread.nil?

  @heartbeat_thread = Thread.new do
    sleep_time = 5
    loop do
      sleep(sleep_time)
      client.send_transaction(
        janus: 'keepalive',
        session_id: id
      ).then do |*_args|
        sleep_time = 30
      end.rescue do |_error|
        sleep_time = 1
      end
    end
  end
end

Private Instance Methods

_on_created(data) click to toggle source

@param [Hash] data

# File lib/janus_gateway/resource/session.rb, line 69
def _on_created(data)
  @id = data['data']['id']

  client.on :message do |message|
    if message['janus'] == 'timeout' && message['session_id'] == id
      send(:_on_destroyed)
    end
  end

  client.on :close do
    emit :destroy
  end

  client.on :error do
    emit :destroy
  end

  emit :create
end
_on_destroyed() click to toggle source
# File lib/janus_gateway/resource/session.rb, line 89
def _on_destroyed
  @heartbeat_thread.exit unless @heartbeat_thread.nil?
  emit :destroy
end