class Appril::RTCPController
Attributes
socket[R]
Public Instance Methods
index()
click to toggle source
# File lib/appril/rtcp_controller.rb, line 5 def index return unless websocket? @socket = Tubesock.hijack(env) @socket.onopen(&method(:on_open)) @socket.onmessage(&method(:on_message)) @socket.onclose(&method(:on_close)) @socket.listen halt websocket_response end
Private Instance Methods
_env()
click to toggle source
environmental data to be sent to client at App initialization
# File lib/appril/rtcp_controller.rb, line 95 def _env {} end
call_controller(controller, method, arguments, params, env)
click to toggle source
# File lib/appril/rtcp_controller.rb, line 82 def call_controller controller, method, arguments, params, env controller.new(method, arguments, params).call(env) end
connected()
click to toggle source
called after socket connection established
# File lib/appril/rtcp_controller.rb, line 91 def connected end
disconnected()
click to toggle source
called when socket connection closed
# File lib/appril/rtcp_controller.rb, line 100 def disconnected end
on_close()
click to toggle source
# File lib/appril/rtcp_controller.rb, line 72 def on_close @socket.close! if @socket @socket = nil disconnected end
on_message(msg)
click to toggle source
# File lib/appril/rtcp_controller.rb, line 24 def on_message msg msg = indifferent_params(JSON.parse(msg)) if controller = resolve_controller(msg[:controller]) status, _, body = call_controller( controller, msg[:method], msg[:arguments], msg[:params], env.merge(RocketIO::REQUEST_METHOD => msg[:request_method], rtcp_serial: msg[:serial]) ) if status.to_i / 100 == 2 if body.is_a?(Proc) body.call return end if msg[:reply] write(serial: msg[:serial], data: body) end return end else body = '404: Not Found' end error = if body.is_a?(Array) && body.size == 1 body[0] else body end if msg && msg[:serial] write(serial: msg[:serial], error: error) else write(error: error) end rescue Errno::EPIPE => e close rescue Exception => e __error__(500, e) end
on_open()
click to toggle source
# File lib/appril/rtcp_controller.rb, line 19 def on_open connected write(serial: 0, data: _env) end
resolve_controller(controller)
click to toggle source
# File lib/appril/rtcp_controller.rb, line 78 def resolve_controller controller ::RocketIO.controllers.find {|c| c.name == controller} end
write(data)
click to toggle source
# File lib/appril/rtcp_controller.rb, line 86 def write data @socket.send_data(data.to_json) end