Introducere în DirectPlay
DirectPlay - este decizia Microsoft de a lucra cu rețele. Deși în ultimele câteva versiuni ale DirectPlay supuse la schimbări majore, se pare că versiunea 8 Microsoft a fost capabil de a realiza cu adevărat simplu de utilizat sistem. De fapt, atât de simplu, încât începeți să lucrați cu rețeaua înainte de a ști.
Pentru a utiliza DirectPlay în proiectele dvs., asigurați-vă că pentru a include anteturi și Dplay8.h DPAddr.h, dar, de asemenea, a subliniat aspectul listei de bibliotecă, și DPlay.lib DXGuid.lib.
Știu la ce te gândești - ce face toate aceste lucruri despre versiunea DirectX 8 în carte dedicată utilizării DirectX versiunea 9. Nu-ți face griji, prietenul meu, a decis să părăsească neschimbat versiunea Microsoft 8 interfețe în DirectX versiunea SDK 9 (versiune nouă a interfeței nu există ), astfel încât informațiile pe care le găsiți aici se aplică atât în DirectX 8 și 9 versiuni.
obiecte de rețea
Utilizarea DirectPlay vă oferă acces la cele trei modele de rețea anterioare menționate: client, server și la egal la egal. Fiecare are propriul său obiect de interfață (acestea sunt descrise în Tabelul 5.1), precum și toate oferă funcții similare.
Tabelul 5.1. COM-obiecte DirectPlay
Pe scară largă jocuri de rol este de obicei pentru a lucra în mod eficient necesită utilizarea modelului client / server, așa că nu voi discuta în această carte rețele de la egal la egal. Pentru exemple de utilizare, consultați documentația de DirectX SDK și cărțile listate în Anexa A. Vă recomandăm ca sursă de informații cu privire la utilizarea rețelelor ad-hoc în jocurile cartea Todd Baron „jocuri multiplayer de programare.“
Așa cum am menționat mai devreme, sesiunea - o perioadă în care nodul cap de lucru, sau sunteți conectat la un sistem la distanță. În cazul în care conexiunea se termină, sesiunea este terminată. Fiecare sesiune are proprietăți unice, cum ar fi numele, parola (dacă este necesar), numărul maxim posibil de utilizatori, etc. Pentru mai multe informații despre sesiunile vor fi discutate în secțiunea „Configurarea Session“, mai târziu în acest capitol.
Lucrul cu jucători
În ceea ce privește DirectPlay jucător (jucător) - aceasta este o conexiune separată, vă conectează cu un alt computer din rețea. Pe același computer poate fi câțiva jucători, dar, de obicei, doar unul. De fapt, serverul este, de asemenea, atribuit pentru a identifica player-ul.
Fiecare jucător primește un identificator (ID Player), pe care sistemul utilizează la mesajele de rută singur jucător. Acești identificatori - singura metodă de încredere pentru determinarea jucătorilor, astfel că programul trebuie să țină evidența acestora.
În jocurile de mari pot fi mii de jucători conectați. Pentru a îmbunătăți performanța jucătorilor, unele (sau toate) dintre jucătorii pot fi combinate în grupuri (grupuri). Folosind grupul, vă simplifică ușor de programare, pentru că puteți combina dintr-o dată, mai degrabă decât în mod individual pentru fiecare jucător în grupul de jucători care se află în aceeași locație a jocului (cum ar fi o hartă sau nivel) și trimite datele la grup. (Există mai multe alte motive pentru utilizarea grupurilor, dar acest lucru - una dintre cele mai importante.)
Relația dintre jucători și grupuri sunt prezentate în Fig. 5.5. Nu există restricții privind numărul de jucători dintr-un grup și numărul de grupuri pe care le puteți crea. După cum se vede în Fig. 5.5 Unitate (indicat prin dreptunghiuri) pot fi incluse în alte grupuri (grupuri 1 și 2 fac parte din grupa 3). Vă rugăm să rețineți că jucătorii 7 și 8 sunt izolate din grupul; pentru DirectPlay nu contează intră jucător în grup sau nu.
Fig. 5.5. Opt jucători sunt conectate la sesiunea de jocuri de noroc. Șase jucători sunt un grup (sau două grupe), iar cei doi jucători sunt separați de toate grupurile
Indiferent dacă utilizați un grup sau nu, jucătorii de sistem imediat ce o conexiune poate comunica între ele prin mesaje.
posturi de rețea
Tabelul 5.2. Mesajele standard DirectPlay
Deși semnificația unor mesaje acum ar putea fi nu înțelegi, da o descriere a punctului de pornire. Vom lucra doar cu câteva mesaje, dar acesta este un caz în care mai puțin este mai bine.
Descriere mesaje de rețea DirectPlay și informații asociate pot fi găsite în documentația pentru DirectX SDK. Vă recomandăm crearea de capodopera, ați păstrat documentul deschis la îndemână.
Pentru a primi mesaje de la funcția de apel invers entitate de rețea ar trebui să fie atribuite, care se numește de fiecare dată când sosește un mesaj. Pentru a asigura buna circulație a datelor, această funcție analizează datele în funcție de tipul lor, și efectuează gestionarea revenirea cât mai repede posibil.
Pentru a trimite mesaje, utilizați funcția pentru a trimite entitatea de rețea corespunzătoare (sunt două). Aceste funcții sunt ușor de utilizat și vă oferă mai multe opțiuni de livrare, inclusiv de livrare garantat, criptare securizată, asincron și sincron de livrare.
asincron și sincron
Prima opțiune de livrare va ofera DirectPlay - este sincron sau asincron trimiterea de mesaje. Acest lucru înseamnă că, fie revine sistemului de control pentru a vă după ce a primit comanda pentru a trimite datele (asincron), sau asteapta pana cand datele sunt trimise cu succes (funcționare sincronă).
Care este mai bine? Cel mai probabil, va prefera metoda asincron, deoarece nu întârzie funcționarea sistemului, așa cum se face simultan. De exemplu, dacă doriți să trimiteți cantități mari de date în timp ce încerca să joace jocul, nu doriți să întrerupeți procesul, așteptând până când rețeaua încearcă să transmită informații. Spune-le că doriți să trimiteți, și să permită DirectPlay să facă prelucrarea, iar jucătorul să continue să joace ca și cum nimic nu sa întâmplat.
siguranță
Este groaznic să știe că, în orice moment cineva în rețea poate captura și înregistra datele. Prin urmare, aveți posibilitatea de a cripta mesaje de date, ceea ce face dificil pentru hackeri pentru a citi informații prețioase.
Dezavantajul de livrare în condiții de siguranță este încetini sistemul deoarece datele trebuie să fie criptate înainte de a fi trimise și pentru a descifra după ingestie. Dacă treci informații sensibile, pierderea de timp, nu contează (dar ele rămân importante pentru jocuri).
DirectPlay a construit-in-suport pentru mesagerie securizată. Din fericire, să-l folosească doar setați steagul corespunzător în operațiunea de expediere. Acum, că povara ridicat de pe umeri.
livrare garantat
DirectPlay poate garanta livrarea de mesaje în același mod ca și unele companii de transport garantează livrarea coletelor expediate prin intermediul lor. Doar marca un mesaj ca necesitând livrare garantată, și fiți siguri că DirectPlay va livra la destinația (cu excepția cazului de deconectare), în mod continuu retrimiterea operațiune la o concluzie de succes. Utilizarea de livrare garantat, specificați un steag unic în numita funcție, pe care îl va vedea mai târziu în secțiunea „Trimiterea de mesaje Server“ din acest capitol.
Pentru livrare garantat va trebui să plătească rate. garantate de livrare este prea lent, să-l folosească în situații reale de joc. Metoda de livrare Jocuri folosind UDP (User Datagram Protocol), care nu-i pasa daca datele primite (spre deosebire de metoda de livrare TCP, care garanteaza livrare). S-ar putea crede că acest lucru este o nebunie, dar înțelege situația pentru a vedea ce jocuri sunt foarte des trimise informații actualizate, precum și pierderea unei cantități mici de date din timp în timp este destul de acceptabil.
Reglarea debitului
Uneori, sistemul poate experimenta suprasarcină, încercând să proceseze fluxul de mesaje. Cu toate acestea, există un sistem de control construit în DirectPlay flux de mesaje, care aruncă mesaje cu o prioritate mai mică în coada de așteptare.
Poate Fig. 5.6 ajută la vizualizarea conceptul de utilizare a mecanismului de reglementare. Privind la imagine, imaginați-vă o linie de oameni care așteaptă în fața popular club de noapte. Fiecare persoană este un mesaj individual. și bouncer (mecanism de ajustare) este de a elimina cel mai puțin important din coadă atunci când instituția devine aglomerat.
Fig. 5.6. mecanism de ajustare (bouncer) acceptă sau respinge mesajul (vizitatori), în funcție de importanța lor
DirectPlay fin reglează debitul, astfel încât să nu treuetsya schimba, de obicei, la setările implicite.
De la mic la mare în funcție de bytes
Lumea este foarte mare, toți suntem diferiți, și există situații în care este intermediar necesar. Vorbesc despre bariera lingvistică, în special cu privire la bariera de limbaj de calculator.
DirectPlay vă va introduce în lumea Unicode (dacă nu sunteți familiarizați cu ea). Unicode - acesta este un standard universal, care permite diverse programe și calculatoare pentru a partaja informații. Având în vedere că rețeaua poate fi conectată la o altă rețea, situată oriunde în lume, jucătorii pot trăi în diferite țări și vorbesc limbi diferite.
Deoarece versiunile de Windows din diferite țări sunt ușor diferite, utilizatorul sistemului poate fi configurat pentru a utiliza caractere Unicode. Ca urmare, întregul sistem este construit în jurul DirectPlay folosi caractere Unicode (pentru stocarea fiecare simbol de 16 biți este folosit în loc de 8) și adaptat pentru limbile care folosesc mai mult de 255 de caractere. Am auzit geme, dar permiteți-mi să vă spun că Windows are toate caracteristicile de care aveți nevoie pentru a converti de la un format la alte personaje, astfel încât nimic să vă faceți griji.
Identificarea aplicațiilor GUID
Aplicațiile în rețea la fel de mult ca și de a distinge de la străini? Dă cererea dumneavoastră un număr unic și se lasă să se conecteze cu numai acele aplicații care au același număr. Această problemă specială, desigur GUID (Global unic de identificare), familiare pentru Windows programatori.
La crearea cererii, să ia un moment pentru a atribui un GUID unic și asigurați-vă că toate aplicațiile care se conectează la rețea utilizând aceeași GUID.
Asta e tot ce am vrut să spun acum despre datele trimise. Progresele privind crearea unei entități DirectPlay rețea pentru a trimite și primi date pentru diferite tipuri de obiecte este foarte asemănătoare, astfel încât în cele ce urmează voi lega informații individuale.