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);
        }
示例#2
0
 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();
 }
示例#3
0
        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());
        }
示例#4
0
        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());
        }
示例#6
0
 public IEnumerable <IGameServer> GetServersLazy(MasterServerRegion region, params IFilter[] filters)
 {
     return(GetServersLazy(new MasterServerRequest(region, filters)));
 }
示例#7
0
 public async Task <IEnumerable <IGameServer> > GetServersAsync(MasterServerRegion region, params IFilter[] filters)
 {
     return(await GetServersAsync(new MasterServerRequest(region, filters)));
 }
示例#8
0
 public MasterServerRequest(MasterServerRegion region, params IFilter[] filters)
 {
     Region  = region;
     Filters = filters;
 }
示例#9
0
 public async Task<IEnumerable<IGameServer>> GetServersAsync(MasterServerRegion region, params IFilter[] filters)
 {
     return await GetServersAsync(new MasterServerRequest(region, filters));
 }
示例#10
0
 public MasterServerRequest(MasterServerRegion region, params IFilter[] filters)
 {
     Region = region;
     Filters = filters;
 }
示例#11
-1
        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;
        }