An Objective-C implementation of the Source Engine Query Protocol for querying game servers and the Valve Master Server.
Based on the Valve Developer Wiki documentation.
Only Valve games were tested.
- Source Engine Games: Half-Life 2, Team Fortress 2, Counter-Strike: Source, Garry's Mod, Left 4 Dead 2, etc.
- GoldSource Engine Games: Half-Life 1, Counter-Strike 1.6, Team Fortress Classic, Day of Defeat, etc.
Copy all .h
and .m
files to your project. Or use git submodules.
In examples/
you can find a few code examples:
- 01_simple_master_server_query.m - Basic master server usage
- 02_master_server_filtering.m - Some filtering techniques
- 03_ricochet_server_details.m - Server info + player lists
cd examples
make run1 # Runs "01_simple_master_server_query"
make run2 # Runs "02_master_server_filtering"
make run3 # Runs "03_ricochet_server_details"
SQGameDirHalfLife // Half-Life 1
SQGameDirCounterStrike // Counter-Strike 1.6
SQGameDirTeamFortressClassic // Team Fortress Classic
SQGameDirDayOfDefeat // Day of Defeat
SQGameDirCounterStrikeSource // Counter-Strike: Source
SQGameDirTeamFortress2 // Team Fortress 2
SQGameDirHalfLife2Deathmatch // Half-Life 2: Deathmatch
SQGameDirGarrysMod // Garry's Mod
SQGameDirLeft4Dead2 // Left 4 Dead 2
SQGameDirRicochet // Ricochet
SQRegionUSEastCoast // US East Coast
SQRegionUSWestCoast // US West Coast
SQRegionSouthAmerica // South America
SQRegionEurope // Europe
SQRegionAsia // Asia
SQRegionAustralia // Australia
SQRegionMiddleEast // Middle East
SQRegionAfrica // Africa
SQRegionRestOfWorld // Worldwide
filterWithGameDir:
- Specific game/mod directoryfilterWithAppID:
- Steam Application IDfilterWithMap:
- Specific map namefilterDedicatedOnly
- Dedicated servers onlyfilterSecureOnly
- VAC-secured servers onlyfilterNonEmpty
- Non-empty serversfilterNonFull
- Non-full serversfilterNoPassword
- Password-free serversfilterLinuxOnly
- Linux servers onlyfilterByHostname:
- Hostname pattern matching (supports wildcards)
SourceQuery *query = [[SourceQuery alloc] init];
if ([query connectWithAddress:@"127.0.0.1" port:27015 timeout:3 engine:SQEngineSource]) {
if ([query setRconPassword:@"your_rcon_password"]) {
NSString *response = [query rcon:@"status"];
NSLog(@"RCON Response: %@", response);
}
[query disconnect];
}
- Valve Developer Wiki - Server Queries
- Master Server Query Protocol
- PHP-Source-Query by xPaw (original inspiration)