Princip fungování serveru (MaNGOS)
Z WoWResource Wiki
Principiální zapojení serveru a uživatele:
ISP, ISP#2, Cloud - představuje poskytovatele internetu a internet jako takový, jeho činnost zde není rozebírána (slouže pouze pro naznačení)
Server obsahuje pro klienta dvě podstatné části a to realm server (realmd) a world server (mangosd), princip připojení a komunikace:
Značka "" znamená odeslání dat, "
" znamená příjem dat od serveru
- Klient se spustí, vyhledá v souboru realmlist.wtf adresu svého realm serveru a připojí se na něj (pokud není uveden port je bráno standardně 3724)
AUTH_LOGON_CHALLENGE (obsahující jméno účtu, verzi klienta, ip adresu,...)
- Server provádí kontrolu IP adresy, účtu (zda-li není zablokován) a odesíla údaje potřebné k autorizaci podle protokolu SRP6
AUTH_LOGIN_CHALLENGE
- Klient provádí kalkulace SRP6 login protokolu a odesílá
AUTH_LOGON_PROOF
- Server provádí kalkulace SRP6 a pokud je shoda uloží se do databáze `sessionkey` a je odesláno
AUTH_LOGON_PROOF (success)
- Po úspěšném přihlášení do realm serveru klient požádá o seznam world serverů (realmlist)
REALM_LIST
- Server vypracuje seznam realmů a odešle jej klientovi
REALM_LIST
- Uživatel si vybere realm nebo je vybrán poslední použitý a klient se odpojí od realm serveru, vytváří připojení k world serveru
- Server přijme připojení a odesílá jako první data
SMSG_AUTH_CHALLENGE
- Došlý packet obsahuje server_seed, na jeho základě je ze sessionkey (domluveném při autorizaci s realm serverem) vytvořen hash a odeslán serveru
CMSG_AUTH_SESSION
- Server provede zbylé kontrolní součty a porovnává je s klientovými, pokud je vše v pořádku je odeslán packet SMSG_AUTH_RESPONSE a inicializováno kryptování hlaviček packetů (data kryptována nejsou, pouze hlavička obsahující Opcode a velikost dat)
SMSG_AUTH_RESPONSE
- Klient aktivuje kryptování a odesílá
CMSG_CHAR_ENUM
- Server vytvoří seznam hráčových postav na serveru a odešle jej
CMSG_CHAR_ENUM
- Hráč vybere postavu a přihlásí se s ní do hry, je odeslán packet obsahující GUID postavy
CMSG_PLAYER_LOGIN
...
Klient jako takový nikdy nekomunikuje s MySQL serverem, není žádoucí nechávat jeho port odkrytý, pokud to neděláte úmyslně (vzdálená správa) Tyto informace se od jiných emulátorů mohou odlišovat způsobem komunikace world a realm serveru. MaNGOS komunikuje pouze skrz data v databázi. Ascent skrze speciální socket, WoWEmu mělo realm i world server v jednom.