Ejemplo n.º 1
0
	void OnUserQuit(User* user, const std::string& message, const std::string& oper_message) override
	{
		LocalUser* localuser = IS_LOCAL(user);
		if (localuser)
			manager.UnwatchAll(localuser);
		Offline(user, user->nick);
	}
Ejemplo n.º 2
0
	void OnUserPostNick(User* user, const std::string& oldnick) override
	{
		// Detect and ignore nickname case change
		if (ServerInstance->FindNickOnly(oldnick) == user)
			return;

		Offline(user, oldnick);
		Online(user);
	}
Ejemplo n.º 3
0
bool CUserSession::Update(time_t diff)
{

	if (m_ptrNetClient && m_ptrNetClient->IsClose())
	{
		//todo
		Offline();
		return false;
	}
	return true;
}
Ejemplo n.º 4
0
void Cube_SocketTCP_Connect::run()
{
	int ssize;
	Cube_SocketTCP_Connect_I _in;
	while(TRUE)
	{
		if (ssize=recv(m_Client.s,(char *)_in.Buffer,CUBE_SOCKETTCP_I_BUFFERSIZE,0)==SOCKET_ERROR)
		{
		break;
		}
		if (ssize!=0)
		{
			Recv(_in);
		}
		else
		{
			break;
		}
	}
	Offline();
}
Ejemplo n.º 5
0
bool CRelayClientSession::Update(time_t diff)
{
	WorldPacket *packet;

	INIT_PROCESS_TIMER;
	char msg[1024];
	while(!m_recvQueue.empty())
	{
		packet = m_recvQueue.next();

		if (m_recvQueue.size() >= CSet::MaxPacketOverLoad)
		{
			//todo
			IME_ERROR("RelayClientSession packet overload uplimit close connect key %u", GetdwKey());
			Offline();
			return false;
		}

		PROCESS_TIMER_START;
		uint16 opcode = packet->GetOpcode();
		sprintf(msg, "relaysession cmd %u key %u", opcode, GetdwKey());
		m_CHandler.Process(*packet);
		PROCESS_TIMER_END(msg);
		delete packet;
	}

    ///- Update the different timers
    for (int i = 0; i < USER_UPDATE_COUNT; ++i)
    {
        if (m_timers[i].GetCurrent() >= 0)
            m_timers[i].Update(diff);
        else
            m_timers[i].SetCurrent(0);
    }

    ///-
	
	if (m_timers[USER_UPDATE_TIMER_1s].Passed())
	{
		m_timers[USER_UPDATE_TIMER_1s].Reset();
		sprintf(msg, "relaysession key %u relaysession 1s", GetdwKey());
		PROCESS_TIMER_START;
		m_CHandler.OnTimer(TIMER_1S);
		PROCESS_TIMER_END(msg);
	}
	if (m_timers[USER_UPDATE_TIMER_3s].Passed())
	{
		m_timers[USER_UPDATE_TIMER_3s].Reset();
		sprintf(msg, "relaysession key %u relaysession 3s", GetdwKey());
		PROCESS_TIMER_START
		m_CHandler.OnTimer(TIMER_3S);
		PROCESS_TIMER_END(msg);
	}
	if (m_timers[USER_UPDATE_TIMER_5s].Passed())
	{
		m_timers[USER_UPDATE_TIMER_5s].Reset();
		sprintf(msg, "relaysession key %u relaysession 5s", GetdwKey());
		PROCESS_TIMER_START
		m_CHandler.OnTimer(TIMER_5S);
		PROCESS_TIMER_END(msg);
	}
	if (m_timers[USER_UPDATE_TIMER_1min].Passed())
	{
		m_timers[USER_UPDATE_TIMER_1min].Reset();
		sprintf(msg, "relaysession key %u relaysession 1min", GetdwKey());
		PROCESS_TIMER_START;
		m_CHandler.OnTimer(TIMER_1MIN);
		PROCESS_TIMER_END(msg);
	}
	if (m_timers[USER_UPDATE_TIMER_10min].Passed())
	{
		m_timers[USER_UPDATE_TIMER_10min].Reset();
		sprintf(msg, "relaysession key %u relaysession 10min", GetdwKey());
		PROCESS_TIMER_START;
		m_CHandler.OnTimer(TIMER_10MIN);
		PROCESS_TIMER_END(msg);
	}
	if (m_timers[USER_UPDATE_TIMER_30min].Passed())
	{
		m_timers[USER_UPDATE_TIMER_30min].Reset();
		sprintf(msg, "relaysession key %u relaysession 30min", GetdwKey());
		PROCESS_TIMER_START;
		m_CHandler.OnTimer(TIMER_30MIN);
		PROCESS_TIMER_END(msg);
	}

	if (m_pClient && !m_pClient->IsConnected())
	{
		//todo
		Offline();
		return false;
	}

	return true;
}
Ejemplo n.º 6
0
ModuleManager::ModuleManager(Ship *const ship)
{
    // Create ModuleContainer object and initialize with sizes for all slot banks for this ship:
    m_Modules = new ModuleContainer((uint32)ship->GetAttribute(AttrLowSlots).get_int(),
                                    (uint32)ship->GetAttribute(AttrMedSlots).get_int(),
                                    (uint32)ship->GetAttribute(AttrHiSlots).get_int(),
                                    (uint32)ship->GetAttribute(AttrRigSlots).get_int(),
                                    (uint32)ship->GetAttribute(AttrSubSystemSlot).get_int(),
                                    (uint32)ship->GetAttribute(AttrTurretSlotsLeft).get_int(),
                                    (uint32)ship->GetAttribute(AttrLauncherSlotsLeft).get_int(),
                                    this);

    // Store reference to the Ship object to which the ModuleManager belongs:
    m_Ship = ship;

	// Initialize the log file for this Module Manager instance
	std::string logsubdirectory = "ModuleManagers";
	//std::string logfilename = "On_Ship_" + m_Ship->itemName();		// This method using ship's name string may NOT be path friendly as players naming ships may use path-unfriendly characters - need function to convert to path-friendly ship name string

	std::string logfilename = "On_Ship_" + m_Ship->itemName() + "_(" + std::string(itoa(m_Ship->itemID())) + ")";

	m_pLog = new Task_Log( EVEServerConfig::files.logDir, logsubdirectory, logfilename );

	m_pLog->InitializeLogging( EVEServerConfig::files.logDir, logsubdirectory, logfilename );

    // Load modules, rigs and subsystems from Ship's inventory into ModuleContainer:
	m_pLog->Log("ModuleManager", "Loading modules...");
    uint32 flagIndex;
    for(flagIndex=flagLowSlot0; flagIndex<=flagLowSlot7; flagIndex++)
    {
        InventoryItemRef moduleRef;
		InventoryItemRef chargeRef;
		std::vector<InventoryItemRef>::iterator cur, end;
        std::vector<InventoryItemRef> items;
		m_Ship->FindByFlag( (EVEItemFlags)flagIndex, items );        // Operator assumed to be Client *
		cur = items.begin();
		end = items.end();
		if( items.size() > 0 )
		{
			while( (cur != end) ) {
				if( cur->get()->categoryID() == EVEDB::invCategories::Charge )
					chargeRef = (*cur);
				if( cur->get()->categoryID() == EVEDB::invCategories::Module )
					moduleRef = (*cur);
				cur++;
			}
			if( moduleRef )
			{
				if( _fitModule( moduleRef, (EVEItemFlags)flagIndex ) )
				{
					//_fitModule( moduleRef, (EVEItemFlags)flagIndex );
					if( moduleRef->GetAttribute(AttrIsOnline).get_int() == 1 )
						Online(moduleRef->itemID());
					else
						Offline(moduleRef->itemID());
					if( chargeRef )
						((ActiveModule *)GetModule((EVEItemFlags)flagIndex))->load(chargeRef);
				}
				else
				{
					SysLog::Error( "ModuleManager::ModuleManager()", "ERROR: Cannot fit Low Slot module '%s' (id %u)", moduleRef->itemName().c_str(), moduleRef->itemID() );
					throw PyException( MakeCustomError( "ERROR! Cannot fit Low Slot module '%s'", moduleRef->itemName().c_str() ) );
				}
			}
		}
    }

    for(flagIndex=flagMedSlot0; flagIndex<=flagMedSlot7; flagIndex++)
    {
        InventoryItemRef moduleRef;
		InventoryItemRef chargeRef;
		std::vector<InventoryItemRef>::iterator cur, end;
        std::vector<InventoryItemRef> items;
		m_Ship->FindByFlag( (EVEItemFlags)flagIndex, items );        // Operator assumed to be Client *
		cur = items.begin();
		end = items.end();
		if( items.size() > 0 )
		{
			while( (cur != end) ) {
				if( cur->get()->categoryID() == EVEDB::invCategories::Charge )
					chargeRef = (*cur);
				if( cur->get()->categoryID() == EVEDB::invCategories::Module )
					moduleRef = (*cur);
				cur++;
			}
			if( moduleRef )
			{
				if( _fitModule( moduleRef, (EVEItemFlags)flagIndex ) )
				{
					//_fitModule( moduleRef, (EVEItemFlags)flagIndex );
					if( moduleRef->GetAttribute(AttrIsOnline).get_int() == 1 )
						Online(moduleRef->itemID());
					else
						Offline(moduleRef->itemID());
					if( chargeRef )
						((ActiveModule *)GetModule((EVEItemFlags)flagIndex))->load(chargeRef);
				}
				else
				{
					SysLog::Error( "ModuleManager::ModuleManager()", "ERROR: Cannot fit Med Slot module '%s' (id %u)", moduleRef->itemName().c_str(), moduleRef->itemID() );
					throw PyException( MakeCustomError( "ERROR! Cannot fit Med Slot module '%s'", moduleRef->itemName().c_str() ) );
				}
			}
		}
    }

    for(flagIndex=flagHiSlot0; flagIndex<=flagHiSlot7; flagIndex++)
    {
        InventoryItemRef moduleRef;
		InventoryItemRef chargeRef;
		std::vector<InventoryItemRef>::iterator cur, end;
        std::vector<InventoryItemRef> items;
		m_Ship->FindByFlag( (EVEItemFlags)flagIndex, items );        // Operator assumed to be Client *
		cur = items.begin();
		end = items.end();
		if( items.size() > 0 )
		{
			while( (cur != end) ) {
				if( cur->get()->categoryID() == EVEDB::invCategories::Charge )
					chargeRef = (*cur);
				if( cur->get()->categoryID() == EVEDB::invCategories::Module )
					moduleRef = (*cur);
				cur++;
			}
			if( moduleRef )
			{
				if( _fitModule( moduleRef, (EVEItemFlags)flagIndex ) )
				{
					if( moduleRef->GetAttribute(AttrIsOnline).get_int() == 1 )
						Online(moduleRef->itemID());
					else
						Offline(moduleRef->itemID());
					if( chargeRef )
						((ActiveModule *)GetModule((EVEItemFlags)flagIndex))->load(chargeRef);
				}
				else
				{
					SysLog::Error( "ModuleManager::ModuleManager()", "ERROR: Cannot fit High Slot module '%s' (id %u)", moduleRef->itemName().c_str(), moduleRef->itemID() );
					throw PyException( MakeCustomError( "ERROR! Cannot fit High Slot module '%s'", moduleRef->itemName().c_str() ) );
				}
			}
		}
    }

    for(flagIndex=flagRigSlot0; flagIndex<=flagRigSlot7; flagIndex++)
    {
        InventoryItemRef itemRef;
		std::vector<InventoryItemRef>::iterator cur, end;
        std::vector<InventoryItemRef> items;
		m_Ship->FindByFlag( (EVEItemFlags)flagIndex, items );        // Operator assumed to be Client *
		cur = items.begin();
		end = items.end();
		if( items.size() > 0 )
		{
			while( (cur->get()->categoryID() != EVEDB::invCategories::Module) && (cur != end) ) {
				cur++;
			}
			if( cur->get()->categoryID() == EVEDB::invCategories::Module )
				itemRef = (*cur);
			if( itemRef )
			{
				_fitModule( itemRef, (EVEItemFlags)flagIndex );
				// We don't think Rigs need the Online attribute set, but keep this code here in case we do:
				//if( itemRef->GetAttribute(AttrIsOnline).get_int() == 1 )
				//	Online(itemRef->itemID());
				//else
				//	Offline(itemRef->itemID());
			}
		}
    }

    for(flagIndex=flagSubSystem0; flagIndex<=flagSubSystem7; flagIndex++)
    {
        InventoryItemRef itemRef;
		std::vector<InventoryItemRef>::iterator cur, end;
        std::vector<InventoryItemRef> items;
		m_Ship->FindByFlag( (EVEItemFlags)flagIndex, items );        // Operator assumed to be Client *
		cur = items.begin();
		end = items.end();
		if( items.size() > 0 )
		{
			while( (cur->get()->categoryID() != EVEDB::invCategories::Module) && (cur != end) ) {
				cur++;
			}
			if( cur->get()->categoryID() == EVEDB::invCategories::Module )
				itemRef = (*cur);
			if( itemRef )
			{
				_fitModule( itemRef, (EVEItemFlags)flagIndex );
				// We don't think Subsystems need the Online attribute set, but keep this code here in case we do:
				//if( itemRef->GetAttribute(AttrIsOnline).get_int() == 1 )
				//	Online(itemRef->itemID());
				//else
				//	Offline(itemRef->itemID());
			}
		}
    }

	m_pLog->Log("ModuleManager", "Module loading complete!");

}
Ejemplo n.º 7
0
bool CPlayerSession::Update(time_t diff)
{
	WorldPacket *packet;
//	printf("UserSession update~\n");
	INIT_PROCESS_TIMER;
	char msg[1024];
	while(!m_ptrNetClient->IsClose() && !m_recvQueue.empty()) 
	{
		packet = m_recvQueue.next();
		
		m_dwActiveTime = time(NULL);
		if (m_recvQueue.size() >= CSet::MaxPacketOverLoad)
		{
			//todo
			IME_ERROR("PlayerSession packet overload uplimit close connect ip %s", GetRemoteIP().c_str());
			Offline();
			return false;
		}
		
		PROCESS_TIMER_START;
		uint16 opcode = packet->GetOpcode();
		sprintf(msg, "playersession cmd %u", opcode);
		m_CHandler.Process(*packet);
		PROCESS_TIMER_END(msg);
		delete packet;
	}

    ///- Update the different timers
    for (int i = 0; i < USER_UPDATE_COUNT; ++i)
    {
        if (m_timers[i].GetCurrent() >= 0)
            m_timers[i].Update(diff);
        else
            m_timers[i].SetCurrent(0);
    }

	if (m_timers[USER_UPDATE_TIMER_1s].Passed())
	{
		m_timers[USER_UPDATE_TIMER_1s].Reset();
		PROCESS_TIMER_START;
		OnTimer1s();
		PROCESS_TIMER_END("playersession 1s");
	}
	if (m_timers[USER_UPDATE_TIMER_3s].Passed())
	{
		m_timers[USER_UPDATE_TIMER_3s].Reset();
		PROCESS_TIMER_START;
		OnTimer3s();
		PROCESS_TIMER_END("playersession 3s");
	}
    ///-
	if (m_timers[USER_UPDATE_TIMER_5s].Passed())
	{
		m_timers[USER_UPDATE_TIMER_5s].Reset();
		PROCESS_TIMER_START;
		OnTimer5s();
		PROCESS_TIMER_END("playersession 5s");
	}
    ///-
	if (m_timers[USER_UPDATE_TIMER_30s].Passed())
	{
		m_timers[USER_UPDATE_TIMER_30s].Reset();
		PROCESS_TIMER_START;
		OnTimer30s();
		PROCESS_TIMER_END("playersession 30s");
	}
    ///-
    if (m_timers[USER_UPDATE_TIMER_1min].Passed())
    {
        m_timers[USER_UPDATE_TIMER_1min].Reset();
		PROCESS_TIMER_START;
        OnTimer1min();
		PROCESS_TIMER_END("playersession 1min");
    }
    if (m_timers[USER_UPDATE_TIMER_3min].Passed())
    {
        m_timers[USER_UPDATE_TIMER_3min].Reset();
		PROCESS_TIMER_START;
        OnTimer3min();
		PROCESS_TIMER_END("playersession 1min");
    }
    if (m_timers[USER_UPDATE_TIMER_5min].Passed())
    {
        m_timers[USER_UPDATE_TIMER_5min].Reset();
		PROCESS_TIMER_START;
        OnTimer5min();
		PROCESS_TIMER_END("playersession 1min");
    }
    if (m_timers[USER_UPDATE_TIMER_10min].Passed())
    {
        m_timers[USER_UPDATE_TIMER_10min].Reset();
		PROCESS_TIMER_START;
        OnTimer10min();
		PROCESS_TIMER_END("playersession 10min");
    }
    if (m_timers[USER_UPDATE_TIMER_30min].Passed())
    {
        m_timers[USER_UPDATE_TIMER_30min].Reset();
		PROCESS_TIMER_START;
        OnTimer30min();
		PROCESS_TIMER_END("playersession 30min");
    }

	if (m_ptrNetClient->IsClose())
	{
		//todo
		IME_ERROR("PlayerSession Offline");
		Offline();
		return false;
	}
	return true;
}
Ejemplo n.º 8
0
void SslTcpClient::OnNetDisconnect()
{
	//m_clientPool->fQueue.EnQueue(&fTaskQueueElem);
	//m_clientPool->Signal(Task::kConnectEvent);
	Offline();
}
Ejemplo n.º 9
0
void SslTcpClient::OnNetConnectFailed()
{
	Offline();
}