Skip to content

Master Server Query Protocol

Yunus Emre edited this page Apr 20, 2025 · 1 revision

All properties and methods are XML documented. For now, nor and nand filter operators are not implemented yet.

All asynchronous methods accept the cancellationToken parameter.

Provide an IP address via either constructor parameters or assign manually. Changes on IpEndPoint and timeout properties handled like GameServer class. For more information, visit server queries wiki.

using var masterServer = new MasterServer(MasterServerEndPoint.GoldSrc);

using var masterServer = new MasterServer();
masterServer.IpEndPoint = MasterServerEndPoint.GoldSrc.IpEndPoint;

Get Servers

using var masterServer = new MasterServer(MasterServerEndPoint.GoldSrc);

await foreach (var masterServerResponse in masterServer.GetServersAsync())
{
    Console.WriteLine(masterServerResponse);
}

Apply Filters

Either use object initializer or the builder class;

var masterServerQueryFilters = new MasterServerQueryFiltersBuilder()
    .WithServerName("*TURK*")
    .WithAppId(10)
    .Build();

var masterServerQueryFilters = new MasterServerQueryFilters
{
    ServerName = "*TURK*",
    AppId = 10
};

await foreach (var masterServerResponse in masterServer.GetServersAsync(masterServerQueryFilters))
{
    Console.WriteLine(masterServerResponse);
}

Apply Region Filter

Default value of the parameter is SteamQueryRegion.All.

var masterServerQueryFilters = new MasterServerQueryFiltersBuilder()
    .WithServerName("*TURK*")
    .WithAppId(10)
    .Build();

await foreach (var masterServerResponse in masterServer.GetServersAsync(masterServerQueryFilters, SteamQueryRegion.Asia))
{
    Console.WriteLine(masterServerResponse);
}

Full Example

Console.OutputEncoding = Encoding.UTF8;

using var masterServer = new MasterServer(MasterServerEndPoint.GoldSrc);

var masterServerQueryFilters = new MasterServerQueryFiltersBuilder()
    .WithServerName("*TURK*")
    .WithAppId(10)
    .Build();

await foreach (var masterServerResponse in masterServer.GetServersAsync(masterServerQueryFilters))
{
    Console.WriteLine(masterServerResponse);

    using var gameServer = new GameServer(masterServerResponse);
    await gameServer.PerformQueryAsync(); // Might want to handle exceptions smartly.

    Console.WriteLine($"Protocol: {gameServer.Information.ProtocolVersion}");
    Console.WriteLine($"Server Name: {gameServer.Information.ServerName}");
    Console.WriteLine($"Folder: {gameServer.Information.Folder}");
    Console.WriteLine($"Game Name: {gameServer.Information.GameName}");
    Console.WriteLine($"Players: {gameServer.Information.OnlinePlayers}/{gameServer.Information.MaxPlayers}");
    Console.WriteLine($"Bots: {gameServer.Information.Bots}");
    Console.WriteLine($"Server Type: {gameServer.Information.ServerType}");
    Console.WriteLine($"Environment: {gameServer.Information.Environment}");
    Console.WriteLine($"Visible: {gameServer.Information.Visible}");
    Console.WriteLine($"VAC Secured: {gameServer.Information.VacSecured}");
    Console.WriteLine($"Version: {gameServer.Information.Version}");

    Console.WriteLine();
}

Clone this wiki locally