class SocketClientBase

Attributes

callback_on_disconnect[RW]
ip[R]
player[RW]
should_disconnect_session[RW]

use for disconnect_inactive_players and on_application_exit

time_last_request[R]

Properties

Public Class Methods

manager_remote() click to toggle source
# File lib/mrpin/core/remote/socket/base/socket_client_base.rb, line 13
def self.manager_remote
  @manager_remote
end
manager_remote=(value) click to toggle source

static fields

# File lib/mrpin/core/remote/socket/base/socket_client_base.rb, line 8
def self.manager_remote=(value)
  @manager_remote = value
end

Public Instance Methods

get_requests() click to toggle source
# File lib/mrpin/core/remote/socket/base/socket_client_base.rb, line 120
def get_requests
  result = []

  return result unless @is_online

  @requests_locker.synchronize do
    begin

      unless @data_buffer.empty?
        deserialize_data = AMF::Root.deserialize(@data_buffer)
        result           = deserialize_data[:objects]
        @data_buffer     = deserialize_data[:incomplete_objects] || ''
      end

    rescue Exception => e
      on_get_requests_error(e)
    end #begin/rescue
  end #synchronize

  result
end
is_online?() click to toggle source
# File lib/mrpin/core/remote/socket/base/socket_client_base.rb, line 31
def is_online?
  @is_online
end
post_init() click to toggle source

default constructor

# File lib/mrpin/core/remote/socket/base/socket_client_base.rb, line 66
def post_init
  @logger = AppInfo.instance.logger

  @requests_locker = Mutex.new

  @is_online = true

  @time_last_request = Time.now.to_i

  @should_disconnect_session = true

  @manager_remote = self.class.manager_remote
  @manager_remote.on_client_connected(self)

  @data_buffer = ''

  @player                 = nil
  @callback_on_disconnect = nil

  init_ip

  nil
end
receive_data(data) click to toggle source
# File lib/mrpin/core/remote/socket/base/socket_client_base.rb, line 107
def receive_data(data)
  @time_last_request = Time.now.to_i

  @requests_locker.synchronize do
    @data_buffer += data
  end

  @manager_remote.handle_data_from(self)

  nil
end
report_about_sent_request(value) click to toggle source
# File lib/mrpin/core/remote/socket/base/socket_client_base.rb, line 158
def report_about_sent_request(value)
  value.report_log("sent\t\t") if value.respond_to?(:report_log)

  nil
end
send_raw_data(raw_data) click to toggle source
# File lib/mrpin/core/remote/socket/base/socket_client_base.rb, line 172
def send_raw_data(raw_data)
  send_data(raw_data)
end
send_response(response_obj) click to toggle source
# File lib/mrpin/core/remote/socket/base/socket_client_base.rb, line 144
def send_response(response_obj)
  return unless @is_online

  report_about_sent_request(response_obj)

  response = AMF::Root.serialize(response_obj)

  send_data(response)

  nil #for prevent return other value
end
send_response_error(request_id, description = nil) click to toggle source
# File lib/mrpin/core/remote/socket/base/socket_client_base.rb, line 184
def send_response_error(request_id, description = nil)
  response             = Api::ResponseError.new(request_id)
  response.description = description

  send_response(response)
end
send_response_ok(request_id) click to toggle source
# File lib/mrpin/core/remote/socket/base/socket_client_base.rb, line 177
def send_response_ok(request_id)
  response = Api::ResponseOk.new(request_id)

  send_response(response)
end
unbind() click to toggle source
# File lib/mrpin/core/remote/socket/base/socket_client_base.rb, line 192
def unbind
  on_connection_closed

  nil
end

Protected Instance Methods

init_ip() click to toggle source
# File lib/mrpin/core/remote/socket/base/socket_client_base.rb, line 91
def init_ip
  init_ip_internal(get_peername)

  nil
end
init_ip_internal(peername) click to toggle source
# File lib/mrpin/core/remote/socket/base/socket_client_base.rb, line 98
def init_ip_internal(peername)
  @ip = Socket.unpack_sockaddr_in(peername).last rescue '0.0.0.0'

  @logger.info "connection opened. ip: #{@ip}"

  nil
end
on_connection_closed() click to toggle source
# File lib/mrpin/core/remote/socket/base/socket_client_base.rb, line 45
def on_connection_closed
  @is_online = false

  @logger.info "connection closed. ip: #{@ip}"

  @manager_remote.on_client_disconnected(self) if @should_disconnect_session

  unless @callback_on_disconnect.nil?
    @callback_on_disconnect.call
    @callback_on_disconnect = nil
  end

  nil
end
on_get_requests_error(e) click to toggle source

Events

# File lib/mrpin/core/remote/socket/base/socket_client_base.rb, line 40
def on_get_requests_error(e)
  AppInfo.instance.on_server_error("Error on get_requests #{e}", e)
end