public void TestFakePlayerServerThrowsExceptionWithIpEndpoint()
 {
     Assert.Throws(typeof(SourceServerException), () => {
         SourceServerQuery query = new SourceServerQuery();
         //127.0.0.2 set to stop loopback potentially resolving and failing test
         query.Players(new IPEndPoint(IPAddress.Parse("127.0.0.2"), 2303));
     });
 }
 public void TestFakeServerThrowsExceptionWithStringIp()
 {
     Assert.Throws(typeof(SourceServerException), () => {
         SourceServerQuery query = new SourceServerQuery();
         //127.0.0.2 set to stop loopback potentially resolving and failing test
         query.Server("127.0.0.2", 2303);
     });
 }
Ejemplo n.º 3
0
 public async Task Test1()
 {
     SharedSupport.Init();
     var serverAddress = new ServerAddress(IPAddress.Parse("37.220.18.218"), 27016);
     var query         = new SourceServerQuery(serverAddress, "dayz",
                                               new SourceQueryParser());
     await
     query.UpdateAsync(new ServerQueryState {
         Server = new ArmaServer(A.Fake <Arma3Game>(), serverAddress)
     });
 }
        public async Task ServerInfo()
        {
            var mq      = new SourceMasterQuery("dayz");
            var servers = await mq.GetParsedServers(false, 200).ConfigureAwait(false);

            //TODO: not all servers returned will respond, allow timeout or verify good servers?
            servers = servers.OrderBy(x => Guid.NewGuid()).Take(3);
            foreach (var d in servers)
            {
                var split = d.Settings["address"].Split(':');
                var sq    = new SourceServerQuery(new ServerAddress(IPAddress.Parse(split[0]), Convert.ToInt32(split[1])),
                                                  "dayz", new SourceQueryParser());
                var state = new ServerQueryState {
                    Server = A.Fake <Server>()
                };
                await sq.UpdateAsync(state).ConfigureAwait(false);

                state.Exception.Should().BeNull();
                state.Success.Should().BeTrue();
            }
        }
Ejemplo n.º 5
0
 /// <summary>
 /// If this server responds to source engine style queries, we'll be able to get a list of rules here
 /// </summary>
 public async Task <Dictionary <string, string> > QueryRulesAsync()
 {
     return(await SourceServerQuery.GetRules(this));
 }
Ejemplo n.º 6
0
        // MouseUp action on a server row
        private void ServerGrid_Click(object sender, EventArgs e)
        {
            Server server = (Server)ServerGrid.SelectedItem;

            // Don't want to try to query the fake servers CCG uses as group headings
            if (!server.Name.StartsWith("---"))
            {
                int port = Convert.ToInt32(server.SPort);

                // Arma2 servers respond to Source server queries
                SourceServerQuery  query = new SourceServerQuery(server.IP, port);
                ServerInfoResponse sr    = query.GetServerInformation();
                PlayersResponse    pr    = query.GetPlayerList();

                // Slide out details pane
                serverDetails.IsOpen = true;

                // If the server responds with a name, let's go
                // Actually I don't think this works - the source query lib returns "N/A (Timed out)" instead of null
                if (sr.name != null)
                {
                    // Populate the details pane with, ya know, details
                    serverDetails.Header      = server.Name;
                    fly_serverName.Content    = stripUni(sr.name);
                    fly_serverName.ToolTip    = stripUni(sr.name);
                    fly_serverPlayers.Content = "Players: " + sr.players.ToString() + "/" + sr.maxplayers.ToString();
                    fly_serverIP.Content      = server.FullIP;
                    fly_serverVer.Content     = "v" + stripUni(sr.version);
                    fly_serverGame.Content    = "Gamemode: " + stripUni(sr.game);
                    if (server.Mods != "")
                    {
                        fly_serverMods.Content = "Mods: " + server.Mods;
                        fly_serverMods.ToolTip = server.Mods;
                    }
                    else
                    {
                        fly_serverMods.Visibility = System.Windows.Visibility.Hidden;
                    }

                    // Don't need to show a player list for an empty server
                    if (sr.players > 0)
                    {
                        // Modified SourceQuery Library for larger buffer size.
                        // Previously returned null (SocketException) for >~ 51 players
                        try
                        {
                            fly_playerList.Items.Clear();
                            fly_playerList.Visibility = System.Windows.Visibility.Visible;
                            foreach (var player in pr.players)
                            {
                                fly_playerList.Items.Add(stripUni(player.name));
                            }
                        }
                        catch (NullReferenceException ex)
                        {
                            fly_serverPlayers.Content += " (Error Reading Players)";
                            fly_playerList.Visibility  = System.Windows.Visibility.Hidden;
                        }
                    }
                    else
                    {
                        fly_playerList.Visibility = System.Windows.Visibility.Hidden;
                    }
                }

                // Again, this probably won't work because query doesn't return null if server doesn't respond
                else
                {
                    fly_serverName.Content = "Error querying server, possibly offline.";
                }
            }
        }