Esempio n. 1
0
            inline void update()
            {
                bool foundNonBusy{false};

                for(auto i(0u); true; ++i)
                {
                    if(i >= clientHandlers.size())
                    {
                        if(foundNonBusy) return;

                        HG_LO_VERBOSE("Server")
                            << "Creating new client handlers\n";
                        for(auto k(0u); k < 10; ++k)
                            ssvu::getEmplaceUPtr<ClientHandler>(
                                clientHandlers, packetHandler);
                    }

                    auto& c(clientHandlers[i]);

                    if(c->isBusy()) continue;
                    foundNonBusy = true;

                    if(!c->tryAccept(listener)) continue;
                    onClientAccepted(*c.get());
                    c->refreshTimeout();
                    HG_LO_VERBOSE("Server") << "Accepted client ("
                                            << c->getUid() << ")\n";
                    return;
                }
            }
Esempio n. 2
0
		void initializeValidators(HGAssets& mAssets)
		{
			HG_LO_VERBOSE("hg::Online::initializeValidators") << "Initializing validators...\n";

			for(const auto& p : mAssets.getLevelDatas())
			{
				HG_LO_VERBOSE("hg::Online::initializeValidators") << "Adding (" << p.first << ") validator\n";

				const auto& l(p.second);
				const auto& validator(getValidator(l->packPath, l->id, l->getRootString(), mAssets.getStyleData(l->styleId).getRootPath(), l->luaScriptPath));
				validators.addValidator(p.first, validator);

				HG_LO_VERBOSE("hg::Online::initializeValidators") << "Added (" << p.first << "): " << validator << "\n";
			}

			HG_LO_VERBOSE("hg::Online::initializeValidators") << "Finished initializing validators...\n";
		}
Esempio n. 3
0
		template<typename T> void trySendFunc(T mFunc)
		{
			if(!canSendPacket()) { lo("hg::Online::trySendFunc") << "Can't send data to server: not connected / not logged in\n"; return; }
			HG_LO_VERBOSE("hg::Online::trySendFunc") << "Sending data to server...\n";

			currentGtm->start([mFunc]
			{
				if(!canSendPacket()) { lo("hg::Online::trySendFunc") << "Client not connected - aborting\n"; return; }
				mFunc();
			});
		}
				inline ClientHandler(PacketHandler<ClientHandler>& mPacketHandler) : packetHandler(mPacketHandler)
				{
					onPacketReceived += [this](sf::Packet mPacket){ packetHandler.handle(*this, mPacket); refreshTimeout(); };
					timeoutFuture = std::async(std::launch::async, [this]
					{
						while(running)
						{
							std::this_thread::sleep_for(800ms);

							if(!isBusy() || --untilTimeout > 0) continue;

							HG_LO_VERBOSE("ClientHandler") << "Client (" << uid << ") timed out\n";
							onDisconnect(); disconnect();
						}
					});
				}