本文整理汇总了C++中Msg::process方法的典型用法代码示例。如果您正苦于以下问题:C++ Msg::process方法的具体用法?C++ Msg::process怎么用?C++ Msg::process使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Msg
的用法示例。
在下文中一共展示了Msg::process方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: receiveHandler
/* static */
void
Server :: receiveHandler(NetworkClient* aClient, uint8_t* aBuf, size_t aLen)
{
if (aClient != nullptr && aBuf != nullptr)
{
if (aLen < sizeof(Msg::Header))
return;
uint8_t* received = new uint8_t[aLen];
memcpy(received, aBuf, aLen);
// TODO? clean this line and add some checks
Client* client = (Client*)aClient->getOwner();
client->getCipher().decrypt(received, aLen);
size_t size = 0;
for (size_t i = 0; i < aLen; i += size)
{
#if BYTE_ORDER == BIG_ENDIAN
size = bswap16(((Msg::Header*)(received + i))->Length);
#else
size = ((Msg::Header*)(received + i))->Length;
#endif
ASSERT(size <= 1024); // invalid msg size...
if (size < aLen)
{
uint8_t* packet = new uint8_t[size];
memcpy(packet, received + i, size);
#if BYTE_ORDER == BIG_ENDIAN
Msg::Header* header = (Msg::Header*)packet;
header->Length = bswap16(header->Length);
header->Type = bswap16(header->Type);
#endif
Msg* msg = nullptr;
Msg::create(&msg, &packet, size);
msg->process(client);
SAFE_DELETE(msg);
SAFE_DELETE_ARRAY(packet);
}
else
{
#if BYTE_ORDER == BIG_ENDIAN
Msg::Header* header = (Msg::Header*)received;
header->Length = bswap16(header->Length);
header->Type = bswap16(header->Type);
#endif
Msg* msg = nullptr;
Msg::create(&msg, &received, size);
msg->process(client);
SAFE_DELETE(msg);
}
}
SAFE_DELETE_ARRAY(received);
}
}