Example #1
0
bool TcpSession::recvPacket()
{
	if (listener && listener->onReceive())
		return true;

	int n;
	while ((n = recv(sock, buf + bufSize, TCP_PACKET_SIZE - bufSize, 0)) > 0) {
		bufSize += n;
		char *start = buf;
		char *end = start + bufSize;
		uint16 len;

		while (start + sizeof(len) < end) {
			len = ntohs(*(uint16 *) start);
			if (end - start - sizeof(len) < len)
				break;

			start += sizeof(len);
			if (len >= sizeof(TCP_HEADER)) {
				TcpInPacket in(start, len);
				onPacketReceived(in);
			}
			start += len;
		}

		bufSize = end - start;
		if (bufSize > 0)
			memcpy(buf, start, bufSize);
	}
	if (n == 0)
		onClose();

	return (n >= 0);
}
				void update()
				{
					if(!busy) { ssvu::lo("ManagedSocket") << "Update failed - not busy" << std::endl; return; }

					std::this_thread::sleep_for(std::chrono::milliseconds(1));
					sf::Packet packet;

					for(int i{0}; i < 5; ++i)
					{
						if(busy && socket.receive(packet) == sf::Socket::Done) onPacketReceived(packet);
						std::this_thread::sleep_for(std::chrono::milliseconds(50));
					}
				}