65.9K
CodeProject 正在变化。 阅读更多。
Home

多线程游戏服务器浏览器

starIconstarIconstarIconstarIconstarIcon

5.00/5 (9投票s)

2009年6月19日

CPOL

1分钟阅读

viewsIcon

54013

downloadIcon

2873

一个允许用户查询 Source 和 Half-Life 类型的主服务器和单个服务器的项目。

引言

这是一个多线程游戏服务器浏览器,支持Source和Half-Life游戏及其模组。主窗体展示了引擎当前的功能,是一个简单的独立窗体。游戏服务器查询引擎被封装在一个.DLL文件中,以便其他项目或Windows Web服务器可以访问和使用它。  

背景

完全披露:代码始于Franz Pentenrieder的原始项目(gameserverinfo.aspx),由于协议不再起作用,该项目现已完全过时。我以他的实现为起点,更正了Source和Half-Life协议(在引入数据包压缩后),然后添加了具有多种不同类型的过滤器的母服务器查询。 

Using the Code

请参考原始项目以了解我是如何达到这一点的。但这里有一些方法可以帮助你入门。

使用下面的QueryServer() 方法,基本游戏服务器变得非常简单:  

' 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() 
' 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 
' 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 
' 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  

历史

我将Franz Pentenrieder的原始项目称为版本1,而我的项目称为版本2,主要关注《反恐精英》。代码由Adam Lawson编写、优化和改进。2009年6月17日  

尽情享受吧!!!

© . All rights reserved.