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); }
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); }
bool CUserSession::Update(time_t diff) { if (m_ptrNetClient && m_ptrNetClient->IsClose()) { //todo Offline(); return false; } return true; }
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(); }
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; }
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!"); }
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; }
void SslTcpClient::OnNetDisconnect() { //m_clientPool->fQueue.EnQueue(&fTaskQueueElem); //m_clientPool->Signal(Task::kConnectEvent); Offline(); }
void SslTcpClient::OnNetConnectFailed() { Offline(); }