Beispiel #1
0
void ClientManager::Process()
{
	ProcessDisconnect();
	EQOldStream *oldcur = old_stream->PopOld();
	while(oldcur)
	{
		struct in_addr in;
		in.s_addr = oldcur->GetRemoteIP();
		server_log->Log(log_network, "New client connection from %s:%d", inet_ntoa(in), ntohs(oldcur->GetRemotePort()));

		oldcur->SetOpcodeManager(&old_ops);
		Client *c = new Client(oldcur, cv_old);
		clients.push_back(c);
		oldcur = old_stream->PopOld();
	}
	list<Client*>::iterator iter = clients.begin();
	while(iter != clients.end())
	{
		if((*iter)->Process() == false)
		{
			server_log->Log(log_client, "Client had a fatal error and had to be removed from the login.");
			delete (*iter);
			iter = clients.erase(iter);
		}
		else
		{
			++iter;
		}
	}
}
///////////////////////////////////////////////////////////////
//
// CDatabaseJobQueueImpl::ProcessCommand
//
//
//
///////////////////////////////////////////////////////////////
void CDatabaseJobQueueImpl::ProcessCommand ( CDbJobData* pJobData )
{
    if ( pJobData->command.type == EJobCommand::CONNECT )
        ProcessConnect ( pJobData );
    else
    if ( pJobData->command.type == EJobCommand::DISCONNECT )
        ProcessDisconnect ( pJobData );
    else
    if ( pJobData->command.type == EJobCommand::QUERY )
        ProcessQuery ( pJobData );
    else
    if ( pJobData->command.type == EJobCommand::FLUSH )
        ProcessFlush ( pJobData );
    else
    if ( pJobData->command.type == EJobCommand::SETLOGLEVEL )
        ProcessSetLogLevel ( pJobData );
}
Beispiel #3
0
void ClientManager::Process()
{
	ProcessDisconnect();
	EQStream *cur = titanium_stream->Pop();
	while(cur)
	{
		struct in_addr in;
		in.s_addr = cur->GetRemoteIP();
		server_log->Log(log_network, "New Titanium client connection from %s:%d", inet_ntoa(in), ntohs(cur->GetRemotePort()));

		cur->SetOpcodeManager(&titanium_ops);
		Client *c = new Client(cur, cv_titanium);
		clients.push_back(c);
		cur = titanium_stream->Pop();
	}

	cur = sod_stream->Pop();
	while(cur)
	{
		struct in_addr in;
		in.s_addr = cur->GetRemoteIP();
		server_log->Log(log_network, "New SoD client connection from %s:%d", inet_ntoa(in), ntohs(cur->GetRemotePort()));

		cur->SetOpcodeManager(&sod_ops);
		Client *c = new Client(cur, cv_sod);
		clients.push_back(c);
		cur = sod_stream->Pop();
	}

	list<Client*>::iterator iter = clients.begin();
	while(iter != clients.end())
	{
		if((*iter)->Process() == false)
		{
			server_log->Log(log_client, "Client had a fatal error and had to be removed from the login.");
			delete (*iter);
			iter = clients.erase(iter);
		}
		else
		{
			iter++;
		}
	}
}
Beispiel #4
0
void ClientManager::Process()
{
	ProcessDisconnect();

	auto iter = clients.begin();
	while (iter != clients.end())
	{
		if ((*iter)->Process() == false)
		{
			Log(Logs::General, Logs::Debug, "Client had a fatal error and had to be removed from the login.");
			delete (*iter);
			iter = clients.erase(iter);
		}
		else
		{
			++iter;
		}
	}
}
Beispiel #5
0
void ServerManager::Process()
{
	ProcessDisconnect();
	EmuTCPConnection *tcp_c = nullptr;
	while(tcp_c = tcps->NewQueuePop())
	{
		in_addr tmp;
		tmp.s_addr = tcp_c->GetrIP();
		server_log->Log(log_network, "New world server connection from %s:%d", inet_ntoa(tmp), tcp_c->GetrPort());

		WorldServer *cur = GetServerByAddress(tcp_c->GetrIP());
		if(cur)
		{
			server_log->Log(log_network, "World server already existed for %s, removing existing connection and updating current.", inet_ntoa(tmp));
			cur->GetConnection()->Free();
			cur->SetConnection(tcp_c);
			cur->Reset();
		}
		else
		{
			WorldServer *w = new WorldServer(tcp_c);
			world_servers.push_back(w);
		}
	}

	list<WorldServer*>::iterator iter = world_servers.begin();
	while(iter != world_servers.end())
	{
		if((*iter)->Process() == false)
		{
			server_log->Log(log_world, "World server %s had a fatal error and had to be removed from the login.", (*iter)->GetLongName().c_str());
			delete (*iter);
			iter = world_servers.erase(iter);
		}
		else
		{
			++iter;
		}
	}
}
/** Tell the handler to gracefully shutdown.

@param aClearQueue Whether to clear the queue without handling the things 
					on it.  If this is true the commands will be deleted.
					If this is false then pending commands will have responses
					generated to RemCon.
*/
void CRcpOutgoingCommandHandler::Disconnect(TBool aClearQueue)
	{
	LOG_FUNC	
	ProcessDisconnect(iCommandQueue, aClearQueue);
	ProcessDisconnect(iNotifyCommandQueue, aClearQueue);
	}