Add client and zone subscriptions

This commit is contained in:
KimLS 2017-01-13 23:46:20 -08:00
parent 83b51b04d3
commit 28325467da
7 changed files with 110 additions and 8 deletions

View File

@ -2,7 +2,8 @@ const WebSocket = require('ws');
const ws = new WebSocket('ws://localhost:9080'); const ws = new WebSocket('ws://localhost:9080');
ws.on('open', function open() { ws.on('open', function open() {
ws.send(JSON.stringify({authorization: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6IktTcHJpdGUxIiwiZXhwIjoxNDg0NzIzNDQxLCJpYXQiOjE0ODQxMTg2NDF9.Lmwm572yMWIu1DUrfer8JVvl1DGEkdnMsMFp5WDzp_A', id: '1', method: 'EQW::Subscribe::WorldZoneUpdate', params: []})); //ws.send(JSON.stringify({authorization: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6IktTcHJpdGUxIiwiZXhwIjoxNDg0NzIzNDQxLCJpYXQiOjE0ODQxMTg2NDF9.Lmwm572yMWIu1DUrfer8JVvl1DGEkdnMsMFp5WDzp_A', method: 'EQW::ZoneUpdate::Subscribe'}));
ws.send(JSON.stringify({authorization: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6IktTcHJpdGUxIiwiZXhwIjoxNDg0NzIzNDQxLCJpYXQiOjE0ODQxMTg2NDF9.Lmwm572yMWIu1DUrfer8JVvl1DGEkdnMsMFp5WDzp_A', method: 'EQW::ClientUpdate::Subscribe'}));
}); });
ws.on('message', function(data, flags) { ws.on('message', function(data, flags) {

View File

@ -4,7 +4,8 @@ var RegisterEQW = function(wsi, api) {
common.Register('EQW::IsLocked', wsi, api); common.Register('EQW::IsLocked', wsi, api);
common.Register('EQW::Lock', wsi, api); common.Register('EQW::Lock', wsi, api);
common.Register('EQW::Unlock', wsi, api); common.Register('EQW::Unlock', wsi, api);
common.RegisterSubscription('EQW', 'WorldZoneUpdate', wsi, api); common.RegisterSubscription('EQW::ZoneUpdate', wsi, api);
common.RegisterSubscription('EQW::ClientUpdate', wsi, api);
}; };
module.exports = { module.exports = {

View File

@ -11,12 +11,12 @@ function Register(name, wsi, api) {
}, true); }, true);
} }
function RegisterSubscription(namespace, event, wsi, api) { function RegisterSubscription(event, wsi, api) {
wsi.Register(namespace + '::Subscribe::' + event, function(request) { wsi.Register(event + '::Subscribe', function(request) {
api.Subscribe(event, request.ws); api.Subscribe(event, request.ws);
}); });
wsi.Register(namespace + '::Unsubscribe::' + event, function(request) { wsi.Register(event + '::Unsubscribe', function(request) {
api.Unsubscribe(event, request.ws); api.Unsubscribe(event, request.ws);
}); });
} }

View File

@ -46,6 +46,10 @@ ClientListEntry::ClientListEntry(uint32 in_id, uint32 iLSID, const char* iLoginN
plocal=(local==1); plocal=(local==1);
pinstance = 0; pinstance = 0;
pLFGFromLevel = 0;
pLFGToLevel = 0;
pLFGMatchFilter = false;
memset(pLFGComments, 0, 64);
} }
ClientListEntry::ClientListEntry(uint32 in_id, uint32 iAccID, const char* iAccName, MD5& iMD5Pass, int16 iAdmin) ClientListEntry::ClientListEntry(uint32 in_id, uint32 iAccID, const char* iAccName, MD5& iMD5Pass, int16 iAdmin)
@ -63,6 +67,10 @@ ClientListEntry::ClientListEntry(uint32 in_id, uint32 iAccID, const char* iAccNa
padmin = iAdmin; padmin = iAdmin;
pinstance = 0; pinstance = 0;
pLFGFromLevel = 0;
pLFGToLevel = 0;
pLFGMatchFilter = false;
memset(pLFGComments, 0, 64);
} }
ClientListEntry::ClientListEntry(uint32 in_id, ZoneServer* iZS, ServerClientList_Struct* scl, int8 iOnline) ClientListEntry::ClientListEntry(uint32 in_id, ZoneServer* iZS, ServerClientList_Struct* scl, int8 iOnline)
@ -81,6 +89,10 @@ ClientListEntry::ClientListEntry(uint32 in_id, ZoneServer* iZS, ServerClientList
padmin = scl->Admin; padmin = scl->Admin;
pinstance = 0; pinstance = 0;
pLFGFromLevel = 0;
pLFGToLevel = 0;
pLFGMatchFilter = false;
memset(pLFGComments, 0, 64);
if (iOnline >= CLE_Status_Zoning) if (iOnline >= CLE_Status_Zoning)
Update(iZS, scl, iOnline); Update(iZS, scl, iOnline);

View File

@ -29,10 +29,13 @@
#include "../common/packet_dump.h" #include "../common/packet_dump.h"
#include "../common/misc.h" #include "../common/misc.h"
#include "../common/misc_functions.h" #include "../common/misc_functions.h"
#include "../common/json/json.h"
#include "web_interface.h"
#include "wguild_mgr.h" #include "wguild_mgr.h"
#include <set> #include <set>
extern WebInterfaceList web_interface;
extern ZSList zoneserver_list; extern ZSList zoneserver_list;
uint32 numplayers = 0; //this really wants to be a member variable of ClientList... uint32 numplayers = 0; //this really wants to be a member variable of ClientList...
@ -40,6 +43,8 @@ ClientList::ClientList()
: CLStale_timer(45000) : CLStale_timer(45000)
{ {
NextCLEID = 1; NextCLEID = 1;
m_tick.reset(new EQ::Timer(1000, true, std::bind(&ClientList::OnTick, this, std::placeholders::_1)));
} }
ClientList::~ClientList() { ClientList::~ClientList() {
@ -1358,3 +1363,83 @@ void ClientList::SendClientVersionSummary(const char *Name)
ClientTitaniumCount, ClientSoFCount, ClientSoDCount, ClientUnderfootCount, ClientRoFCount, ClientRoF2Count); ClientTitaniumCount, ClientSoFCount, ClientSoDCount, ClientUnderfootCount, ClientRoFCount, ClientRoF2Count);
} }
void ClientList::OnTick(EQ::Timer *t)
{
Json::Value out;
out["event"] = "EQW::ClientUpdate";
out["data"] = Json::Value();
LinkedListIterator<ClientListEntry*> Iterator(clientlist);
Iterator.Reset();
while (Iterator.MoreElements())
{
ClientListEntry* cle = Iterator.GetData();
Json::Value outclient;
outclient["Online"] = cle->Online();
outclient["ID"] = cle->GetID();
outclient["IP"] = cle->GetIP();
outclient["LSID"] = cle->LSID();
outclient["LSAccountID"] = cle->LSAccountID();
outclient["LSName"] = cle->LSName();
outclient["WorldAdmin"] = cle->WorldAdmin();
outclient["AccountID"] = cle->AccountID();
outclient["AccountName"] = cle->AccountName();
outclient["Admin"] = cle->Admin();
auto server = cle->Server();
if (server) {
outclient["Server"]["CAddress"] = server->GetCAddress();
outclient["Server"]["CLocalAddress"] = server->GetCLocalAddress();
outclient["Server"]["CompileTime"] = server->GetCompileTime();
outclient["Server"]["CPort"] = server->GetCPort();
outclient["Server"]["ID"] = server->GetID();
outclient["Server"]["InstanceID"] = server->GetInstanceID();
outclient["Server"]["IP"] = server->GetIP();
outclient["Server"]["LaunchedName"] = server->GetLaunchedName();
outclient["Server"]["LaunchName"] = server->GetLaunchName();
outclient["Server"]["Port"] = server->GetPort();
outclient["Server"]["PrevZoneID"] = server->GetPrevZoneID();
outclient["Server"]["UUID"] = server->GetUUID();
outclient["Server"]["ZoneID"] = server->GetZoneID();
outclient["Server"]["ZoneLongName"] = server->GetZoneLongName();
outclient["Server"]["ZoneName"] = server->GetZoneName();
outclient["Server"]["ZoneOSProcessID"] = server->GetZoneOSProcessID();
outclient["Server"]["NumPlayers"] = server->NumPlayers();
outclient["Server"]["BootingUp"] = server->IsBootingUp();
outclient["Server"]["StaticZone"] = server->IsStaticZone();
}
else {
outclient["Server"] = Json::Value();
}
outclient["CharID"] = cle->CharID();
outclient["name"] = cle->name();
outclient["zone"] = cle->zone();
outclient["instance"] = cle->instance();
outclient["level"] = cle->level();
outclient["class_"] = cle->class_();
outclient["race"] = cle->race();
outclient["Anon"] = cle->Anon();
outclient["TellsOff"] = cle->TellsOff();
outclient["GuildID"] = cle->GuildID();
outclient["LFG"] = cle->LFG();
outclient["GM"] = cle->GetGM();
outclient["LocalClient"] = cle->IsLocalClient();
outclient["LFGFromLevel"] = cle->GetLFGFromLevel();
outclient["LFGToLevel"] = cle->GetLFGToLevel();
outclient["LFGMatchFilter"] = cle->GetLFGMatchFilter();
outclient["LFGComments"] = cle->GetLFGComments();
outclient["ClientVersion"] = cle->GetClientVersion();
out["data"].append(outclient);
Iterator.Advance();
}
web_interface.SendEvent(out);
}

