Esempio n. 1
0
void CNetworkStallTickerThread::Run()
{
	bool gotLockLastTime=true;

#if WARN_ABOUT_LONG_STALLS_IN_TICKER
	CTimeValue started=gEnv->pTimer->GetAsyncTime();
	CTimeValue ended;
#endif
	SetName("NetworkStallTicker");

	while (m_threadRunning)
	{
		if (gEnv->pNetwork)
		{
			gEnv->pNetwork->SyncWithGame(eNGS_SleepNetwork);
		}

		if (gotLockLastTime)
		{
			CrySleep(33);
		}
		else
		{
			CrySleep(1);
		}

		{
			if (gEnv->pNetwork)
			{
				SCOPED_TICKER_TRY_LOCK;
				if (SCOPED_TICKER_HAS_LOCK)
				{
					gEnv->pNetwork->SyncWithGame(eNGS_MinimalUpdateForLoading);
					gotLockLastTime=true;
				}
				else
				{
					gotLockLastTime=false;
				}
				gEnv->pNetwork->SyncWithGame(eNGS_WakeNetwork);
			}

#if WARN_ABOUT_LONG_STALLS_IN_TICKER
			ended = gEnv->pTimer->GetAsyncTime();
			if (ended.GetDifferenceInSeconds(started)>1.f)
			{
				CryLogAlways("THREADEDLOADING:: No update for %f",ended.GetDifferenceInSeconds(started));
			}
			started=ended;
#endif
		}
	}

	Stop();
}
Esempio n. 2
0
void CLuaRemoteDebug::HaltExecutionLoop(lua_State *L, lua_Debug *ar, const char* errorStr)
{
	m_pHaltedLuaDebug = ar;

	SendLuaState(ar);
	SendVariables();
	if (errorStr)
	{
		SendScriptError(errorStr);
	}

	m_bExecutionStopped = true;
	if (INotificationNetwork *pNotificationNetwork = gEnv->pSystem->GetINotificationNetwork())
	{
		while (m_bExecutionStopped)
		{
			gEnv->pSystem->ResetWatchdogTimer();
			pNotificationNetwork->Update();

			CrySleep(50);
		}
	}

	m_pHaltedLuaDebug = NULL;
}
Esempio n. 3
0
void CDownloadMgr::WaitForDownloadsToFinish(const char** resources, int numResources, float timeout)
{
	CDownloadableResourcePtr* pResources=new CDownloadableResourcePtr[numResources];
	for (int i=0; i<numResources; ++i)
	{
		CDownloadableResourcePtr pRes = FindResourceByName(resources[i]);
		if (pRes)
		{
			pRes->StartDownloading();
		}
		pResources[i] = pRes;
	}
	CTimeValue startTime = gEnv->pTimer->GetAsyncTime();
	while (true)
	{
		bool allFinished = true;
		for (int i=0; i<numResources; ++i)
		{
			CDownloadableResourcePtr pRes = pResources[i];
			if (pRes)
			{
				CDownloadableResource::TState state = pRes->GetState();
				if (state & CDownloadableResource::k_callbackInProgressMask)
				{
					allFinished = false;
					break;
				}
			}
		}
		CTimeValue currentTime = gEnv->pTimer->GetAsyncTime();
		if (allFinished || currentTime.GetDifferenceInSeconds(startTime) > timeout)
		{
			break;
		}
		CrySleep(100);
	};
	delete [] pResources;
	DispatchCallbacks();
}
Esempio n. 4
0
	virtual void Run()
	{
		SetName("ZLibCompressor");

#if defined (DURANGO)
		SetThreadAffinityMask(GetCurrentThread(), BIT(3));
#endif

		while(!m_bCancelled || !m_files.empty())
		{
			m_event.Wait();

			uint8* pZLibCompressedBuffer = AllocateBlock();

			while(!m_files.empty())
			{
				CFile* pFile = m_files.pop();
				assert(pFile);
				PREFAST_ASSUME(pFile);

				while(!pFile->Closed() || !pFile->m_blocks.empty())
				{
					if( pFile->m_blocks.empty() )
					{ 
						CrySleep(1); // yield to give other threads a chance to do some work        
					}

					while(!pFile->m_blocks.empty())
					{
						SZLibBlock* block = pFile->m_blocks.pop();
						assert(block);
						PREFAST_ASSUME(block);

						if(pFile->m_pCompressor->m_bUseZLibCompression)
						{
							size_t compressedLength = XMLCPB_ZLIB_BUFFER_SIZE;
							bool compressionOk = gEnv->pSystem->CompressDataBlock( block->m_pZLibBuffer, block->m_ZLibBufferSizeUsed, pZLibCompressedBuffer, compressedLength );

							SZLibBlockHeader zlibHeader;
							zlibHeader.m_compressedSize = compressionOk ? compressedLength : SZLibBlockHeader::NO_ZLIB_USED;
							zlibHeader.m_uncompressedSize = block->m_ZLibBufferSizeUsed;
							pFile->m_bytesWrittenIntoFileUncompressed += block->m_ZLibBufferSizeUsed;

							pFile->Write( &zlibHeader, sizeof(SZLibBlockHeader) );
							if (compressionOk)
								pFile->Write( pZLibCompressedBuffer, compressedLength );
							else
								pFile->Write( block->m_pZLibBuffer, block->m_ZLibBufferSizeUsed );
						}
						else
						{
							pFile->Write(block->m_pZLibBuffer, block->m_ZLibBufferSizeUsed);
						}

						delete block;
					}
				}

				pFile->Finish();
				delete pFile;
			}

			FreeBlock(pZLibCompressedBuffer);
		}
	}
