本文整理汇总了C++中NetworkMessage::GetTag方法的典型用法代码示例。如果您正苦于以下问题:C++ NetworkMessage::GetTag方法的具体用法?C++ NetworkMessage::GetTag怎么用?C++ NetworkMessage::GetTag使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类NetworkMessage
的用法示例。
在下文中一共展示了NetworkMessage::GetTag方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: HandleReceiveMsgAndConns
void TcpConnectionHandler::HandleReceiveMsgAndConns()
{
// https://www.ibm.com/support/knowledgecenter/en/ssw_i5_54/rzab6/poll.htm
std::vector<pollfd> poll_fds;
pollfd master_fd;
master_fd.fd = m_listenerPtr->m_socket->GetNativeSocket();
master_fd.events = POLLRDNORM;
poll_fds.emplace_back(master_fd);
int res = poll(poll_fds.data(), poll_fds.size(), -1);
if (res < 0)
{
//poll error
}
//should never timeout because its infinite (negative)
//if (res == 0)
//{
//timeout
//}
for (int i = 0; i < poll_fds.size(); i++)
{
if (poll_fds.at(i).revents == 0)
continue;
if (poll_fds[i].revents != POLLRDNORM)
{
printf(" Error! revents = %d\n", poll_fds.at(i).revents);
//end_server = TRUE;
break;
}
if (poll_fds.at(i).fd == m_listenerPtr->m_socket->GetNativeSocket())
{
TcpClient *c = m_listenerPtr->AcceptClient();
if (c)
{
std::shared_ptr<TcpConnection> connection = std::make_shared<TcpConnection>(c);
pollfd new_client;
new_client.fd = connection->GetClient()->m_socket->GetNativeSocket();
new_client.events = POLLRDNORM;
poll_fds.emplace_back(new_client);
AddClient(connection);
}
}
else // not the listening socket
{
SOCKET c = poll_fds.at(i).fd;
std::unique_ptr<uint8_t> header(new uint8_t[sizeof(NetworkHeader*)]());
int32_t read;
if ((read = recv(c, (char*)header.get(), sizeof(NetworkHeader*), 0)) != sizeof(NetworkHeader*))
continue;
std::unique_ptr<NetworkHeader> net_header((NetworkHeader*)header.get());
std::unique_ptr<uint8_t> buffer(new uint8_t[net_header->Size]());
if ((read = recv(c, (char*)buffer.get(), net_header->Size, 0)) == net_header->Size)
{
NetworkMessage msg;
msg.Deserialize(buffer.get(), net_header->Size);
if (msg.GetTag() == (uint32_t)InternalTags::Disconnect)
m_queue->EnqueueDisconnection(msg);
else if (msg.GetTag() == (uint32_t)InternalTags::Connect)
m_queue->EnqueueConnection(msg);
else
m_queue->EnqueueMessageReceived(msg);
}
else
continue;
}
}
}