diff --git a/world/clientlist.cpp b/world/clientlist.cpp index 72234731b..5f5d6c516 100644 --- a/world/clientlist.cpp +++ b/world/clientlist.cpp @@ -1608,7 +1608,7 @@ void ClientList::OnTick(EQ::Timer *t) /** * @param response */ -void ClientList::GetClientList(Json::Value &response) +void ClientList::GetClientList(Json::Value &response, bool full_list) { LinkedListIterator Iterator(clientlist); @@ -1619,62 +1619,68 @@ void ClientList::GetClientList(Json::Value &response) Json::Value row; - row["account_id"] = cle->AccountID(); - row["account_name"] = cle->AccountName(); - row["admin"] = cle->Admin(); - row["id"] = cle->GetID(); - row["ip"] = cle->GetIP(); - row["loginserver_account_id"] = cle->LSAccountID(); - row["loginserver_id"] = cle->LSID(); - row["loginserver_name"] = cle->LSName(); - row["online"] = cle->Online(); - row["world_admin"] = cle->WorldAdmin(); + row["id"] = cle->GetID(); + row["name"] = cle->name(); + row["level"] = cle->level(); + row["ip"] = cle->GetIP(); + row["gm"] = cle->GetGM(); + row["race"] = cle->race(); + row["class"] = cle->class_(); + row["client_version"] = cle->GetClientVersion(); + row["admin"] = cle->Admin(); + row["account_id"] = cle->AccountID(); + row["account_name"] = cle->AccountName(); + row["character_id"] = cle->CharID(); + row["anon"] = cle->Anon(); + row["guild_id"] = cle->GuildID(); + + if (full_list) { + row["loginserver_account_id"] = cle->LSAccountID(); + row["loginserver_id"] = cle->LSID(); + row["loginserver_name"] = cle->LSName(); + row["online"] = cle->Online(); + row["world_admin"] = cle->WorldAdmin(); + row["guild_rank"] = cle->GuildRank(); + row["guild_tribute_opt_in"] = cle->GuildTributeOptIn(); + row["instance"] = cle->instance(); + row["is_local_client"] = cle->IsLocalClient(); + row["lfg"] = cle->LFG(); + row["lfg_comments"] = cle->GetLFGComments(); + row["lfg_from_level"] = cle->GetLFGFromLevel(); + row["lfg_match_filter"] = cle->GetLFGMatchFilter(); + row["lfg_to_level"] = cle->GetLFGToLevel(); + row["tells_off"] = cle->TellsOff(); + row["zone"] = cle->zone(); + } auto server = cle->Server(); if (server) { - row["server"]["client_address"] = server->GetCAddress(); - row["server"]["client_local_address"] = server->GetCLocalAddress(); - row["server"]["client_port"] = server->GetCPort(); - row["server"]["compile_time"] = server->GetCompileTime(); - row["server"]["id"] = server->GetID(); - row["server"]["instance_id"] = server->GetInstanceID(); - row["server"]["ip"] = server->GetIP(); - row["server"]["is_booting"] = server->IsBootingUp(); - row["server"]["launch_name"] = server->GetLaunchName(); - row["server"]["launched_name"] = server->GetLaunchedName(); - row["server"]["number_players"] = server->NumPlayers(); - row["server"]["port"] = server->GetPort(); - row["server"]["previous_zone_id"] = server->GetPrevZoneID(); - row["server"]["static_zone"] = server->IsStaticZone(); - row["server"]["uui"] = server->GetUUID(); - row["server"]["zone_id"] = server->GetZoneID(); - row["server"]["zone_long_name"] = server->GetZoneLongName(); - row["server"]["zone_name"] = server->GetZoneName(); - row["server"]["zone_os_pid"] = server->GetZoneOSProcessID(); + row["server"]["zone_id"] = server->GetZoneID(); + row["server"]["zone_long_name"] = server->GetZoneLongName(); + row["server"]["zone_name"] = server->GetZoneName(); + row["server"]["zone_os_pid"] = server->GetZoneOSProcessID(); + row["server"]["id"] = server->GetID(); + + if (full_list) { + row["server"]["client_address"] = server->GetCAddress(); + row["server"]["client_local_address"] = server->GetCLocalAddress(); + row["server"]["client_port"] = server->GetCPort(); + row["server"]["compile_time"] = server->GetCompileTime(); + row["server"]["instance_id"] = server->GetInstanceID(); + row["server"]["ip"] = server->GetIP(); + row["server"]["is_booting"] = server->IsBootingUp(); + row["server"]["launch_name"] = server->GetLaunchName(); + row["server"]["launched_name"] = server->GetLaunchedName(); + row["server"]["number_players"] = server->NumPlayers(); + row["server"]["port"] = server->GetPort(); + row["server"]["previous_zone_id"] = server->GetPrevZoneID(); + row["server"]["static_zone"] = server->IsStaticZone(); + row["server"]["uui"] = server->GetUUID(); + } } else { row["server"] = Json::Value(); } - row["anon"] = cle->Anon(); - row["character_id"] = cle->CharID(); - row["class"] = cle->class_(); - row["client_version"] = cle->GetClientVersion(); - row["gm"] = cle->GetGM(); - row["guild_id"] = cle->GuildID(); - row["guild_rank"] = cle->GuildRank(); - row["guild_tribute_opt_in"] = cle->GuildTributeOptIn(); - row["instance"] = cle->instance(); - row["is_local_client"] = cle->IsLocalClient(); - row["level"] = cle->level(); - row["lfg"] = cle->LFG(); - row["lfg_comments"] = cle->GetLFGComments(); - row["lfg_from_level"] = cle->GetLFGFromLevel(); - row["lfg_match_filter"] = cle->GetLFGMatchFilter(); - row["lfg_to_level"] = cle->GetLFGToLevel(); - row["name"] = cle->name(); - row["race"] = cle->race(); - row["tells_off"] = cle->TellsOff(); - row["zone"] = cle->zone(); response.append(row); diff --git a/world/clientlist.h b/world/clientlist.h index b805ade6a..5578f9e7c 100644 --- a/world/clientlist.h +++ b/world/clientlist.h @@ -68,7 +68,7 @@ public: int GetClientCount(); void GetClients(const char *zone_name, std::vector &into); - void GetClientList(Json::Value &response); + void GetClientList(Json::Value &response, bool full_list = false); void GetGuildClientList(Json::Value& response, uint32 guild_id); void SendCharacterMessage(uint32_t character_id, int chat_type, const std::string& message); diff --git a/world/eqemu_api_world_data_service.cpp b/world/eqemu_api_world_data_service.cpp index 4277856a4..7a15162e7 100644 --- a/world/eqemu_api_world_data_service.cpp +++ b/world/eqemu_api_world_data_service.cpp @@ -111,9 +111,17 @@ void callGetDatabaseSchema(Json::Value &response) response.append(schema); } -void callGetClientList(Json::Value &response) +void callGetClientList(Json::Value &response, const std::vector &args) { - client_list.GetClientList(response); + // if args has "full" + bool full_list = false; + if (args.size() > 1) { + if (args[1] == "full") { + full_list = true; + } + } + + client_list.GetClientList(response, full_list); } void getReloadTypes(Json::Value &response) @@ -127,6 +135,12 @@ void getReloadTypes(Json::Value &response) } } +void getServerCounts(Json::Value &response, const std::vector &args) +{ + response["zone_count"] = zoneserver_list.GetServerListCount(); + response["client_count"] = client_list.GetClientCount(); +} + void EQEmuApiWorldDataService::reload(Json::Value &r, const std::vector &args) { std::vector commands{}; @@ -174,7 +188,7 @@ void EQEmuApiWorldDataService::get(Json::Value &r, const std::vectorLocked; } @@ -192,7 +209,6 @@ void EQEmuApiWorldDataService::get(Json::Value &r, const std::vector &args) { - std::string command = !args[1].empty() ? args[1] : ""; if (command.empty()) { return; diff --git a/world/zonelist.h b/world/zonelist.h index ed08e18a2..0a6450489 100644 --- a/world/zonelist.h +++ b/world/zonelist.h @@ -72,6 +72,7 @@ public: ZoneServer* FindByZoneID(uint32 ZoneID); const std::list> &getZoneServerList() const; + inline uint32_t GetServerListCount() { return zone_server_list.size(); } void SendServerReload(ServerReload::Type type, uchar *packet = nullptr); private: