Acquirer 0.1 — Gather AA Server Information

Something else for Armagetron? Goody!
Post Reply
User avatar
dlh
Formerly That OS X Guy
Posts: 2035
Joined: Fri Jan 02, 2004 12:05 am
Contact:

Acquirer 0.1 — Gather AA Server Information

Post by dlh »

Acquirer is a Ruby library used to gather server information from individual servers and the master server. All that works in respect to the master server currently is getting a login_accept message — it still needs work. Getting information from individual servers works fine — see the code below or acquirer/bin/server_info.

Darcs repo: darcs get --partial http://generalconsumption.org/armagetronad/acquirer

Code: Select all

require "acquirer"

class ServerInfoReactor < Acquirer::Reactor

  on_id(51, :server_info_reaction)
  
  def server_info_reaction(aamessage, data)
    message = Acquirer::Message.new { |m|
      m.slot(:UnsignedShort, :port)
      m.slot(:String,  :connection_name)
      m.slot(:Integer, :transaction_number)
      m.slot(:String,  :name)
      m.slot(:Integer, :number_clients_online)
      m.slot(:Integer, :network_protocol_version_min)
      m.slot(:Integer, :network_protocol_version_max)
      m.slot(:String,  :version)
      m.slot(:Integer, :number_players_maximum)
      m.slot(:String,  :players_online) { |players| players.split(/\n/) }
      m.slot(:String,  :description)
      m.slot(:String,  :uri)
    }
    message.decode(data)
    @server_info = message
  end
  
  attr_reader :server_info
end

def server_info(server, port=4534)
  server_info_req = Acquirer::AAMessage.new { |m|
    m.slot(:UnsignedShort, :sender_id, 0)
  }
  server_info_req[:id] = 53
  server_info_req[:message_number] = 0
  react = ServerInfoReactor.new
  con = Acquirer::Connection.new(server, port, react)
  con.send(server_info_req)
  con.receive
  react.server_info
end

server = server_info("blah")
puts server[:players_online]
Attachments
acquirer-0.1.tar.gz
(25.68 KiB) Downloaded 372 times
Post Reply