module ManagerRemoteSocketHandle
Public Instance Methods
handle_data_from(session)
click to toggle source
# File lib/mrpin/core/remote/socket/base/extensions/manager_remote_socket_handle.rb, line 146 def handle_data_from(session) @sessions_with_requests_locker.synchronize do @sessions_with_requests << session end nil end
requests_pending()
click to toggle source
properties
# File lib/mrpin/core/remote/socket/base/extensions/manager_remote_socket_handle.rb, line 8 def requests_pending result = 0 @sessions_with_requests_locker.synchronize do result = @sessions_with_requests.size end result end
Protected Instance Methods
check_request_class(request)
click to toggle source
# File lib/mrpin/core/remote/socket/base/extensions/manager_remote_socket_handle.rb, line 133 def check_request_class(request) return if request.is_a?(Api::RequestBase) if request.is_a?(AMF::HashWithType) assert(false, "You forgot register request class #{request.class_type}") else assert(false, "Unsupported request class #{request.class}") end nil end
create_handler(index)
click to toggle source
# File lib/mrpin/core/remote/socket/base/extensions/manager_remote_socket_handle.rb, line 46 def create_handler(index) result = ThreadWithTask.new(0.01, "thread_remote_handler_#{index}", 0.01) result.run do session = nil @sessions_with_requests_locker.synchronize do session = @sessions_with_requests.shift end next if session.nil? requests = session.get_requests requests.each do |request| if Rails.env.development? request.report_log("received\t") if request.respond_to?(:report_log) end try_handle_request(session, request) end #synchronize nil #for prevent return other value end #thread result end
on_request_handler_is_nil(session, request, request_id)
click to toggle source
events
# File lib/mrpin/core/remote/socket/base/extensions/manager_remote_socket_handle.rb, line 23 def on_request_handler_is_nil(session, request, request_id) error = "can't find handler for request: #{request.class}" AppInfo.instance.on_server_error(error) session.send_response_error(request_id, error) nil end
try_handle_request(session, request)
click to toggle source
# File lib/mrpin/core/remote/socket/base/extensions/manager_remote_socket_handle.rb, line 79 def try_handle_request(session, request) if request.nil? AppInfo.instance.on_server_error('request should be non nil') return end begin handler = @handlers_map[request.class] if handler.nil? #something wrong request_id = -1 if request.is_a? AMF::HashWithType request_id = request[:request_id] @logger.warn "you forgot register class #{request.class_type}" elsif request.respond_to?(:request_id) request_id = request.request_id end on_request_handler_is_nil(session, request, request_id) else #just handle request handler.handle_request(session, request) handler.post_handle(Time.now) end rescue Exception => e player_id = nil if session.respond_to?(:player) && !session.player.nil? player_id = session.player.id end if player_id.nil? player_id = request.player_id if request.respond_to?(:player_id) end AppInfo.instance.on_server_error(e.to_s, e, request, player_id) request_id = request.respond_to?(:request_id) ? request.request_id : -1 #send error if can't handle session.send_response_error(request_id, EStringTypeBase::EST_ERROR_UNKNOWN) end nil end
Private Instance Methods
init_handle()
click to toggle source
methods
# File lib/mrpin/core/remote/socket/base/extensions/manager_remote_socket_handle.rb, line 38 def init_handle @sessions_with_requests = [] @sessions_with_requests_locker = Mutex.new nil end