View File

@ -6,6 +6,7 @@
#include "../common/timer.h" #include "../common/timer.h"
#include "../common/rulesys.h" #include "../common/rulesys.h"
#include "../common/servertalk.h" #include "../common/servertalk.h"
#include "../common/event/timer.h"
#include <vector> #include <vector>
#include <string> #include <string>
@ -66,7 +67,8 @@ public:
int GetClientCount(); int GetClientCount();
void GetClients(const char *zone_name, std::vector<ClientListEntry *> &into); void GetClients(const char *zone_name, std::vector<ClientListEntry *> &into);
protected: private:
void OnTick(EQ::Timer *t);
inline uint32 GetNextCLEID() { return NextCLEID++; } inline uint32 GetNextCLEID() { return NextCLEID++; }
//this is the list of people actively connected to zone //this is the list of people actively connected to zone
@ -77,6 +79,7 @@ protected:
uint32 NextCLEID; uint32 NextCLEID;
LinkedList<ClientListEntry *> clientlist; LinkedList<ClientListEntry *> clientlist;
std::unique_ptr<EQ::Timer> m_tick;
}; };
#endif /*CLIENTLIST_H_*/ #endif /*CLIENTLIST_H_*/

View File

@ -699,7 +699,7 @@ void ZSList::WorldShutDown(uint32 time, uint32 interval)
void ZSList::OnTick(EQ::Timer *t) void ZSList::OnTick(EQ::Timer *t)
{ {
Json::Value out; Json::Value out;
out["event"] = "WorldZoneUpdate"; out["event"] = "EQW::ZoneUpdate";
out["data"] = Json::Value(); out["data"] = Json::Value();
for (auto &zone : list) for (auto &zone : list)