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