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]