public static ServerRulesResult Parse(byte[] bytes) { var result = new ServerRulesResult(); var parser = new ResponseParser(bytes); parser.CurrentPosition += 7; while (parser.BytesLeft) { result.Add(parser.GetStringToTermination(), parser.GetStringToTermination()); } return(result); }
public ServerRulesResult GetServerRulesSync(GetServerInfoSettings settings) { var localEndpoint = new IPEndPoint(IPAddress.Any, 0); using (var client = new UdpClient(localEndpoint)) { client.Client.ReceiveTimeout = settings.ReceiveTimeout; client.Client.SendTimeout = settings.SendTimeout; client.Connect(EndPoint); var requestPacket = new List <byte>(); requestPacket.AddRange(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0x56 }); requestPacket.AddRange(BitConverter.GetBytes(-1)); client.Send(requestPacket.ToArray(), requestPacket.ToArray().Length); var responseData = client.Receive(ref localEndpoint); requestPacket.Clear(); requestPacket.AddRange(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0x56 }); requestPacket.AddRange(responseData.Skip(5).Take(4)); client.Send(requestPacket.ToArray(), requestPacket.ToArray().Length); responseData = client.Receive(ref localEndpoint); return(ServerRulesResult.Parse(responseData)); } }