52 : m_services( nullptr ),
54 m_stampTimer(0, true),
55 m_minuteTimer(0, true),
76 sLog.Green(
" ServerShutdown",
" Complete.");
88 sLog.Green(
" ServerInit",
"ClientSeed Initialized." );
91 sConfig.debug.StackTrace =
true;
93 sLog.Blue(
" EntityList",
"Entity Manager Initialized.");
111 sLog.Yellow(
" EntityList",
"Cleaning up %u clients, %u systems, %u agents, and %u stations", \
114 sLog.Green(
" EntityList",
"Cleaning up %u clients, %u systems, %u agents, and %u stations", \
125 cur.second->UnloadSystem();
129 sLog.Warning(
" EntityList",
"Entity List has been closed." );
142 if (pClient !=
nullptr)
148 std::vector<Client*>::iterator itr =
m_clients.begin();
150 if ((*itr) == pClient) {
158 if (pClient !=
nullptr)
175 if (pClient !=
nullptr)
181 itr->second.erase(pClient);
190 std::vector<Client*>::iterator citr =
m_clients.begin();
192 if ((*citr)->ProcessNet()) {
202 std::unordered_map<SystemEntity*, TargetManager*>::iterator titr =
m_targMgrs.begin();
204 if (titr->second->Process()) {
210 std::map<uint32, ProbeSE*>::iterator pitr =
m_probes.begin();
212 if (pitr->second->ProcessTic()) {
227 if (cur.second->IsValidSession())
228 cur.second->ProcessClient();
234 std::map<uint32, SystemManager*>::iterator itr =
m_systems.begin();
236 if (itr->second ==
nullptr) {
237 sLog.Error(
" EntityList::Proc",
"Deleting System %u", itr->first);
240 }
else if (!itr->second->ProcessTic()) {
241 itr->second->UnloadSystem();
262 cur.second->UpdateData();
274 if (
sConfig.debug.UseProfiling)
280 if (!
sDataMgr.IsSolarSystem(systemID)) {
281 _log(SERVER__INIT_ERR,
"BootSystem() called with invalid systemID (%u)", systemID);
285 std::map<uint32, SystemManager*>::iterator itr =
m_systems.find(systemID);
290 if ((pSM ==
nullptr) or (!pSM->BootSystem())) {
291 _log(SERVER__INIT_ERR,
"BootSystem() - Booting system %u failed", systemID);
296 _log(SERVER__INIT,
"BootSystem() - Booted system %u", systemID);
311 std::map<uint32, Agent*>::iterator res =
m_agents.find(agentID);
316 if (!pAgent->Load()) {
326 result.push_back(cur.second);
330 std::map<uint32, corpRole>::const_iterator cItr =
m_corpMembers.find(corpID);
334 corpRole::const_iterator itr = cItr->second.begin(), end = cItr->second.end();
336 if (itr->first !=
nullptr)
337 result.push_back(itr->first);
344 std::map<uint32, StationItemRef>::const_iterator itr =
m_stations.find(stationID);
346 itr->second->GetGuestList(result);
365 std::map<uint32, Client*>::const_iterator itr =
m_players.find(charID);
372 std::map<uint32, StationItemRef>::iterator res =
m_stations.find(stationID);
381 std::string str1 =
"",
str2 =
"";
382 for (
uint8 i = 0; i < 3; ++i) {
387 std::string res = str1;
397 float seconds =
m_stamp - 1000;
399 float hours = minutes/60;
400 float days = hours/24;
401 float weeks = days/7;
402 float months = days/30;
404 int s(fmod(seconds, 60));
405 int m(fmod(minutes, 60));
406 int h(fmod(hours, 24));
407 int d(fmod(days, 7));
408 int w(fmod(weeks, 4));
409 int M(fmod(months, 12));
411 std::ostringstream uptime;
413 uptime << M <<
"M" << w <<
"w" << d <<
"d" << h <<
"h" << m <<
"m" << s <<
"s";
415 uptime << w <<
"w" << d <<
"d" << h <<
"h" << m <<
"m" << s <<
"s";
417 uptime << d <<
"d" << h <<
"h" << m <<
"m" << s <<
"s";
419 uptime << h <<
"h" << m <<
"m" << s <<
"s";
421 uptime << m <<
"m" << s <<
"s";
437 std::map<uint32, Client*> cMap;
438 std::map<uint32, corpRole>::const_iterator cItr =
m_corpMembers.find(corpID);
448 corpRole::const_iterator itr = cItr->second.begin(), end = cItr->second.end();
455 cMap.emplace(itr->first->GetCharacterID(), itr->first);
468 cMap.emplace(itr->first->GetCharacterID(), itr->first);
480 if (mdb.
HasShares(itr->first->GetCharacterID(), corpID))
481 cMap.emplace(itr->first->GetCharacterID(), itr->first);
561 cMap.emplace(itr->first->GetCharacterID(), itr->first);
570 cMap.emplace(itr->first->GetCharacterID(), itr->first);
577 cMap.emplace(itr->first->GetCharacterID(), itr->first);
579 cMap.emplace(itr->first->GetCharacterID(), itr->first);
582 cMap.emplace(itr->first->GetCharacterID(), itr->first);
589 cMap.emplace(itr->first->GetCharacterID(), itr->first);
596 cMap.emplace(itr->first->GetCharacterID(), itr->first);
602 for (
auto cur : cMap) {
604 cur.second->SendNotification( notifyType, idType, payload,
false );
614 notify.
args = *payload;
627 cur.second->SendNotification(dest, noti);
631 std::map<uint32, Client*>::const_iterator itr =
m_players.begin();
632 for (
auto cur : cset) {
635 itr->second->SendNotification(dest, noti);
642 PyTuple* payload = *in_payload;
643 in_payload =
nullptr;
645 std::vector<Client*> cVec;
651 }
else if (
sDataMgr.IsSolarSystem(targID)) {
653 if (pSysMgr ==
nullptr)
657 sLog.Error(
"EntityList::Multicast 1",
"DEST__LOCATION - location %u is neither station nor system", targID);
662 std::map<uint32, corpRole>::const_iterator cItr =
m_corpMembers.find(targID);
665 corpRole::const_iterator itr = cItr->second.begin();
666 while (itr != cItr->second.end()) {
667 cVec.push_back(itr->first);
673 for (
auto cur : cVec) {
675 cur->SendNotification( notifyType, idType, &payload, seq );
685 PyTuple* payload = *in_payload;
686 in_payload =
nullptr;
690 std::map<uint32, Client*>::iterator itr =
m_players.find(cur);
693 itr->second->SendNotification( notifyType, idType, &payload, seq );
699 std::vector<Client*> cVec;
704 }
else if (
sDataMgr.IsSolarSystem(cur)) {
706 if (pSysMgr ==
nullptr)
710 sLog.Error(
"EntityList::Multicast 2",
"location %u is neither station nor system", cur);
714 for (
auto cur : cVec) {
716 cur->SendNotification( notifyType, idType, &payload, seq );
722 sLog.Error(
"EntityList::Multicast 2",
"Corporation MulticastTarget called.");
725 std::map<uint32, corpRole>::const_iterator cItr =
m_corpMembers.find(cur);
728 corpRole::const_iterator itr = cItr->second.begin();
729 while (itr != cItr->second.end()) {
731 itr->first->SendNotification( notifyType, idType, &payload, seq );
743 PyTuple* payload = *in_payload;
744 in_payload =
nullptr;
746 std::map<uint32, Client*>::const_iterator itr =
m_players.begin();
747 for (
auto cur : cset) {
751 itr->second->SendNotification(notifyType, idType, &payload, seq);
759 if (pClient !=
nullptr)
769 if (cRef.
get() !=
nullptr)
770 if (strcmp(cRef->
name(), name) == 0)
780 std::set<int64>::iterator cur =
m_sessions.find(sessionID);
781 std::pair<std::_Rb_tree_const_iterator<int64>,
bool > test;
#define sConfig
A macro for easier access to the singleton.
void AddPlayer(Client *pClient)
#define IsNPCCorp(itemID)
void SendNotification(const PyAddress &dest, EVENotificationStream ¬i, bool seq=true)
std::set< uint32 > corporations
std::map< uint32, Agent * > m_agents
PyRep * PyIsOnline(uint32 charID)
#define _log(type, fmt,...)
std::map< uint32, SystemManager * > m_systems
void RemovePlayer(Client *pClient)
void Unicast(uint32 charID, const char *notifyType, const char *idType, PyTuple **payload, bool seq=true)
int64 GetCorpRole() const
Agent * GetAgent(uint32 agentID)
Client * FindClientByName(const char *name) const
StationItemRef GetStationByID(uint32 stationID)
std::unordered_map< SystemEntity *, TargetManager * > m_targMgrs
void Add(Client *pClient)
int32 GetCharacterID() const
int32 GetCorporationID() const
void GetCorpClients(std::vector< Client * > &result, uint32 corpID) const
void GetClientList(std::vector< Client * > &cVec)
std::map< Client *, int64 > corpRole
static uint32 SetClientSeed()
Respawn timer checks every u minutes
void AddStation(uint32 stationID, StationItemRef itemRef)
std::map< uint32, ProbeSE * > m_probes
void Broadcast(const char *notifyType, const char *idType, PyTuple **payload) const
void SafeDelete(T *&p)
Deletes and nullifies a pointer.
void RegisterSID(int64 &sessionID)
std::map< uint32, corpRole > m_corpMembers
#define is_log_enabled(type)
#define sLog
Evaluates to a NewLog instance.
void RemoveSID(int64 sessionID)
void Multicast(const char *notifyType, const char *idType, PyTuple **in_payload, NotificationDestination target, uint32 target_id, bool seq=true)
static void ManipulateTimeData()
SystemManager * FindOrBootSystem(uint32 systemID)
void GetStationGuestList(uint32 stationID, std::vector< Client * > &result) const
bool Check(bool reset=true)
#define IsPlayerCorp(itemID)
std::string GetAnomalyID()
void RemoveStation(uint32 stationID)
static const char alphaList[]
T str2(const char *str)
Generic string conversion template.
std::set< uint32 > characters
std::map< uint32, StationItemRef > m_stations
std::set< uint32 > character_set
int64 MakeRandomInt(int64 low, int64 high)
Generates random integer from interval [low; high].
std::map< uint32, Client * > m_players
void GetClients(std::vector< Client * > &result) const
PyServiceMgr * m_services
Client * FindClientByCharID(uint32 charID) const
void Remove(Client *pClient)
bool IsOnline(uint32 charID)
void GetUpTime(std::string &time)
void CorpNotify(uint32 corpID, uint8 bCastType, const char *notifyType, const char *idType, PyTuple *payload) const
std::set< int64 > m_sessions
std::set< uint32 > locations
bool HasShares(uint32 charID, uint32 corpID)
void Start(uint32 setTimerTime=0, bool changeResetTimer=true)
std::vector< Client * > m_clients