T2ServerQuery.PacketParser (T2ServerQuery v0.1.3) View Source
This module does the heavy lifting with parsing a Tribes 2 query response packet.
UDP Packet Anatomy
Info Packet
<<
_header :: size(192),
server_name :: bitstring
>>Status Packet
<<
_header :: size(48),
game_type_length :: little-integer,
game_type :: binary-size(game_type_length),
mission_type_length :: little-integer,
mission_type :: binary-size(mission_type_length),
map_name_length :: little-integer,
map_name :: binary-size(map_name_length),
_skip_a :: size(8),
player_count :: little-integer,
max_player_count :: little-integer,
bot_count :: little-integer,
_skip_b :: size(16),
server_description_length :: little-integer,
server_description :: binary-size(server_description_length),
_skip_c :: size(16),
team_count :: binary-size(1),
rest :: bitstring
>>Notice the _skip_(a|b|c) mappings. I havn't quite figured out what they refer to yet but they don't seem that important. They likely relate to a few server flags like tournament_mode, cpu_speed, is_linux.
Refer to T2ServerQuery.QueryResult for what a typical struct would look like.
Link to this section Summary
Functions
This function expects both an info and status packet to be passed in that is in a Base.encode16 format.
Normally you wouldn't need to run this function manually since it's called in a pipeline from the main T2ServerQuery.query
Link to this section Functions
Specs
init(
{:error, String.t()},
any()
) :: {:error, map()}
init(binary(), binary()) :: {:ok, T2ServerQuery.QueryResult.t()}
This function expects both an info and status packet to be passed in that is in a Base.encode16 format.
Normally you wouldn't need to run this function manually since it's called in a pipeline from the main T2ServerQuery.query