From 374841cba090943ea343a9fc9106185462d2dbb8 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sun, 10 Mar 2019 01:43:07 -0600 Subject: [PATCH] Add call api get_client_list --- world/clientlist.cpp | 79 +++++++++++++++++++++++++- world/clientlist.h | 4 ++ world/eqemu_api_world_data_service.cpp | 12 +++- 3 files changed, 93 insertions(+), 2 deletions(-) diff --git a/world/clientlist.cpp b/world/clientlist.cpp index eb821b22f..8c98adc5c 100644 --- a/world/clientlist.cpp +++ b/world/clientlist.cpp @@ -1489,4 +1489,81 @@ void ClientList::OnTick(EQ::Timer *t) } web_interface.SendEvent(out); -} \ No newline at end of file +} + +/** + * @param response + */ +void ClientList::GetClientList(Json::Value &response) +{ + LinkedListIterator Iterator(clientlist); + + Iterator.Reset(); + + while (Iterator.MoreElements()) { + ClientListEntry *cle = Iterator.GetData(); + + Json::Value row; + + row["online"] = cle->Online(); + row["id"] = cle->GetID(); + row["ip"] = cle->GetIP(); + row["loginserver_id"] = cle->LSID(); + row["loginserver_account_id"] = cle->LSAccountID(); + row["loginserver_name"] = cle->LSName(); + row["world_admin"] = cle->WorldAdmin(); + row["account_id"] = cle->AccountID(); + row["account_name"] = cle->AccountName(); + row["admin"] = cle->Admin(); + + auto server = cle->Server(); + if (server) { + row["server"]["client_address"] = server->GetCAddress(); + row["server"]["client_local_address"] = server->GetCLocalAddress(); + row["server"]["compile_time"] = server->GetCompileTime(); + row["server"]["client_port"] = server->GetCPort(); + row["server"]["id"] = server->GetID(); + row["server"]["instance_id"] = server->GetInstanceID(); + row["server"]["ip"] = server->GetIP(); + row["server"]["launched_name"] = server->GetLaunchedName(); + row["server"]["launch_name"] = server->GetLaunchName(); + row["server"]["port"] = server->GetPort(); + row["server"]["previous_zone_id"] = server->GetPrevZoneID(); + 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"]["number_players"] = server->NumPlayers(); + row["server"]["is_booting"] = server->IsBootingUp(); + row["server"]["static_zone"] = server->IsStaticZone(); + } + else { + row["server"] = Json::Value(); + } + + row["character_id"] = cle->CharID(); + row["name"] = cle->name(); + row["zone"] = cle->zone(); + row["instance"] = cle->instance(); + row["level"] = cle->level(); + row["class"] = cle->class_(); + row["race"] = cle->race(); + row["anon"] = cle->Anon(); + + row["tells_off"] = cle->TellsOff(); + row["guild_id"] = cle->GuildID(); + row["lfg"] = cle->LFG(); + row["gm"] = cle->GetGM(); + row["is_local_client"] = cle->IsLocalClient(); + row["lfg_from_level"] = cle->GetLFGFromLevel(); + row["lfg_to_level"] = cle->GetLFGToLevel(); + row["lfg_match_filter"] = cle->GetLFGMatchFilter(); + row["lfg_comments"] = cle->GetLFGComments(); + row["client_version"] = cle->GetClientVersion(); + + response.append(row); + + Iterator.Advance(); + } +} diff --git a/world/clientlist.h b/world/clientlist.h index 4cee08a7f..3ca6291c2 100644 --- a/world/clientlist.h +++ b/world/clientlist.h @@ -3,6 +3,7 @@ #include "../common/eq_packet_structs.h" #include "../common/linked_list.h" +#include "../common/json/json.h" #include "../common/timer.h" #include "../common/rulesys.h" #include "../common/servertalk.h" @@ -69,6 +70,8 @@ public: int GetClientCount(); void GetClients(const char *zone_name, std::vector &into); + void GetClientList(Json::Value &response); + private: void OnTick(EQ::Timer *t); inline uint32 GetNextCLEID() { return NextCLEID++; } @@ -81,6 +84,7 @@ private: uint32 NextCLEID; LinkedList clientlist; + std::unique_ptr m_tick; }; diff --git a/world/eqemu_api_world_data_service.cpp b/world/eqemu_api_world_data_service.cpp index 327bb298b..8a5291824 100644 --- a/world/eqemu_api_world_data_service.cpp +++ b/world/eqemu_api_world_data_service.cpp @@ -18,11 +18,14 @@ * */ +#include "clientlist.h" +#include "cliententry.h" #include "eqemu_api_world_data_service.h" #include "zoneserver.h" #include "zonelist.h" -extern ZSList zoneserver_list; +extern ZSList zoneserver_list; +extern ClientList client_list; void callGetZoneList(Json::Value &response) { @@ -53,6 +56,10 @@ void callGetZoneList(Json::Value &response) } } +void callGetClientList(Json::Value &response) +{ + client_list.GetClientList(response); +} void EQEmuApiWorldDataService::get(Json::Value &response, const std::vector &args) { @@ -61,4 +68,7 @@ void EQEmuApiWorldDataService::get(Json::Value &response, const std::vector