| 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 | Для подключения удаленная система должна указать правильный пароль. |
Вот пример установки информации сессии:
// 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 | < Назад | Оглавление | Далее > |