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); }); }
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(); } }
/// <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)); }
// 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."; } } }