本文整理汇总了C++中EndPoint::ToString方法的典型用法代码示例。如果您正苦于以下问题:C++ EndPoint::ToString方法的具体用法?C++ EndPoint::ToString怎么用?C++ EndPoint::ToString使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类EndPoint
的用法示例。
在下文中一共展示了EndPoint::ToString方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ProcessNewUDPConnectionAttempt
bool NetworkServer::ProcessNewUDPConnectionAttempt(Socket *listenSocket, const EndPoint &endPoint, const char *data, size_t numBytes)
{
LOG(LogInfo, "New inbound connection attempt from %s with datagram of size %d.", endPoint.ToString().c_str(), (int)numBytes);
if (!acceptNewConnections)
{
LOG(LogError, "Ignored a new connection attempt since server is set not to accept new connections.");
return false;
}
// Pass the datagram contents to a callback that decides whether this connection is allowed.
if (networkServerListener)
{
bool connectionAccepted = networkServerListener->NewConnectionAttempt(endPoint, data, numBytes);
if (!connectionAccepted)
{
LOG(LogError, "Server listener did not accept the new connection.");
return false;
}
}
///\todo Check IP banlist.
///\todo Check that the maximum number of active concurrent connections is not exceeded.
std::string remoteHostName = endPoint.IPToString();
// Accept the connection and create a new UDP socket that communicates to that endpoint.
Socket *socket = owner->CreateUDPSlaveSocket(listenSocket, endPoint, remoteHostName.c_str());
if (!socket)
{
LOG(LogError, "Network::ConnectUDP failed! Cannot accept new UDP connection.");
return false;
}
UDPMessageConnection *udpConnection = new UDPMessageConnection(owner, this, socket, ConnectionOK);
Ptr(MessageConnection) connection(udpConnection);
{
PolledTimer timer;
Lockable<ConnectionMap>::LockType clientsLock = clients.Acquire();
(*clientsLock)[endPoint] = connection;
LOG(LogWaits, "NetworkServer::ProcessNewUDPConnectionAttempt: Accessing the connection list took %f msecs.",
timer.MSecsElapsed());
}
// Pass the MessageConnection to the main application so it can hook the inbound packet stream.
if (networkServerListener)
networkServerListener->NewConnectionEstablished(connection);
connection->SendPingRequestMessage(false);
owner->AssignConnectionToWorkerThread(connection);
owner->NewMessageConnectionCreated(connection);
LOG(LogInfo, "Accepted new UDP connection.");
return true;
}
示例2: ToString
std::string Socket::ToString() const
{
sockaddr_in addr;
socklen_t namelen = sizeof(addr);
int peerRet = getpeername(connectSocket, (sockaddr*)&addr, &namelen); // Note: This works only if family==INETv4
EndPoint peerName = EndPoint::FromSockAddrIn(addr);
int sockRet = getsockname(connectSocket, (sockaddr*)&addr, &namelen); // Note: This works only if family==INETv4
EndPoint sockName = EndPoint::FromSockAddrIn(addr);
char str[256];
sprintf(str, "%s:%d (%s, connected=%s, readOpen: %s, writeOpen: %s, maxSendSize=%d, sock: %s, peer: %s, socket: %d, this: %p)",
DestinationAddress(), (int)DestinationPort(),
(transport == SocketOverTCP) ? "TCP" : (IsUDPServerSocket() ? "UDP server" : (IsUDPSlaveSocket() ? "UDP Slave" : "UDP")),
Connected() ? "true" : "false", readOpen ? "true" : "false", writeOpen ? "true" : "false",
(int)maxSendSize, sockRet == 0 ? sockName.ToString().c_str() : "(-)",
peerRet == 0 ? peerName.ToString().c_str() : "(-)", (int)connectSocket,
this);
return std::string(str);
}
示例3: ReadUDPSocketData
void NetworkServer::ReadUDPSocketData(Socket *listenSocket) // [worker thread]
{
using namespace std;
assert(listenSocket);
OverlappedTransferBuffer *recvData = listenSocket->BeginReceive();
if (!recvData)
return; // No datagram available, return.
if (recvData->bytesContains == 0)
{
listenSocket->EndReceive(recvData);
LOG(LogError, "Received 0 bytes of data in NetworkServer::ReadUDPSocketData!");
return;
}
EndPoint endPoint = EndPoint::FromSockAddrIn(recvData->from); // This conversion is quite silly, perhaps it could be removed to gain performance?
LOG(LogData, "Received a datagram of size %d to socket %s from endPoint %s.", recvData->bytesContains, listenSocket->ToString().c_str(),
endPoint.ToString().c_str());
PolledTimer timer;
MessageConnection *receiverConnection = 0;
{
Lockable<ConnectionMap>::LockType clientsLock = clients.Acquire();
if (timer.MSecsElapsed() > 50.f)
{
LOG(LogWaits, "NetworkServer::ReadUDPSocketData: Accessing the connection list in UDP server receive code took %f msecs.",
timer.MSecsElapsed());
}
ConnectionMap::iterator iter = clientsLock->find(endPoint); ///\todo HashTable for performance.
if (iter != clientsLock->end())
receiverConnection = iter->second;
}
if (receiverConnection)
{
// If the datagram came from a known endpoint, pass it to the connection object that handles that endpoint.
UDPMessageConnection *udpConnection = dynamic_cast<UDPMessageConnection *>(receiverConnection);
if (udpConnection)
udpConnection->QueueInboundDatagram(recvData->buffer.buf, recvData->bytesContains);
else
LOG(LogError, "Critical! UDP socket data received into a TCP socket!");
}
else
{
// The endpoint for this datagram is not known, deserialize it as a new connection attempt packet.
EnqueueNewUDPConnectionAttempt(listenSocket, endPoint, recvData->buffer.buf, recvData->bytesContains);
}
listenSocket->EndReceive(recvData);
}
示例4: EnqueueNewUDPConnectionAttempt
void NetworkServer::EnqueueNewUDPConnectionAttempt(Socket *listenSocket, const EndPoint &endPoint, const char *data, size_t numBytes)
{
ConnectionAttemptDescriptor desc;
desc.data.size = std::min<int>(cDatagramBufferSize, numBytes);
memcpy(&desc.data.data[0], data, desc.data.size);
desc.peer = endPoint;
desc.listenSocket = listenSocket;
///\todo Check IP banlist.
///\todo Check that the maximum number of active concurrent connections is not exceeded.
bool success = udpConnectionAttempts.Insert(desc);
if (!success)
LOG(LogError, "Too many connection attempts!");
else
LOG(LogInfo, "Queued new connection attempt from %s.", endPoint.ToString().c_str());
}