Click here to Skip to main content
15,878,809 members
Articles / Programming Languages / Visual Basic

Multi-Threaded Game Server Browser

Rate me:
Please Sign up or sign in to vote.
5.00/5 (10 votes)
19 Jun 2009CPOL1 min read 51.6K   2.8K   26   6
A project that allows users to query Source and Half-Life-based master servers and individual servers
Image 1

Introduction

This is a multi-threaded game server browser that supports Source and Half-Life-based games and mods. The main form provides an example of what the engine is currently capable of producing and is a simple stand-alone form. The game server query engine is encapsulated in a .DLL so it can be accessed and used by other projects or on a Windows webserver.  

Background

Full disclosure; the code started with Franz Pentenrieder’s original project (gameserverinfo.aspx) which is now utterly deprecated because none of the protocols work anymore. I used his implementation as a starting point, corrected the Source and Half-Life protocols (after packet compression was introduced) then added master server queries with several different types of filtering to choose from. 

Using the Code

Please reference the original project to understand how I got to this point. But here's some methods to get you started.

A basic game server has been made incredibly simple with the QueryServer() method as shown below:  

VB.NET
' How to get all data about a game server
' The two main types of games supported with this implementation are:
' GameType.Source and GameType.HalfLife
' Use these objects in the QueryServer() method for testing.

Dim Server as GameServer(IP as String, Port as Integer, GameType as Object)
Server.QueryServer() 
VB.NET
' How to display current players and current stats in a listbox:

For Each player As aQueryLib.aQueryLib.Player In Server.Players
	Dim lvItem As New ListViewItem(New String() _
		{GameServer.CleanName(player.Name), player.Score.ToString(), _
		player.Ping.ToString(), player.Time.ToString()})
	Me.lvPlayers.Items.Add(lvItem)
Next 
VB.NET
' How to display game server CVAR results in a listbox:

For Each de As DictionaryEntry In Server.Parameters
	Dim lvItem As New ListViewItem(New String() _
		{de.Key.ToString(), de.Value.ToString()})
	lvParams.Items.Add(lvItem)
Next 
VB.NET
' How to display game server properties in a textbox:

Dim props As PropertyInfo() = server.[GetType]().GetProperties_
	(BindingFlags.[Public] Or BindingFlags.GetField Or BindingFlags.Instance)
	For Each prop As PropertyInfo In props
		Try
			Dim obj As Object = prop.GetValue(server, Nothing)
			If obj.ToString().IndexOf("Collection") <> -1 Then
				Continue For
			End If
                        tbInfos.Text += (prop.Name & " - ") + obj.ToString() _
			& vbCr & vbLf
		Catch generatedExceptionName As TargetInvocationException
		Catch generatedExceptionName As NullReferenceException
		End Try
	Next  

History

I would call Franz Pentenrieder’s original project Version 1 and mine would be Version 2 with a primary focus on Counter-Strike. Code written, optimized and improved by Adam Lawson. 6/17/2009  

Enjoy!!!

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer
United States United States
Adam Lawson is a Sr. Windows Engineer at Blue Shield of California (USA). He has collection of useless papers collecting dust include an MCSE 2k3, MCSD.Net, CCNA, A+, Network+ and a piece of lint he found while doing the laundry. He enjoys speaking proper English, prefers MSSQL over flat files and still plans to earn a million dollars by age 30. That's a tall order considering he is 38 now.

He is also a contributing author for TrainSignal and Windows IT Pro Magazine.

Comments and Discussions

 
GeneralMy vote of 5 Pin
DENSHER15-May-12 13:05
DENSHER15-May-12 13:05 
AnswerPlease update the Library :( Pin
ThomasKorn2-Mar-12 7:43
ThomasKorn2-Mar-12 7:43 
GeneralRe: Please update the Library :( Pin
ThomasKorn2-Mar-12 8:46
ThomasKorn2-Mar-12 8:46 
GeneralRe: Please update the Library :( Pin
Jedrik Ramos6-Aug-12 13:26
Jedrik Ramos6-Aug-12 13:26 
GeneralDll source Pin
shepper8-Jul-10 20:44
shepper8-Jul-10 20:44 
Hello

if is possible can you givr the aQuery.dll source please
I am starting programation and i am very interesting about your dll
thx for advance
GeneralFYI - Project was converted from C# to VB.NET Pin
Greenhorn99922-Jun-09 5:41
Greenhorn99922-Jun-09 5:41 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.