public async Task <IEnumerable <Server> > GetServers( MasterServerRegion region = MasterServerRegion.All, params MasterServerFilter[] masterServerFilters) { var servers = new List <Server>(); using (var client = new UdpClient(new IPEndPoint(IPAddress.Any, 0))) { client.Connect(_steamSteamIpAddress, _steamSteamPort); string thisServer = null; while (thisServer != FIRST_AND_LAST_SERVER) { var requestPacket = CreateRequestPacket(thisServer ?? FIRST_AND_LAST_SERVER, region, masterServerFilters); await client.SendAsync(requestPacket, requestPacket.Length); var response = await client.ReceiveAsync(); var responseData = response.Buffer.ToList(); for (int i = HEADER_BYTES_LENGTH; i < responseData.Count; i++) { var ip = string.Join(".", responseData.GetRange(i, 4).ToArray()); int port = responseData[i + 4] << 8 | responseData[i + 5]; thisServer = string.Format("{0}:{1}", ip, port); if (thisServer != FIRST_AND_LAST_SERVER) { servers.Add(new Server(new IPEndPoint(IPAddress.Parse(ip), port))); } i += 5; } } } return(servers); }
private static byte[] CreateRequestPacket(string ipAddress, MasterServerRegion region, IEnumerable<MasterServerFilter> filters) { var buffer = new List<byte> { 0x31, (byte)region }; buffer.AddRange(System.Text.Encoding.ASCII.GetBytes(ipAddress)); buffer.Add(0x00); var filtersString = string.Join("", filters.Select(x => x.Key + "\\" + x.Value)); buffer.AddRange(System.Text.Encoding.ASCII.GetBytes(filtersString)); return buffer.ToArray(); }
private static byte[] GetRequest(IPEndPoint lastServerEndPoint, MasterServerRegion region, IEnumerable <IFilter> filters) { var packet = new BufferBuilder(); packet.WriteEnum(MasterServerQueryPacketType.ServerListRequest); packet.WriteEnum(region); packet.WriteString(lastServerEndPoint?.ToString() ?? "0.0.0.0:0"); packet.WriteString(filters.GetFilterCollectionString()); return(packet.ToArray()); }
private static byte[] GetRequest(IPEndPoint lastServerEndPoint, MasterServerRegion region, IEnumerable<IFilter> filters) { var packet = new BufferBuilder(); packet.WriteEnum(MasterServerQueryPacketType.ServerListRequest); packet.WriteEnum(region); packet.WriteString(lastServerEndPoint?.ToString() ?? "0.0.0.0:0"); packet.WriteString(filters.GetFilterCollectionString()); return packet.ToArray(); }
private static byte[] CreateRequestPacket(string ipAddress, MasterServerRegion region, IEnumerable <MasterServerFilter> filters) { var buffer = new List <byte> { 0x31, (byte)region }; buffer.AddRange(System.Text.Encoding.ASCII.GetBytes(ipAddress)); buffer.Add(0x00); var filtersString = string.Join("", filters.Select(x => x.Key + "\\" + x.Value)); buffer.AddRange(System.Text.Encoding.ASCII.GetBytes(filtersString)); return(buffer.ToArray()); }
public IEnumerable <IGameServer> GetServersLazy(MasterServerRegion region, params IFilter[] filters) { return(GetServersLazy(new MasterServerRequest(region, filters))); }
public async Task <IEnumerable <IGameServer> > GetServersAsync(MasterServerRegion region, params IFilter[] filters) { return(await GetServersAsync(new MasterServerRequest(region, filters))); }
public MasterServerRequest(MasterServerRegion region, params IFilter[] filters) { Region = region; Filters = filters; }
public async Task<IEnumerable<IGameServer>> GetServersAsync(MasterServerRegion region, params IFilter[] filters) { return await GetServersAsync(new MasterServerRequest(region, filters)); }
public async Task<IEnumerable<Server>> GetServers( MasterServerRegion region = MasterServerRegion.All, params MasterServerFilter[] masterServerFilters) { var servers = new List<Server>(); using (var client = new UdpClient(new IPEndPoint(IPAddress.Any, 0))) { client.Connect(_steamSteamIpAddress, _steamSteamPort); string thisServer = null; while (thisServer != FIRST_AND_LAST_SERVER) { var requestPacket = CreateRequestPacket(thisServer ?? FIRST_AND_LAST_SERVER, region, masterServerFilters); await client.SendAsync(requestPacket, requestPacket.Length); var response = await client.ReceiveAsync(); var responseData = response.Buffer.ToList(); for (int i = HEADER_BYTES_LENGTH; i < responseData.Count; i++) { var ip = string.Join(".", responseData.GetRange(i, 4).ToArray()); int port = responseData[i + 4] << 8 | responseData[i + 5]; thisServer = string.Format("{0}:{1}", ip, port); if (thisServer != FIRST_AND_LAST_SERVER) { servers.Add(new Server(new IPEndPoint(IPAddress.Parse(ip), port))); } i += 5; } } } return servers; }