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 // RicochetSQRegionUSEastCoast // US East Coast
SQRegionUSWestCoast // US West Coast
SQRegionSouthAmerica // South America
SQRegionEurope // Europe
SQRegionAsia // Asia
SQRegionAustralia // Australia
SQRegionMiddleEast // Middle East
SQRegionAfrica // Africa
SQRegionRestOfWorld // WorldwidefilterWithGameDir:- 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)