rendered paste bodyusing System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using System.Net;
using System.Net.Sockets;
namespace SourceQueryConsole
{
class Program
{
static bool Continue = true;
static string Ret = "";
static void QueryServer( object data )
{
Hashtable h = ( Hashtable )data;
string Server; int Port;
Server = ( string )h[ "host" ];
Port = ( int )h[ "port" ];
UdpClient c = new UdpClient( );
try
{
c.Connect( Server, Port );
byte[ ] bytes = { 0xFF, 0xFF, 0xFF, 0xFF, 0x54, 0x53, 0x6F, 0x75, 0x72, 0x63, 0x65, 0x20, 0x45, 0x6E, 0x67, 0x69, 0x6E, 0x65, 0x20, 0x51, 0x75, 0x65, 0x72, 0x79, 0x00 };
c.Send( bytes, bytes.Length );
IPEndPoint ip = new IPEndPoint( IPAddress.Any, 0 );
byte[ ] recv = c.Receive( ref ip );
string recvStr = Encoding.ASCII.GetString( recv ).Remove( 0, 6 );
string[ ] tmp = recvStr.Split( '\0' );
int len = 0;
for ( int i = 0; i < 6; i++ )
{
len += tmp[ i ].Length;
}
len += 6;
string hostname = tmp[ 0 ];
string map = tmp[ 1 ];
string game = tmp[ 3 ];
string players = recv[ len ].ToString( );
string maxplayers = recv[ len + 1 ].ToString( );
c.Close( );
Ret = "Name: " + hostname + ".\nMap: " + map + ".\nGame: " + game + ".\nPlayers/Maxplayers: " + players + "/" + maxplayers + ".";
Continue = false;
}
catch ( Exception ex )
{
Console.WriteLine( "Unable to connect." );
Continue = false;
}
}
static void Main( string[ ] args )
{
Console.Write( "Enter the server followed by the port(SERVER:PORT): " );
string Read = Console.ReadLine( );
int colon = Read.IndexOf( ':' );
int port = 27015;
if ( colon != -1 )
port = Convert.ToInt32( Read.Substring( colon + 1 ) );
Hashtable pass = new Hashtable( );
pass[ "host" ] = Read.Substring( 0, colon );
pass[ "port" ] = port;
Thread th = new Thread( QueryServer );
th.Start( pass );
while ( Continue ) { }
th.Abort( );
if ( Ret != "" )
Console.WriteLine( Ret );
else
Console.WriteLine( "Something went wrong." );
Console.Read( );
}
}
}