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 | < Назад | Оглавление | Далее > |