netlib.narod.ru< Назад | Оглавление | Далее >

Конфигурирование данных сессии

Каждый сетевой объект должен знать о сессии, которую собирается открыть или к которой хочет присоединиться. Эта информация хранится в отдельной структуре:

typedef struct _DPN_APPLICATION_DESC {
     DWORD dwSize;             // Размер структуры
     DWORD dwFlags;            // Флаги сессии
     GUID  guidInstance;       // NULL
     GUID  guidApplication;    // GUID приложения
     DWORD dwMaxPlayers;       // Максимально доступное
                               // количество игроков
     DWORD dwCurrentPlayers;   // Текущее количество игроков
     WCHAR *pwszSessionName;   // Имя сессии
     WCHAR *pwszPassword;      // Пароль сессии (если нужен)
     PVOID pvReservedData;     // Не используется
     DWORD dwReservedDataSize; // Не используется
     PVOID pvApplicationReservedData;     // NULL
     DWORD dwApplicationReservedDataSize; // 0
} DPN_APPLICATION_DESC;

Как я уже сказал, вся информация из структуры DPN_APPLICATION_DESC не требуется, так что мы отдельно обсудим, что надо для каждой сетевой модели.

Данные сессии сервера

Для сервера необходимо задать максимально допустимое количество игроков (если вы хотите установить ограничение), имя сессии и пароль, используемые при регистрации, флаги сессии и GUID приложения.

Чтобы сделать это, очистите структуру (заполнив ее нулями), установите переменную dwSize, и заполните требуемые поля. Для переменной dwFlags вы можете выбрать один из флагов, перечисленных в таблице 5.7.

Таблица 5.7. Флаги сессии



Макрос флага Описание

DPNSESSION_CLIENT_SERVER Это сессия модели клиент/сервер.
DPNSESSION_MIGRATE_HOST Используется в одноранговой модели, включение этого флага заставляет DirectPlay переносить информацию узла на другую систему в случае потери текущего узла.
DPNSESSION_NODPNSVR Запрещает DirectPlay выполнять перечисление вашего приложения с удаленной системы.
DPNSESSION_REQUIREPASSWORD Для подключения удаленная система должна указать правильный пароль.


 

ПРИМЕЧАНИЕ
Если вы не хотите задавать максимально возможное количество игроков, оставьте в этом поле 0. То же самое с паролем; просто не используйте флаг и оставьте поле пароля в покое.

Вот пример установки информации сессии:

// GUID приложения
GUID AppGUID = { 0xede9493e, 0x6ac8, 0x4f15,
               { 0x8d, 0x1, 0x8b, 0x16, 0x32, 0x0, 0xb9, 0x66 } };

// Обнуляем структуру данных сессии и устанавливаем ее размер
DPN_APPLICATION_DESC dpad;

ZeroMemory(&dpad, sizeof(DPN_APPLICATION_DESC));
dpad.dwSize = sizeof(DPN_APPLICATION_DESC);

// Задаем имя и пароль сессии
dpad.pwszSessioName = L"MySession";
dpad.pwszPassword   = L"MyPassword";

// Устанавливаем максимальное количество игроков равным 4
dpad.dwMaximumPlayers = 4;

// Устанавливаем GUID приложения
dpad.guidApplication = AppGUID;

// Устанавливаем флаги модели клиент/сервер и использования пароля
dpad.dwFlags = DPNSESSION_CLIENT_SERVER |
               DPNSESSION_REQUIREPASSWORD;

Данные сессии клиента

Информация, которую надо установить в структуре данных сессии клиента включает имя и пароль сессии, к которой вы хотите подключиться, флаг модели клиент/сервер и GUID приложения. Убедитесь, что указали тот же GUID, что и для приложения сервера, чтобы они могли найти друг друга в сети. А вот пример:

// GUID приложения сервера
GUID AppGUID = { 0xede9493e, 0x6ac8, 0x4f15,
               { 0x8d, 0x1, 0x8b, 0x16, 0x32, 0x0, 0xb9, 0x66 } };

// Обнуляем структуру данных сессии и устанавливаем ее размер
DPN_APPLICATION_DESC dpad;

ZeroMemory(&dpad, sizeof(DPN_APPLICATION_DESC));
dpad.dwSize = sizeof(DPN_APPLICATION_DESC);

// Задаем имя и пароль сессии к которой подключаемся
dpad.pwszSessioName = L"MySession";
dpad.pwszPassword   = L"MyPassword";

// Устанавливаем GUID приложения
dpad.guidApplication = AppGUID;

// Устанавливаем флаги модели клиент/сервер и использования пароля
dpad.dwFlags = DPNSESSION_CLIENT_SERVER |
               DPNSESSION_REQUIREPASSWORD;

netlib.narod.ru< Назад | Оглавление | Далее >

Сайт управляется системой uCoz