Esempio n. 5
0
void CPacketQueue::Thread()
{
	gEnv->pLog->Log(TITLE "Send/Read packets thread started!");

	while(!gEnv->pSystem->IsQuitting())
	{
		send_mutex.lock();
		if(packetsInSendQueue>0)
		{
			//gEnv->pLog->Log("[CryMasterServer] Sending packet...");

			SPacket packet;
			std::vector <SPacket>::iterator it;

			it = SendPackets.begin();

			packet.addr = (*it).addr;
			packet.data = (*it).data;
			packet.size = (*it).size;
			
			send(packet.addr,packet.data,packet.size,0);

			SendPackets.erase(it);
			packetsInSendQueue--;
		}
		send_mutex.unlock();

		read_mutex.lock();
		if(packetsInReadQueue>0)
		{
			//gEnv->pLog->Log("[CryMasterServer] Reding packet...");

			SPacket Packet;
			SPlayer Player;

			std::vector <SPacket>::iterator it;

			it = ReadPackets.begin();

			Packet.addr =  (*it).addr;
			Packet.data = (*it).data;
			Packet.size = (*it).size;

			EPacketType packetType = gClientEnv->pRsp->GetPacketType(Packet);

			switch (packetType)
			{
			case PACKET_IDENTIFICATION:
				gEnv->pLog->Log(TITLE "Identification packet recived");
				break;
			case PACKET_ACCOUNT:
				{
					gEnv->pLog->Log(TITLE "Account info packet recived");

					gClientEnv->masterPlayer = gClientEnv->pRsp->ReadAccountInfo(Packet);

					SPlayer Player;
					SUIArguments args;

					Player = gClientEnv->masterPlayer;

					if(Player.playerId != 0)
					{
						args.AddArgument(Player.nickname.c_str());
						args.AddArgument(Player.level);
						args.AddArgument(Player.money);
						args.AddArgument(Player.xp);

						CMsEvents::GetInstance()->SendEvent(CMsEvents::eUIGE_AccountInfoResived, args);
					}

					break;
				}
			case PACKET_MESSAGE:
				{
					SMessage Message = gClientEnv->pRsp->ReadMsg(Packet);

					if(strcmp(Message.message,""))
					{

						switch (Message.area)
						{
						case CHAT_MESSAGE_GLOBAL:
							{
								gEnv->pLog->Log(TITLE "Global chat message recived");

								SUIArguments args;
								args.AddArgument(Message.message);
								CMsEvents::GetInstance()->SendEvent(CMsEvents::eUIGE_MsgResived, args);

								break;
							}
						case CHAT_MESSAGE_PRIVATE:
							break;
						case CHAT_MESSAGE_SYSTEM:
							{
								gClientEnv->serverResult = Message.message;
								gEnv->pLog->Log(TITLE "System message recived [%s]", gClientEnv->serverResult.c_str());
								break;
							}
						default:
							break;
						}
					}

					break;
				}
			case PACKET_REQUEST:
				{
					gEnv->pLog->Log(TITLE "Request packet recived");
					SRequestPacket svRequest = gClientEnv->pRsp->ReadRequest(Packet);

					if(!strcmp(svRequest.request,"RemoveGameServer"))
					{
						SUIArguments args;
						args.AddArgument(svRequest.iParam);
						CMsEvents::GetInstance()->SendEvent(CMsEvents::eUIGE_RemoveServer, args);

						std::vector <SGameServer>::iterator it;
						bool find = false;

						// Delete game server
						for(it = gClientEnv->pMasterServer->vServers.begin(); it!= gClientEnv->pMasterServer->vServers.end(); ++it)
						{
							if(it->id == svRequest.iParam)
							{
								find = true;
								break;
							}
						}

						if(find) gClientEnv->pMasterServer->vServers.erase(it);
					}
					break;
				}
			case PACKET_MS_INFO:
				{
					gEnv->pLog->Log(TITLE "Master server info packet recived");
					gClientEnv->serverInfo = gClientEnv->pRsp->ReadMasterServerInfo(Packet);

					if(gClientEnv->serverInfo.playersOnline)
					{
						SUIArguments args;
						args.AddArgument(gClientEnv->serverInfo.playersOnline);
						args.AddArgument(gClientEnv->serverInfo.gameServersOnline);
						CMsEvents::GetInstance()->SendEvent(CMsEvents::eUIGE_ServerInfoResived, args);
					}

					break;
				}
			case PACKET_GAME_SERVERS:
				{
					gEnv->pLog->Log( TITLE "Game servers packet recived");
					gClientEnv->pRsp->ReadGameServers(Packet);

					break;
				}
			case PACKET_CONSOLE_COMMAND:
				{
					gEnv->pLog->Log(TITLE "Console command packet recieved");
					gClientEnv->pRsp->ReadConsoleCommandPacket(Packet);
					break;
				}
			default:
				gEnv->pLog->Log( TITLE "Unknown packet recived...");
				break;
			}

			ReadPackets.erase(it);
			packetsInReadQueue--;
		}		
		read_mutex.unlock();

		CrySleep(1);
	}
}