class OldGameSpyQuery::ServerData

Public Class Methods

new(address = "hostname:port") click to toggle source
# File lib/old_gamespy_query/server_data.rb, line 3
def initialize(address = "hostname:port")
  @address = address
  @data = []
end

Public Instance Methods

data() click to toggle source
# File lib/old_gamespy_query/server_data.rb, line 55
def data
  @gamespy_query
end
get_server_data(request = "status") click to toggle source
# File lib/old_gamespy_query/server_data.rb, line 8
def get_server_data(request = "status")
  case request
  when 'status'
  when 'players'
  when 'rules'
  when 'info'
  else
    raise "#{self.class}: can't parse \\#{request}\\"
  end

  retrieve_data(request)

  if @data.count >= 2 # Received multiple packets
    @gamespy_query = OldGameSpyQuery::Parser.new(@data, request, true).data
  else
    @gamespy_query = OldGameSpyQuery::Parser.new(@data, request).data
  end

  return data
end
retrieve_data(request) click to toggle source
# File lib/old_gamespy_query/server_data.rb, line 29
def retrieve_data(request)
  addr = @address.split(':')
  @socket = UDPSocket.new
  @socket.connect("#{addr[0]}", addr[1].to_i)

  begin
    timeout(8) do
      @socket.send("\\#{request}\\", 0)
      loop do
        data = @socket.recvfrom(4096)
        _data = data[0].sub("\\final\\", '')
        a = data.dup
        a[0] = _data
        @data << a

        if data[0].include?("\\final\\")
          break
        end
      end
    end

  rescue Timeout::Error
    raise Timeout::Error, "#{self.class}: The Server At '#{@address}' Did Not Respond In Time (Within 5 Seconds)"
  end
end