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