ПредишенСледващото

Работете с клиента

Клиентът, от своя страна, не е толкова сложно, колкото на сървъра. Той обикновено се използва само две съобщения на рецепцията на данни и за прекратяване на сесията, както и определя и следи за една връзка (на сървъра).

Основното е, че добавянето приложението на клиента трябва да се настройват параметрите на играча в горелката може да ги получи. Монтаж информация за играча е да попълните съответния DPN_PLAYER_INFO данни структура и след това се обадите функция IDirectPlay8Client :: SetClientInfo.

Интересувате ли се от само няколко полета DPN_PLAYER_INFO структура - особено pwszName. Unicode низ, съдържащ името на играча, който искате да използвате. Вие трябва да почистите устройството, задайте dwSize. присвоява стойност на DPNINFO_NAME областта dwInfoFlags | DPNINFO_DATA и да зададете име на играча.

Тук е прототип функции IDirectPlay8Client :: SetClientInfo:

Както вече споменахме, се използва същата молба GUID за клиента и сървъра, така че те могат да се уважават взаимно. Ако не направите това - една от основните причини, поради които мрежови приложения не могат да се свържат, така че бъдете сигурни, че заявленията са едно и също GUID.

Сега клиентът е готов да се установи връзка, но сега всичко е малко по-различно. Той използва функция IDirectPlay8Client :: Connect. и това е прототипът на тази опашата лъжа:

Аз казах, че функцията Свържете огромен, но повечето от аргументите, които вече са описани в предишния раздел "Работа със сървъра." Най-очевидната разлика - добавяне pDeviceInfo аргумент. е предмет на IDirectPlay8Address. който се състои от местната устройство, което се използва за установяване на връзката.

При използване на асинхронни връзка, веднага се контролира възвръщаемост, и вие трябва да изчакате DPN_MSGID_CONNECT_COMPLETE мнения. за успешно връзка със сървъра. В синхронен функция за управление на връзката връща само след връзката, или когато се появи грешка.

Сега, нека да направим първата TCP / IP устройство в системата и да го дам на тази функция, се използва метод, синхронна връзка:

Изпращане и получаване на съобщения

Получаване на съобщения от страна на клиента е идентична с тяхната подготовка от страна на сървъра, така че ви е грижа за тях във функцията съобщение манипулатор. Що се отнася до превоза, това е работа функция IDirectPlay8Client :: Изпрати:

Вие сте използвали тези аргументи, вижте "Изпращане на ЛС сървър", така че аз няма да ги опише отново. Вместо това, аз ще дам един пример за проектиране на информационния пакет игра, която се изпраща на сървъра, чрез клиент обект Изпрати функция.

Първи Player ID

След установяване на връзка със сървъра, идва време, когато клиентът ще трябва да получите достъп до своята самоличност (тази ситуация вие ще видите в глава 15, където клиентът следи играчи от техния ID). За да получите идентификатор играч клиент трябва да се анализира съобщението за създаване на връзка (DPN_MSGID_CONNECT_COMPLETE). Това съобщение се използва следната структура на данните, която съдържа важна информация за даден клиент връзка и сървър:

Сега вие се интересувате от само една част от информацията - dpnidLocal област. който включва идентификатор местен играч. Сега, въпреки че останалата част на информация и полезни, ние нямаме нищо общо с него. В действителност, ми липсва всичко това и да се съсредоточи върху dpnidLocal.

В глава 15 ще видите, че при свързване към сървъра си магазини за приложения на клиента стойността dpnidLocal. да се използва, за да говорят за себе си. Причината за позовавайки се на себе си в това, че клиентът трябва да съхранява информация за всеки свързан клиент - не забравяйте, аз казах, че самоличността на играча е единственият реален начин да се разграничат един клиент от друг.

база Сега нека знанието ще се напълни още една част от информацията, и да видим как да завърши започната сесия.

Пусков клиент на сесията

Когато дойде време за прекъсване на връзката на клиента от сесията, трябва изрично да уведоми DirectPlay, така че са взети необходимите мерки за прекъсване на връзката. Обработен от клиентския прекъснете функция сесия IDirectPlay8Client на :: Close:

Свързани статии

Подкрепете проекта - споделете линка, благодаря!