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