| netlib.narod.ru | < Назад | Оглавление | Далее > |
Перед тем, как двигаться дальше, вы должны создать функцию обратного вызова для обработки сообщений. Логика этой функции прямолинейна. Она должна определить, какое сообщение было получено, и обработать его как можно быстрее. Можете представлять обработчик сообщений в виде воронки, изображенной на рис. 5.9.

Рис. 5.9. Сетевой объект получает сообщения из сети и позволяет обработчику сообщений обрабатывать их одно за другим
Прототип вы уже видели, так что взгляните на пример функции:
// Прототип функции обратного вызова
HRESULT WINAPI MessageHandler(PVOID pvUserContext,
DWORD dwMessageId,
PVOID pMsgBuffer)
{
switch(dwMessageId) {
case DPN_MSGID_CREATE_PLAYER:
// Обработка создания игрока
return S_OK;
case DPN_MSGID_DESTROY_PLAYER:
// Обработка удаления игрока
return S_OK;
}
return E_FAIL;
}
Создав систему switch...case вы можете быстро отобрать необходимые сообщения, отбросив все остальные. Возврат значения S_OK сообщает об успешной обработке сообщения. Значение E_FAIL указывает, что возникла ошибка.
Каждое сообщение поступает с буфером данных, который приводится к типу соответствующей структуры. Структуры следуют той же схеме именования, за исключением того, что их названия начинаются не с DPN_MSGID_, а с DPNMSG_, как показано ниже:
DPNMSG_CREATE_PLAYER *pCreate; // DPN_MSGID_CREATE_PLAYER DPNMSG_DESTROY_PLAYER *pDestroy; // DPN_MSGID_DESTROY_PLAYER pCreate = (DPNMSG_CREATE_PLAYER* )pMsgBuffer; pDestroy = (DPNMSG_DESTROY_PLAYER*)pMsgBuffer;
Конечно, содержание этих сообщений полезно только для конкретного сетевого объекта, так что нет необходимости использовать их все. Далее в этой главе, в разделах «Работа с сервером» и «Работа с клиентом» вы увидите использование сообщений с соответствующим объектом.
| netlib.narod.ru | < Назад | Оглавление | Далее > |