Vítejte na stránkách Asgard's serveru !, přehled novinek
22.09.2008: HL1 Server Queries Protocol Tutorial - 1.část
14:56:11 - Nightly_Falcon - Návody - Komentářů k článku 0
V tomto článku se podíváme na HL1 server query protocol. Pro začátek bych rád všechny seznámil s tím, o čem článek vlastně je formou otázek.
Co je vlastně HL1 server query protocol ?
Je slušností na otázku odpovědět. Servery jsou slušně vychovány a tak vám na vaše otázky o tom, co se na nich děje, rády odpoví. Musíte ale vědět, jak se správně zeptat. Právě server query protocol popisuje, jakou strukturu má otázka a jakou odpověď. Pokud bychom to měli převést na reálnou situaci v životě, tak můžeme přejít k armádě. Velitel zavelí „Vojín, Novák !“ a Novák odpoví „Ano, pane !“. To by se až na určité výjimky ( stejně tak u serveru může nastat výjimka a nikdo neodpoví ) mělo stát vždy. Předem víme, že dotaz musí obsahovat hodnost a za ní jméno vojáka. Odpověď je pak vždy stejná.
Komu je článek určen ?
Samozřejmě každému, kdo se chce dozvědět nové věci. Nicméně primárně je určen lidem, kteří se zajímají o programování nebo spíše již programují a chtěli by zkusit získat informace z CS serverů. V PHP lze implementovat zobrazení stavu serverů ( počet hráčů, mapa atd. ), Java a C++ spíše programy typu HLSW. Článek se přímo nevztahuje k žádnému programovacímu jazyku, protože je čistě na programátorovi, v čem a jak bude komunikaci mezi serverem a clientem implementovat. Nicméně ke konci se možná objeví příklady implementace, ale pouze v Javě.
Jaké znalosti jsou potřeba k využití článku ?
Je určitě třeba mít znalosti o sítích a základní znalost programovacího jazyku, ve kterém chcete aplikaci psát. Co se sítí týče v Javě určitě doporučuji mít přečteno Custom Networking.
Proč se v textu objevují anglické výrazy ?
Často jsem v článku použil pouze anglický výraz. Je to hlavně z toho důvodu, že často jsou tato slova daleko více zažitá v angličtině a jejich překladem vznikají nedorozumnění. Jistě souhlasíte, že překládat engine jako motor není opravdu to pravé.
Jak a proč vznikl článek ?
Článek je částečným přepisem informací z SDK HL 1 ( Software Development Kit ) a SDK Source Docs – Programming – Networking – Server Queries. Zdálo se mi, že dokumentace není moc výstižná a spousta věcí je nejasných. V SDK HL1 chyběly příklady a v SDK Source Docs nebyly všude. Také v českém jazyce neexistuje žádný článek, který by se server queries HL enginu zabýval. Rozhodl jsem se tedy popsat všechna pravidla a u novějšího server query protocol uvést všechny queries i s příklady.
Informace o serverech se získávají pomocí UDP protokolu. Je dána sada příkazů, na které vám server odpoví. U HL1 serverů je situace mírně komplikovaná, protože se v roce 2005 při updatu HL1 enginu query protocol mírně změnil ( viz. newska ). Použity budou překlady textů z Valve Developer Community a SDK HL1. V příkladech jsou použity pipes jako oddělovače ( nemají logický význam "nebo" ).
Použité datové typy v datagramech
Datový typ | Délka |
byte | 8-bits |
short | 16-bits |
long | 32-bits |
float | 32-bits |
integer | 32-bits |
string | variabilní délka ukončená bytem 0x00 |
Protocol
Použity jsou pakety o velikosti 1400 bytes. Jestliže se data požadavku nebo odpovědi nevejdou do jednoho paketu, jsou data rozdělena do více paketů a přidána následující hlavička.
Data | Typ | Komentář |
Type | long | Číslo je -2 (0xFFFFFFFE), což indikuje rozdělení dat do více paketů. |
Request ID | long | Serve přiřadí každému paketu unikátní ID |
Packet Number | byte/short | Spodní čtyři bits reprezentují číslo paketu (2 to 15) a vrchní čtyři bits reprezentují současný packet začínající 0. |
Size of Splits | short | Význam pouze u Source Engine. |
Old server queries
Tento protokol se u serverů používal dříve. Po updatu v roce 2005 se začal používat nový protokol. Starý je však stále na některých serverech funkční popřípadě ho lze zapnout pomocí proměnné sv_enableoldqueries 1 . Všechny servery s tímto protokolem odpovídají datagramy, které jsou složeny ze tří částí. Všechny stringy v datagramech jsou ukončeny bytem s hodnotou 0x00. Na server je potřeba poslat datagram, který začíná čtyřmi bytes s hodnotou 0xFF a query – string, který je samozřejmě převeden na bytes, zakončený byte s hodnotou 0x00. Server pak odpovídá datagramem, který taky začíná 4 bytes s hodnotou 0xFF. Každý datagram, který přijmete má přesně danou strukturu, ta je popsána níže v tabulkách.
Obsah request datagramu
Data | Typ | Komentář |
beginning | 4-bytes | 4 bytes každý s hodnotou -1 (0xFF) |
query | string | Jeden z query stringů uvedený níže ukončený pomocí byte s hodnotou 0x00 |
Query - strings
Název | Query – strings | Komentář |
A2A_ACK | ''ping'' | Slouží pouze k získání odezvy serveru. |
S2A_INFO | ''info'' | Požádá o základní infomace o serveru ( název, mapa, počet připojených atd. ). |
S2A_PLAYER | ''players'' | Požádá o informace o hráčí ( nicknames, kills, time connected ). |
S2A_RULES | ''rules'' | Požádá o informace o pravidlech serveru ( sv_ , mp_ a další proměnné ). |
To je zatím vše. V dalším článku se podíváme na obsah response datagramů u old server queries.
Články byly vytvořeny pouze pro tento portál a všechny informace v nich byly z dostupných zdrojů. Informace obsažené v tomto článku lze volně rozšiřovat. Kopírování celého článku nebo jeho částí bez vědomí autora je zákázáno.
» Jít zpět

