mirror of
https://github.com/RetroShare/RetroShare.git
synced 2025-06-20 12:24:24 -04:00
added mechanism to allow services to document the names of their items, and improved bandwidth graph to show names for GXS services. Other services still need to supply their own names
This commit is contained in:
parent
f406b81238
commit
5f8bf03dfe
15 changed files with 280 additions and 81 deletions
|
@ -328,6 +328,23 @@ RsGxsNetService::RsGxsNetService(uint16_t servType, RsGeneralDataService *gds,
|
||||||
mUpdateCounter = 0;
|
mUpdateCounter = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void RsGxsNetService::getItemNames(std::map<uint8_t,std::string>& names) const
|
||||||
|
{
|
||||||
|
names.clear();
|
||||||
|
|
||||||
|
names[RS_PKT_SUBTYPE_NXS_SYNC_GRP_REQ_ITEM ] = "Group Sync Request" ;
|
||||||
|
names[RS_PKT_SUBTYPE_NXS_SYNC_GRP_ITEM ] = "Group Sync" ;
|
||||||
|
names[RS_PKT_SUBTYPE_NXS_SYNC_GRP_STATS_ITEM ] = "Group Stats" ;
|
||||||
|
names[RS_PKT_SUBTYPE_NXS_GRP_ITEM ] = "Group Data" ;
|
||||||
|
names[RS_PKT_SUBTYPE_NXS_ENCRYPTED_DATA_ITEM ] = "Encrypted data" ;
|
||||||
|
names[RS_PKT_SUBTYPE_NXS_SESSION_KEY_ITEM ] = "Session Key" ;
|
||||||
|
names[RS_PKT_SUBTYPE_NXS_SYNC_MSG_ITEM ] = "Message Sync" ;
|
||||||
|
names[RS_PKT_SUBTYPE_NXS_SYNC_MSG_REQ_ITEM ] = "Message Sync Request" ;
|
||||||
|
names[RS_PKT_SUBTYPE_NXS_MSG_ITEM ] = "Message Data" ;
|
||||||
|
names[RS_PKT_SUBTYPE_NXS_TRANSAC_ITEM ] = "Transaction" ;
|
||||||
|
names[RS_PKT_SUBTYPE_NXS_GRP_PUBLISH_KEY_ITEM ] = "Publish key" ;
|
||||||
|
}
|
||||||
|
|
||||||
RsGxsNetService::~RsGxsNetService()
|
RsGxsNetService::~RsGxsNetService()
|
||||||
{
|
{
|
||||||
RS_STACK_MUTEX(mNxsMutex) ;
|
RS_STACK_MUTEX(mNxsMutex) ;
|
||||||
|
|
|
@ -99,6 +99,7 @@ public:
|
||||||
|
|
||||||
virtual RsServiceInfo getServiceInfo() { return mServiceInfo; }
|
virtual RsServiceInfo getServiceInfo() { return mServiceInfo; }
|
||||||
|
|
||||||
|
virtual void getItemNames(std::map<uint8_t,std::string>& names) const ;
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -29,7 +29,9 @@
|
||||||
#include "serialiser/rsserviceids.h"
|
#include "serialiser/rsserviceids.h"
|
||||||
#include "serialiser/rsserial.h"
|
#include "serialiser/rsserial.h"
|
||||||
#include "serialiser/rsbaseserial.h"
|
#include "serialiser/rsbaseserial.h"
|
||||||
|
#include "serialiser/rsnxsitems.h"
|
||||||
#include "pqi/p3cfgmgr.h"
|
#include "pqi/p3cfgmgr.h"
|
||||||
|
#include "pqi/pqiservice.h"
|
||||||
|
|
||||||
/*******************************/
|
/*******************************/
|
||||||
// #define SERVICECONTROL_DEBUG 1
|
// #define SERVICECONTROL_DEBUG 1
|
||||||
|
@ -138,7 +140,7 @@ public:
|
||||||
std::cerr << __PRETTY_FUNCTION__ << ": error while deserialising! Item will be dropped." << std::endl;
|
std::cerr << __PRETTY_FUNCTION__ << ": error while deserialising! Item will be dropped." << std::endl;
|
||||||
return NULL ;
|
return NULL ;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* add mandatory parts first */
|
/* add mandatory parts first */
|
||||||
ok &= getRawUInt32(data, rssize, &offset, &item->mServiceId);
|
ok &= getRawUInt32(data, rssize, &offset, &item->mServiceId);
|
||||||
ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_NAME, item->mServiceName);
|
ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_NAME, item->mServiceName);
|
||||||
|
@ -248,6 +250,13 @@ const RsPeerId& p3ServiceControl::getOwnId()
|
||||||
return mOwnPeerId;
|
return mOwnPeerId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool p3ServiceControl::getServiceItemNames(uint32_t serviceId,std::map<uint8_t,std::string>& names)
|
||||||
|
{
|
||||||
|
if(mServiceServer != NULL)
|
||||||
|
return mServiceServer->getServiceItemNames(serviceId,names) ;
|
||||||
|
|
||||||
|
return false ;
|
||||||
|
}
|
||||||
|
|
||||||
/* Interface for Services */
|
/* Interface for Services */
|
||||||
bool p3ServiceControl::registerService(const RsServiceInfo &info, bool defaultOn)
|
bool p3ServiceControl::registerService(const RsServiceInfo &info, bool defaultOn)
|
||||||
|
@ -537,7 +546,7 @@ bool p3ServiceControl::updateServicePermissions(uint32_t serviceId, const RsServ
|
||||||
{
|
{
|
||||||
for(pit = onlinePeers.begin(); pit != onlinePeers.end(); ++pit)
|
for(pit = onlinePeers.begin(); pit != onlinePeers.end(); ++pit)
|
||||||
{
|
{
|
||||||
if (it->second.peerHasPermission(*pit) !=
|
if (it->second.peerHasPermission(*pit) !=
|
||||||
permissions.peerHasPermission(*pit))
|
permissions.peerHasPermission(*pit))
|
||||||
{
|
{
|
||||||
mUpdatedSet.insert(*pit);
|
mUpdatedSet.insert(*pit);
|
||||||
|
@ -597,7 +606,7 @@ bool p3ServiceControl::checkFilter(uint32_t serviceId, const RsPeerId &peerId)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// must allow ServiceInfo through, or we have nothing!
|
// must allow ServiceInfo through, or we have nothing!
|
||||||
#define FULLID_SERVICEINFO ((((uint32_t) RS_PKT_VERSION_SERVICE) << 24) + ((RS_SERVICE_TYPE_SERVICEINFO) << 8))
|
#define FULLID_SERVICEINFO ((((uint32_t) RS_PKT_VERSION_SERVICE) << 24) + ((RS_SERVICE_TYPE_SERVICEINFO) << 8))
|
||||||
|
|
||||||
//if (serviceId == RS_SERVICE_TYPE_SERVICEINFO)
|
//if (serviceId == RS_SERVICE_TYPE_SERVICEINFO)
|
||||||
if (serviceId == FULLID_SERVICEINFO)
|
if (serviceId == FULLID_SERVICEINFO)
|
||||||
|
@ -691,21 +700,21 @@ bool ServiceInfoCompatible(const RsServiceInfo &info1, const RsServiceInfo &info
|
||||||
}
|
}
|
||||||
|
|
||||||
// ensure that info1 meets minimum requirements for info2
|
// ensure that info1 meets minimum requirements for info2
|
||||||
if (!versionOkay(info1.mVersionMajor, info1.mVersionMinor,
|
if (!versionOkay(info1.mVersionMajor, info1.mVersionMinor,
|
||||||
info2.mMinVersionMajor, info2.mMinVersionMinor))
|
info2.mMinVersionMajor, info2.mMinVersionMinor))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ensure that info2 meets minimum requirements for info1
|
// ensure that info2 meets minimum requirements for info1
|
||||||
if (!versionOkay(info2.mVersionMajor, info2.mVersionMinor,
|
if (!versionOkay(info2.mVersionMajor, info2.mVersionMinor,
|
||||||
info1.mMinVersionMajor, info1.mMinVersionMinor))
|
info1.mMinVersionMajor, info1.mMinVersionMinor))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool p3ServiceControl::updateFilterByPeer(const RsPeerId &peerId)
|
bool p3ServiceControl::updateFilterByPeer(const RsPeerId &peerId)
|
||||||
{
|
{
|
||||||
|
@ -790,8 +799,8 @@ bool p3ServiceControl::updateFilterByPeer_locked(const RsPeerId &peerId)
|
||||||
std::cerr << "p3ServiceControl::updateFilterByPeer_locked() Empty ... Clearing";
|
std::cerr << "p3ServiceControl::updateFilterByPeer_locked() Empty ... Clearing";
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// empty, remove...
|
// empty, remove...
|
||||||
recordFilterChanges_locked(peerId, originalFilter, peerFilter);
|
recordFilterChanges_locked(peerId, originalFilter, peerFilter);
|
||||||
if (fit != mPeerFilterMap.end())
|
if (fit != mPeerFilterMap.end())
|
||||||
{
|
{
|
||||||
|
@ -882,7 +891,7 @@ bool p3ServiceControl::updateFilterByPeer_locked(const RsPeerId &peerId)
|
||||||
std::cerr << "p3ServiceControl::updateFilterByPeer_locked() Empty(2) ... Clearing";
|
std::cerr << "p3ServiceControl::updateFilterByPeer_locked() Empty(2) ... Clearing";
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (fit != mPeerFilterMap.end())
|
if (fit != mPeerFilterMap.end())
|
||||||
{
|
{
|
||||||
mPeerFilterMap.erase(fit);
|
mPeerFilterMap.erase(fit);
|
||||||
|
@ -900,7 +909,7 @@ bool p3ServiceControl::updateFilterByPeer_locked(const RsPeerId &peerId)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void p3ServiceControl::recordFilterChanges_locked(const RsPeerId &peerId,
|
void p3ServiceControl::recordFilterChanges_locked(const RsPeerId &peerId,
|
||||||
ServicePeerFilter &originalFilter, ServicePeerFilter &updatedFilter)
|
ServicePeerFilter &originalFilter, ServicePeerFilter &updatedFilter)
|
||||||
{
|
{
|
||||||
#ifdef SERVICECONTROL_DEBUG
|
#ifdef SERVICECONTROL_DEBUG
|
||||||
|
@ -1202,7 +1211,7 @@ bool p3ServiceControl::loadList(std::list<RsItem *>& loadList)
|
||||||
|
|
||||||
if(item != NULL)
|
if(item != NULL)
|
||||||
mServicePermissionMap[item->mServiceId] = *item ;
|
mServicePermissionMap[item->mServiceId] = *item ;
|
||||||
|
|
||||||
delete *it ;
|
delete *it ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1396,49 +1405,49 @@ void p3ServiceControl::notifyServices()
|
||||||
std::cerr << "p3ServiceControl::notifyServices(): Noone Monitoring ... skipping";
|
std::cerr << "p3ServiceControl::notifyServices(): Noone Monitoring ... skipping";
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::list<pqiServicePeer> peers;
|
std::list<pqiServicePeer> peers;
|
||||||
std::set<RsPeerId>::const_iterator pit;
|
std::set<RsPeerId>::const_iterator pit;
|
||||||
for(pit = it->second.mAdded.begin();
|
for(pit = it->second.mAdded.begin();
|
||||||
pit != it->second.mAdded.end(); ++pit)
|
pit != it->second.mAdded.end(); ++pit)
|
||||||
{
|
{
|
||||||
pqiServicePeer peer;
|
pqiServicePeer peer;
|
||||||
peer.id = *pit;
|
peer.id = *pit;
|
||||||
peer.actions = RS_SERVICE_PEER_CONNECTED;
|
peer.actions = RS_SERVICE_PEER_CONNECTED;
|
||||||
|
|
||||||
peers.push_back(peer);
|
peers.push_back(peer);
|
||||||
|
|
||||||
#ifdef SERVICECONTROL_DEBUG
|
#ifdef SERVICECONTROL_DEBUG
|
||||||
std::cerr << "p3ServiceControl::notifyServices(): Peer: " << *pit << " CONNECTED";
|
std::cerr << "p3ServiceControl::notifyServices(): Peer: " << *pit << " CONNECTED";
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
for(pit = it->second.mRemoved.begin();
|
for(pit = it->second.mRemoved.begin();
|
||||||
pit != it->second.mRemoved.end(); ++pit)
|
pit != it->second.mRemoved.end(); ++pit)
|
||||||
{
|
{
|
||||||
pqiServicePeer peer;
|
pqiServicePeer peer;
|
||||||
peer.id = *pit;
|
peer.id = *pit;
|
||||||
peer.actions = RS_SERVICE_PEER_DISCONNECTED;
|
peer.actions = RS_SERVICE_PEER_DISCONNECTED;
|
||||||
|
|
||||||
peers.push_back(peer);
|
peers.push_back(peer);
|
||||||
|
|
||||||
#ifdef SERVICECONTROL_DEBUG
|
#ifdef SERVICECONTROL_DEBUG
|
||||||
std::cerr << "p3ServiceControl::notifyServices(): Peer: " << *pit << " DISCONNECTED";
|
std::cerr << "p3ServiceControl::notifyServices(): Peer: " << *pit << " DISCONNECTED";
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
for(; sit != eit; ++sit)
|
for(; sit != eit; ++sit)
|
||||||
{
|
{
|
||||||
#ifdef SERVICECONTROL_DEBUG
|
#ifdef SERVICECONTROL_DEBUG
|
||||||
std::cerr << "p3ServiceControl::notifyServices(): Sending to Monitoring Service";
|
std::cerr << "p3ServiceControl::notifyServices(): Sending to Monitoring Service";
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
sit->second->statusChange(peers);
|
sit->second->statusChange(peers);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1500,17 +1509,17 @@ void RsServicePermissions::resetPermission(const RsPeerId& peerId)
|
||||||
}
|
}
|
||||||
|
|
||||||
RsServiceInfo::RsServiceInfo(
|
RsServiceInfo::RsServiceInfo(
|
||||||
const uint16_t service_type,
|
const uint16_t service_type,
|
||||||
const std::string service_name,
|
const std::string service_name,
|
||||||
const uint16_t version_major,
|
const uint16_t version_major,
|
||||||
const uint16_t version_minor,
|
const uint16_t version_minor,
|
||||||
const uint16_t min_version_major,
|
const uint16_t min_version_major,
|
||||||
const uint16_t min_version_minor)
|
const uint16_t min_version_minor)
|
||||||
:mServiceName(service_name),
|
:mServiceName(service_name),
|
||||||
mServiceType((((uint32_t) RS_PKT_VERSION_SERVICE) << 24) + (((uint32_t) service_type) << 8)),
|
mServiceType((((uint32_t) RS_PKT_VERSION_SERVICE) << 24) + (((uint32_t) service_type) << 8)),
|
||||||
mVersionMajor(version_major),
|
mVersionMajor(version_major),
|
||||||
mVersionMinor(version_minor),
|
mVersionMinor(version_minor),
|
||||||
mMinVersionMajor(min_version_major),
|
mMinVersionMajor(min_version_major),
|
||||||
mMinVersionMinor(min_version_minor)
|
mMinVersionMinor(min_version_minor)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
|
@ -1518,7 +1527,7 @@ RsServiceInfo::RsServiceInfo(
|
||||||
|
|
||||||
|
|
||||||
RsServiceInfo::RsServiceInfo()
|
RsServiceInfo::RsServiceInfo()
|
||||||
:mServiceName("unknown"),
|
:mServiceName("unknown"),
|
||||||
mServiceType(0),
|
mServiceType(0),
|
||||||
mVersionMajor(0),
|
mVersionMajor(0),
|
||||||
mVersionMinor(0),
|
mVersionMinor(0),
|
||||||
|
|
|
@ -36,6 +36,8 @@
|
||||||
#include "pqi/pqiservicemonitor.h"
|
#include "pqi/pqiservicemonitor.h"
|
||||||
#include "pqi/p3linkmgr.h"
|
#include "pqi/p3linkmgr.h"
|
||||||
|
|
||||||
|
class p3ServiceServer ;
|
||||||
|
|
||||||
class ServiceNotifications
|
class ServiceNotifications
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -101,6 +103,9 @@ virtual bool updateServicePermissions(uint32_t serviceId, const RsServicePermiss
|
||||||
virtual void getPeersConnected(const uint32_t serviceId, std::set<RsPeerId> &peerSet);
|
virtual void getPeersConnected(const uint32_t serviceId, std::set<RsPeerId> &peerSet);
|
||||||
virtual bool isPeerConnected(const uint32_t serviceId, const RsPeerId &peerId);
|
virtual bool isPeerConnected(const uint32_t serviceId, const RsPeerId &peerId);
|
||||||
|
|
||||||
|
// Gets the list of items used by that service
|
||||||
|
virtual bool getServiceItemNames(uint32_t serviceId,std::map<uint8_t,std::string>& names) ;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Registration for all Services.
|
* Registration for all Services.
|
||||||
*/
|
*/
|
||||||
|
@ -132,6 +137,8 @@ virtual bool updateServicesProvided(const RsPeerId &peerId, const RsPeerServiceI
|
||||||
// pqiMonitor.
|
// pqiMonitor.
|
||||||
virtual void statusChange(const std::list<pqipeer> &plist);
|
virtual void statusChange(const std::list<pqipeer> &plist);
|
||||||
|
|
||||||
|
virtual void setServiceServer(p3ServiceServer *p) { mServiceServer = p ; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// configuration.
|
// configuration.
|
||||||
virtual bool saveList(bool &cleanup, std::list<RsItem *>&);
|
virtual bool saveList(bool &cleanup, std::list<RsItem *>&);
|
||||||
|
@ -196,6 +203,7 @@ bool peerHasPermissionForService_locked(const RsPeerId &peerId, uint32_t service
|
||||||
// Below here is saved in Configuration.
|
// Below here is saved in Configuration.
|
||||||
std::map<uint32_t, RsServicePermissions> mServicePermissionMap;
|
std::map<uint32_t, RsServicePermissions> mServicePermissionMap;
|
||||||
|
|
||||||
|
p3ServiceServer *mServiceServer ;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -79,11 +79,26 @@ int p3ServiceServer::addService(pqiService *ts, bool defaultOn)
|
||||||
services[info.mServiceType] = ts;
|
services[info.mServiceType] = ts;
|
||||||
|
|
||||||
// This doesn't need to be in Mutex.
|
// This doesn't need to be in Mutex.
|
||||||
mServiceControl->registerService(info, defaultOn);
|
mServiceControl->registerService(info,defaultOn);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool p3ServiceServer::getServiceItemNames(uint32_t service_type,std::map<uint8_t,std::string>& names)
|
||||||
|
{
|
||||||
|
RsStackMutex stack(srvMtx); /********* LOCKED *********/
|
||||||
|
|
||||||
|
std::map<uint32_t, pqiService *>::iterator it=services.find(service_type) ;
|
||||||
|
|
||||||
|
if(it != services.end())
|
||||||
|
{
|
||||||
|
it->second->getItemNames(names) ;
|
||||||
|
return true ;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return false ;
|
||||||
|
}
|
||||||
|
|
||||||
int p3ServiceServer::removeService(pqiService *ts)
|
int p3ServiceServer::removeService(pqiService *ts)
|
||||||
{
|
{
|
||||||
RsStackMutex stack(srvMtx); /********* LOCKED *********/
|
RsStackMutex stack(srvMtx); /********* LOCKED *********/
|
||||||
|
|
|
@ -60,24 +60,26 @@ class p3ServiceServerIface;
|
||||||
|
|
||||||
class pqiService
|
class pqiService
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
pqiService() // our type of packets.
|
pqiService() // our type of packets.
|
||||||
:mServiceServer(NULL) { return; }
|
:mServiceServer(NULL) { return; }
|
||||||
|
|
||||||
virtual ~pqiService() { return; }
|
virtual ~pqiService() { return; }
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void setServiceServer(p3ServiceServerIface *server);
|
void setServiceServer(p3ServiceServerIface *server);
|
||||||
//
|
//
|
||||||
virtual bool recv(RsRawItem *) = 0;
|
virtual bool recv(RsRawItem *) = 0;
|
||||||
virtual bool send(RsRawItem *item);
|
virtual bool send(RsRawItem *item);
|
||||||
|
|
||||||
virtual RsServiceInfo getServiceInfo() = 0;
|
virtual RsServiceInfo getServiceInfo() = 0;
|
||||||
|
|
||||||
virtual int tick() { return 0; }
|
virtual int tick() { return 0; }
|
||||||
|
|
||||||
private:
|
virtual void getItemNames(std::map<uint8_t,std::string>& names) const {} // This does nothing by default. Service should derive it in order to give info for the UI
|
||||||
|
|
||||||
|
private:
|
||||||
p3ServiceServerIface *mServiceServer; // const, no need for mutex.
|
p3ServiceServerIface *mServiceServer; // const, no need for mutex.
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -97,10 +99,10 @@ public:
|
||||||
virtual ~p3ServiceServerIface() {}
|
virtual ~p3ServiceServerIface() {}
|
||||||
|
|
||||||
|
|
||||||
virtual bool recvItem(RsRawItem *) = 0;
|
virtual bool recvItem(RsRawItem *) = 0;
|
||||||
virtual bool sendItem(RsRawItem *) = 0;
|
virtual bool sendItem(RsRawItem *) = 0;
|
||||||
|
|
||||||
|
|
||||||
|
virtual bool getServiceItemNames(uint32_t service_type,std::map<uint8_t,std::string>& names) =0;
|
||||||
};
|
};
|
||||||
|
|
||||||
class p3ServiceServer : public p3ServiceServerIface
|
class p3ServiceServer : public p3ServiceServerIface
|
||||||
|
@ -108,13 +110,15 @@ class p3ServiceServer : public p3ServiceServerIface
|
||||||
public:
|
public:
|
||||||
p3ServiceServer(pqiPublisher *pub, p3ServiceControl *ctrl);
|
p3ServiceServer(pqiPublisher *pub, p3ServiceControl *ctrl);
|
||||||
|
|
||||||
int addService(pqiService *, bool defaultOn);
|
int addService(pqiService *, bool defaultOn);
|
||||||
int removeService(pqiService *);
|
int removeService(pqiService *);
|
||||||
|
|
||||||
bool recvItem(RsRawItem *);
|
bool recvItem(RsRawItem *);
|
||||||
bool sendItem(RsRawItem *);
|
bool sendItem(RsRawItem *);
|
||||||
|
|
||||||
int tick();
|
bool getServiceItemNames(uint32_t service_type, std::map<uint8_t,std::string>& names) ;
|
||||||
|
|
||||||
|
int tick();
|
||||||
public:
|
public:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -122,7 +126,7 @@ private:
|
||||||
pqiPublisher *mPublisher; // constant no need for mutex.
|
pqiPublisher *mPublisher; // constant no need for mutex.
|
||||||
p3ServiceControl *mServiceControl;
|
p3ServiceControl *mServiceControl;
|
||||||
|
|
||||||
RsMutex srvMtx;
|
RsMutex srvMtx;
|
||||||
std::map<uint32_t, pqiService *> services;
|
std::map<uint32_t, pqiService *> services;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -109,6 +109,7 @@ virtual ~RsServiceControl() { return; }
|
||||||
|
|
||||||
virtual bool getOwnServices(RsPeerServiceInfo &info) = 0;
|
virtual bool getOwnServices(RsPeerServiceInfo &info) = 0;
|
||||||
virtual std::string getServiceName(uint32_t service_id) = 0;
|
virtual std::string getServiceName(uint32_t service_id) = 0;
|
||||||
|
virtual bool getServiceItemNames(uint32_t service_id,std::map<uint8_t,std::string>& names) = 0;
|
||||||
|
|
||||||
virtual bool getServicesAllowed(const RsPeerId &peerId, RsPeerServiceInfo &info) = 0;
|
virtual bool getServicesAllowed(const RsPeerId &peerId, RsPeerServiceInfo &info) = 0;
|
||||||
virtual bool getServicesProvided(const RsPeerId &peerId, RsPeerServiceInfo &info) = 0;
|
virtual bool getServicesProvided(const RsPeerId &peerId, RsPeerServiceInfo &info) = 0;
|
||||||
|
|
|
@ -1243,6 +1243,8 @@ int RsServer::StartupRetroShare()
|
||||||
pqih = new pqisslpersongrp(serviceCtrl, flags, mPeerMgr);
|
pqih = new pqisslpersongrp(serviceCtrl, flags, mPeerMgr);
|
||||||
//pqih = new pqipersongrpDummy(none, flags);
|
//pqih = new pqipersongrpDummy(none, flags);
|
||||||
|
|
||||||
|
serviceCtrl->setServiceServer(pqih) ;
|
||||||
|
|
||||||
/****** New Ft Server **** !!! */
|
/****** New Ft Server **** !!! */
|
||||||
ftServer *ftserver = new ftServer(mPeerMgr, serviceCtrl);
|
ftServer *ftserver = new ftServer(mPeerMgr, serviceCtrl);
|
||||||
ftserver->setConfigDirectory(rsAccounts->PathAccountDirectory());
|
ftserver->setConfigDirectory(rsAccounts->PathAccountDirectory());
|
||||||
|
|
|
@ -99,6 +99,11 @@ QString RSGraphSource::displayValue(float v) const
|
||||||
return QString::number(v,'f',_digits) + " " + unitName() ;
|
return QString::number(v,'f',_digits) + " " + unitName() ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void RSGraphSource::getCumulatedValues(std::vector<float>& vals) const
|
||||||
|
{
|
||||||
|
for(std::map<std::string,float>::const_iterator it = _totals.begin();it!=_totals.end();++it)
|
||||||
|
vals.push_back(it->second) ;
|
||||||
|
}
|
||||||
void RSGraphSource::getCurrentValues(std::vector<QPointF>& vals) const
|
void RSGraphSource::getCurrentValues(std::vector<QPointF>& vals) const
|
||||||
{
|
{
|
||||||
std::map<std::string,std::list<std::pair<qint64,float> > >::const_iterator it = _points.begin();
|
std::map<std::string,std::list<std::pair<qint64,float> > >::const_iterator it = _points.begin();
|
||||||
|
@ -108,9 +113,9 @@ void RSGraphSource::getCurrentValues(std::vector<QPointF>& vals) const
|
||||||
vals.push_back(QPointF( (now - it->second.back().first)/1000.0f,it->second.back().second)) ;
|
vals.push_back(QPointF( (now - it->second.back().first)/1000.0f,it->second.back().second)) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString RSGraphSource::legend(int i,float v) const
|
QString RSGraphSource::legend(int i,float v,bool show_value) const
|
||||||
{
|
{
|
||||||
return displayName(i) + " (" + displayValue(v) + " )";
|
return displayName(i) + (show_value?(" (" + displayValue(v) + ")"):"");
|
||||||
}
|
}
|
||||||
|
|
||||||
void RSGraphSource::getDataPoints(int index,std::vector<QPointF>& pts,float filter_factor) const
|
void RSGraphSource::getDataPoints(int index,std::vector<QPointF>& pts,float filter_factor) const
|
||||||
|
@ -209,11 +214,30 @@ void RSGraphSource::update()
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
++it ;
|
++it ;
|
||||||
|
|
||||||
|
updateTotals();
|
||||||
|
}
|
||||||
|
|
||||||
|
void RSGraphSource::updateTotals()
|
||||||
|
{
|
||||||
|
// now compute totals
|
||||||
|
|
||||||
|
_totals.clear();
|
||||||
|
|
||||||
|
for(std::map<std::string,std::list<std::pair<qint64,float> > >::const_iterator it(_points.begin());it!=_points.end();++it)
|
||||||
|
{
|
||||||
|
float& f = _totals[it->first] ;
|
||||||
|
|
||||||
|
f = 0.0f ;
|
||||||
|
for(std::list<std::pair<qint64,float> >::const_iterator it2=it->second.begin();it2!=it->second.end();++it2)
|
||||||
|
f += (*it2).second ;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RSGraphSource::reset()
|
void RSGraphSource::reset()
|
||||||
{
|
{
|
||||||
_points.clear() ;
|
_points.clear();
|
||||||
|
_totals.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
void RSGraphSource::setCollectionTimeLimit(qint64 s) { _time_limit_msecs = s ; }
|
void RSGraphSource::setCollectionTimeLimit(qint64 s) { _time_limit_msecs = s ; }
|
||||||
|
@ -630,8 +654,19 @@ void RSGraphWidget::paintLegend()
|
||||||
{
|
{
|
||||||
//int bottom = _rec.height();
|
//int bottom = _rec.height();
|
||||||
|
|
||||||
std::vector<QPointF> vals ;
|
std::vector<float> vals ;
|
||||||
_source->getCurrentValues(vals) ;
|
|
||||||
|
if(_flags & RSGRAPH_FLAGS_LEGEND_CUMULATED)
|
||||||
|
_source->getCumulatedValues(vals) ;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
std::vector<QPointF> cvals ;
|
||||||
|
_source->getCurrentValues(cvals) ;
|
||||||
|
|
||||||
|
for(uint32_t i=0;i<cvals.size();++i)
|
||||||
|
vals.push_back(cvals[i].y()) ;
|
||||||
|
}
|
||||||
|
|
||||||
int j=0;
|
int j=0;
|
||||||
|
|
||||||
float FS = QFontMetricsF(font()).height();
|
float FS = QFontMetricsF(font()).height();
|
||||||
|
@ -640,12 +675,13 @@ void RSGraphWidget::paintLegend()
|
||||||
for(uint i=0;i<vals.size();++i)
|
for(uint i=0;i<vals.size();++i)
|
||||||
if( _masked_entries.find(_source->displayName(i).toStdString()) == _masked_entries.end() )
|
if( _masked_entries.find(_source->displayName(i).toStdString()) == _masked_entries.end() )
|
||||||
{
|
{
|
||||||
if( _rec.width() - (vals[i].x()-0)*_time_scale < SCALE_WIDTH*fact )
|
// if( _rec.width() - (vals[i].x()-0)*_time_scale < SCALE_WIDTH*fact )
|
||||||
continue ;
|
// continue ;
|
||||||
|
|
||||||
qreal paintStep = 4*fact+FS;
|
qreal paintStep = 4*fact+FS;
|
||||||
qreal pos = 15*fact+j*paintStep;
|
qreal pos = 15*fact+j*paintStep;
|
||||||
QString text = _source->legend(i,vals[i].y()) ;
|
|
||||||
|
QString text = _source->legend(i,vals[i]) ;
|
||||||
|
|
||||||
QPen oldPen = _painter->pen();
|
QPen oldPen = _painter->pen();
|
||||||
_painter->setPen(QPen(getColor(i), Qt::SolidLine));
|
_painter->setPen(QPen(getColor(i), Qt::SolidLine));
|
||||||
|
|
|
@ -69,8 +69,11 @@ public:
|
||||||
// return the vector of last values up to date
|
// return the vector of last values up to date
|
||||||
virtual void getCurrentValues(std::vector<QPointF>& vals) const ;
|
virtual void getCurrentValues(std::vector<QPointF>& vals) const ;
|
||||||
|
|
||||||
|
// return the vector of cumulated values up to date
|
||||||
|
virtual void getCumulatedValues(std::vector<float>& vals) const;
|
||||||
|
|
||||||
// returns what to display in the legend. Derive this to show additional info.
|
// returns what to display in the legend. Derive this to show additional info.
|
||||||
virtual QString legend(int i,float v) const ;
|
virtual QString legend(int i, float v, bool show_value=true) const ;
|
||||||
|
|
||||||
// Returns the n^th interpolated value at the given time in floating point seconds backward.
|
// Returns the n^th interpolated value at the given time in floating point seconds backward.
|
||||||
virtual void getDataPoints(int index, std::vector<QPointF>& pts, float filter_factor=0.0f) const ;
|
virtual void getDataPoints(int index, std::vector<QPointF>& pts, float filter_factor=0.0f) const ;
|
||||||
|
@ -95,11 +98,13 @@ protected slots:
|
||||||
protected:
|
protected:
|
||||||
virtual void getValues(std::map<std::string,float>& values) const = 0 ;// overload this in your own class to fill in the values you want to display.
|
virtual void getValues(std::map<std::string,float>& values) const = 0 ;// overload this in your own class to fill in the values you want to display.
|
||||||
|
|
||||||
|
void updateTotals();
|
||||||
qint64 getTime() const ; // returns time in ms since RS has started
|
qint64 getTime() const ; // returns time in ms since RS has started
|
||||||
|
|
||||||
// Storage of collected events. The string is any string used to represent the collected data.
|
// Storage of collected events. The string is any string used to represent the collected data.
|
||||||
|
|
||||||
std::map<std::string, std::list<std::pair<qint64,float> > > _points ;
|
std::map<std::string, std::list<std::pair<qint64,float> > > _points ;
|
||||||
|
std::map<std::string, float> _totals ;
|
||||||
|
|
||||||
QTimer *_timer ;
|
QTimer *_timer ;
|
||||||
|
|
||||||
|
@ -118,8 +123,9 @@ public:
|
||||||
static const uint32_t RSGRAPH_FLAGS_LOG_SCALE_Y = 0x0002 ;// log scale in Y
|
static const uint32_t RSGRAPH_FLAGS_LOG_SCALE_Y = 0x0002 ;// log scale in Y
|
||||||
static const uint32_t RSGRAPH_FLAGS_ALWAYS_COLLECT = 0x0004 ;// keep collecting while not displayed
|
static const uint32_t RSGRAPH_FLAGS_ALWAYS_COLLECT = 0x0004 ;// keep collecting while not displayed
|
||||||
static const uint32_t RSGRAPH_FLAGS_PAINT_STYLE_PLAIN = 0x0008 ;// use plain / line drawing style
|
static const uint32_t RSGRAPH_FLAGS_PAINT_STYLE_PLAIN = 0x0008 ;// use plain / line drawing style
|
||||||
static const uint32_t RSGRAPH_FLAGS_SHOW_LEGEND = 0x0010 ;// show legend in the graph
|
static const uint32_t RSGRAPH_FLAGS_SHOW_LEGEND = 0x0010 ;// show legend in the graph
|
||||||
static const uint32_t RSGRAPH_FLAGS_PAINT_STYLE_FLAT = 0x0020 ;// do not interpolate, and draw flat colored boxes
|
static const uint32_t RSGRAPH_FLAGS_PAINT_STYLE_FLAT = 0x0020 ;// do not interpolate, and draw flat colored boxes
|
||||||
|
static const uint32_t RSGRAPH_FLAGS_LEGEND_CUMULATED = 0x0040 ;// show the total in the legend rather than current values
|
||||||
|
|
||||||
/** Bandwidth graph style. */
|
/** Bandwidth graph style. */
|
||||||
enum GraphStyle
|
enum GraphStyle
|
||||||
|
|
|
@ -107,16 +107,25 @@ void BWGraphSource::update()
|
||||||
|
|
||||||
// remove empty lists
|
// remove empty lists
|
||||||
|
|
||||||
|
float duration = 0.0f;
|
||||||
|
|
||||||
for(std::map<std::string,std::list<std::pair<qint64,float> > >::iterator it=_points.begin();it!=_points.end();)
|
for(std::map<std::string,std::list<std::pair<qint64,float> > >::iterator it=_points.begin();it!=_points.end();)
|
||||||
if(it->second.empty())
|
if(it->second.empty())
|
||||||
{
|
{
|
||||||
std::map<std::string,std::list<std::pair<qint64,float> > >::iterator tmp(it) ;
|
std::map<std::string,std::list<std::pair<qint64,float> > >::iterator tmp(it) ;
|
||||||
++tmp;
|
++tmp;
|
||||||
_points.erase(it) ;
|
_points.erase(it) ;
|
||||||
it=tmp ;
|
it=tmp ;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
float d = it->second.back().first - it->second.front().first;
|
||||||
|
|
||||||
|
if(duration < d)
|
||||||
|
duration = d ;
|
||||||
|
|
||||||
++it ;
|
++it ;
|
||||||
|
}
|
||||||
|
|
||||||
// also clears history
|
// also clears history
|
||||||
|
|
||||||
|
@ -138,11 +147,36 @@ void BWGraphSource::update()
|
||||||
break ;
|
break ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// now update the totals, and possibly convert into an average if the unit requires it.
|
||||||
|
|
||||||
|
updateTotals();
|
||||||
|
|
||||||
|
if(_current_unit == UNIT_KILOBYTES)
|
||||||
|
for(std::map<std::string,float>::iterator it(_totals.begin());it!=_totals.end();++it)
|
||||||
|
it->second /= (duration/1000.0) ;
|
||||||
|
|
||||||
#ifdef BWGRAPH_DEBUG
|
#ifdef BWGRAPH_DEBUG
|
||||||
std::cerr << "Traffic history has size " << mTrafficHistory.size() << std::endl;
|
std::cerr << "Traffic history has size " << mTrafficHistory.size() << std::endl;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string BWGraphSource::makeSubItemName(uint16_t service_id,uint8_t sub_item_type) const
|
||||||
|
{
|
||||||
|
RsServiceInfoWithNames& s(mServiceInfoMap[service_id]) ;
|
||||||
|
|
||||||
|
if(s.item_names.empty())
|
||||||
|
return "item #"+QString("%1").arg(sub_item_type,2,16,QChar('0')).toStdString() ;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
std::map<uint8_t,std::string>::const_iterator it = s.item_names.find(sub_item_type) ;
|
||||||
|
|
||||||
|
if(it == s.item_names.end())
|
||||||
|
return "item #"+QString("%1").arg(sub_item_type,2,16,QChar('0')).toStdString() + " (undocumented)";
|
||||||
|
|
||||||
|
return QString("%1").arg(sub_item_type,2,16,QChar('0')).toStdString()+": " + it->second ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void BWGraphSource::convertTrafficClueToValues(const std::list<RSTrafficClue>& lst,std::map<std::string,float>& vals) const
|
void BWGraphSource::convertTrafficClueToValues(const std::list<RSTrafficClue>& lst,std::map<std::string,float>& vals) const
|
||||||
{
|
{
|
||||||
vals.clear() ;
|
vals.clear() ;
|
||||||
|
@ -162,7 +196,7 @@ void BWGraphSource::convertTrafficClueToValues(const std::list<RSTrafficClue>& l
|
||||||
|
|
||||||
for(uint32_t i=0;i<256;++i)
|
for(uint32_t i=0;i<256;++i)
|
||||||
if(clue_per_sub_id[i].count > 0)
|
if(clue_per_sub_id[i].count > 0)
|
||||||
vals["item #"+QString::number(i,16).toStdString()] = (_current_unit == UNIT_KILOBYTES)?(clue_per_sub_id[i].size):(clue_per_sub_id[i].count) ;
|
vals[makeSubItemName(clue_per_sub_id[i].service_id,i)] = (_current_unit == UNIT_KILOBYTES)?(clue_per_sub_id[i].size):(clue_per_sub_id[i].count) ;
|
||||||
}
|
}
|
||||||
break ;
|
break ;
|
||||||
|
|
||||||
|
@ -233,11 +267,14 @@ void BWGraphSource::convertTrafficClueToValues(const std::list<RSTrafficClue>& l
|
||||||
|
|
||||||
for(std::list<RSTrafficClue>::const_iterator it(lst.begin());it!=lst.end();++it)
|
for(std::list<RSTrafficClue>::const_iterator it(lst.begin());it!=lst.end();++it)
|
||||||
if(it->service_id == _current_selected_service)
|
if(it->service_id == _current_selected_service)
|
||||||
|
{
|
||||||
clue_per_sub_id[it->service_sub_id] += *it ;
|
clue_per_sub_id[it->service_sub_id] += *it ;
|
||||||
|
clue_per_sub_id[it->service_sub_id].service_id = it->service_id ;
|
||||||
|
}
|
||||||
|
|
||||||
for(uint32_t i=0;i<256;++i)
|
for(uint32_t i=0;i<256;++i)
|
||||||
if(clue_per_sub_id[i].count > 0)
|
if(clue_per_sub_id[i].count > 0)
|
||||||
vals["item #"+QString::number(i,16).toStdString()] = (_current_unit == UNIT_KILOBYTES)?(clue_per_sub_id[i].size):(clue_per_sub_id[i].count) ;
|
vals[makeSubItemName(clue_per_sub_id[i].service_id,i)] = (_current_unit == UNIT_KILOBYTES)?(clue_per_sub_id[i].size):(clue_per_sub_id[i].count) ;
|
||||||
}
|
}
|
||||||
break ;
|
break ;
|
||||||
|
|
||||||
|
@ -297,7 +334,11 @@ BWGraphSource::BWGraphSource()
|
||||||
rsServiceControl->getOwnServices(rspsi) ;
|
rsServiceControl->getOwnServices(rspsi) ;
|
||||||
|
|
||||||
for(std::map<uint32_t,RsServiceInfo>::const_iterator it(rspsi.mServiceList.begin());it!=rspsi.mServiceList.end();++it)
|
for(std::map<uint32_t,RsServiceInfo>::const_iterator it(rspsi.mServiceList.begin());it!=rspsi.mServiceList.end();++it)
|
||||||
|
{
|
||||||
mServiceInfoMap[ (it->first >> 8) & 0xffff ] = it->second ;
|
mServiceInfoMap[ (it->first >> 8) & 0xffff ] = it->second ;
|
||||||
|
|
||||||
|
rsServiceControl->getServiceItemNames(it->first,mServiceInfoMap[(it->first >> 8) & 0xffff].item_names) ;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void BWGraphSource::getValues(std::map<std::string,float>& values) const
|
void BWGraphSource::getValues(std::map<std::string,float>& values) const
|
||||||
|
@ -359,9 +400,9 @@ QString BWGraphSource::displayValue(float v) const
|
||||||
return QString() ;
|
return QString() ;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString BWGraphSource::legend(int i,float v) const
|
QString BWGraphSource::legend(int i,float v,bool show_value) const
|
||||||
{
|
{
|
||||||
return RSGraphSource::legend(i,v) ;//+ " Total: " + niceNumber(_total_recv) ;
|
return RSGraphSource::legend(i,v,show_value) ;
|
||||||
}
|
}
|
||||||
QString BWGraphSource::niceNumber(float v) const
|
QString BWGraphSource::niceNumber(float v) const
|
||||||
{
|
{
|
||||||
|
@ -446,6 +487,7 @@ void BWGraphSource::setUnit(int unit)
|
||||||
|
|
||||||
recomputeCurrentCurves() ;
|
recomputeCurrentCurves() ;
|
||||||
}
|
}
|
||||||
|
|
||||||
void BWGraphSource::setDirection(int dir)
|
void BWGraphSource::setDirection(int dir)
|
||||||
{
|
{
|
||||||
if(dir == _current_direction)
|
if(dir == _current_direction)
|
||||||
|
|
|
@ -13,6 +13,14 @@ public:
|
||||||
std::list<RSTrafficClue> out_rstcl ;
|
std::list<RSTrafficClue> out_rstcl ;
|
||||||
std::list<RSTrafficClue> in_rstcl ;
|
std::list<RSTrafficClue> in_rstcl ;
|
||||||
};
|
};
|
||||||
|
class RsServiceInfoWithNames: public RsServiceInfo
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
RsServiceInfoWithNames(const RsServiceInfo& s) : RsServiceInfo(s) {}
|
||||||
|
RsServiceInfoWithNames(){}
|
||||||
|
|
||||||
|
std::map<uint8_t,std::string> item_names ;
|
||||||
|
};
|
||||||
|
|
||||||
BWGraphSource() ;
|
BWGraphSource() ;
|
||||||
|
|
||||||
|
@ -25,7 +33,7 @@ public:
|
||||||
|
|
||||||
virtual void getValues(std::map<std::string,float>& values) const;
|
virtual void getValues(std::map<std::string,float>& values) const;
|
||||||
virtual QString displayValue(float v) const;
|
virtual QString displayValue(float v) const;
|
||||||
virtual QString legend(int i,float v) const;
|
virtual QString legend(int i,float v,bool show_value=true) const;
|
||||||
virtual void update();
|
virtual void update();
|
||||||
QString unitName() const ;
|
QString unitName() const ;
|
||||||
|
|
||||||
|
@ -45,6 +53,7 @@ public:
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void convertTrafficClueToValues(const std::list<RSTrafficClue> &lst, std::map<std::string, float> &vals) const;
|
void convertTrafficClueToValues(const std::list<RSTrafficClue> &lst, std::map<std::string, float> &vals) const;
|
||||||
|
std::string makeSubItemName(uint16_t service_id,uint8_t sub_item_type) const;
|
||||||
void recomputeCurrentCurves() ;
|
void recomputeCurrentCurves() ;
|
||||||
std::string visibleFriendName(const RsPeerId &pid) const ;
|
std::string visibleFriendName(const RsPeerId &pid) const ;
|
||||||
|
|
||||||
|
@ -67,7 +76,7 @@ private:
|
||||||
std::map<RsPeerId,std::string> mVisibleFriends ;
|
std::map<RsPeerId,std::string> mVisibleFriends ;
|
||||||
std::set<uint16_t> mVisibleServices ;
|
std::set<uint16_t> mVisibleServices ;
|
||||||
|
|
||||||
mutable std::map<uint16_t,RsServiceInfo> mServiceInfoMap ;
|
mutable std::map<uint16_t,RsServiceInfoWithNames> mServiceInfoMap ;
|
||||||
};
|
};
|
||||||
|
|
||||||
class BWGraph: public RSGraphWidget
|
class BWGraph: public RSGraphWidget
|
||||||
|
|
|
@ -28,13 +28,18 @@ BandwidthStatsWidget::BandwidthStatsWidget(QWidget *parent)
|
||||||
ui.bwgraph_BW->setSelector(BWGraphSource::SELECTOR_TYPE_SERVICE,BWGraphSource::GRAPH_TYPE_SUM) ;
|
ui.bwgraph_BW->setSelector(BWGraphSource::SELECTOR_TYPE_SERVICE,BWGraphSource::GRAPH_TYPE_SUM) ;
|
||||||
ui.bwgraph_BW->setUnit(BWGraphSource::UNIT_KILOBYTES) ;
|
ui.bwgraph_BW->setUnit(BWGraphSource::UNIT_KILOBYTES) ;
|
||||||
|
|
||||||
|
ui.bwgraph_BW->resetFlags(RSGraphWidget::RSGRAPH_FLAGS_LEGEND_CUMULATED) ;
|
||||||
|
|
||||||
|
updateUnitSelection(0);
|
||||||
|
|
||||||
// Setup connections
|
// Setup connections
|
||||||
|
|
||||||
QObject::connect(ui.friend_CB ,SIGNAL(currentIndexChanged(int)),this, SLOT( updateFriendSelection(int))) ;
|
QObject::connect(ui.friend_CB ,SIGNAL(currentIndexChanged(int )),this, SLOT( updateFriendSelection(int ))) ;
|
||||||
QObject::connect(ui.updn_CB ,SIGNAL(currentIndexChanged(int)),this, SLOT( updateUpDownSelection(int))) ;
|
QObject::connect(ui.updn_CB ,SIGNAL(currentIndexChanged(int )),this, SLOT( updateUpDownSelection(int ))) ;
|
||||||
QObject::connect(ui.unit_CB ,SIGNAL(currentIndexChanged(int)),this, SLOT( updateUnitSelection(int))) ;
|
QObject::connect(ui.unit_CB ,SIGNAL(currentIndexChanged(int )),this, SLOT( updateUnitSelection(int ))) ;
|
||||||
QObject::connect(ui.service_CB,SIGNAL(currentIndexChanged(int)),this, SLOT(updateServiceSelection(int))) ;
|
QObject::connect(ui.service_CB ,SIGNAL(currentIndexChanged(int )),this, SLOT(updateServiceSelection(int ))) ;
|
||||||
QObject::connect(ui.logScale_CB,SIGNAL(toggled(bool)),this, SLOT(toggleLogScale(bool))) ;
|
QObject::connect(ui.legend_CB ,SIGNAL(currentIndexChanged(int )),this, SLOT( updateLegendType(int ))) ;
|
||||||
|
QObject::connect(ui.logScale_CB,SIGNAL( toggled(bool)),this, SLOT( toggleLogScale(bool))) ;
|
||||||
|
|
||||||
// setup one timer for auto-update
|
// setup one timer for auto-update
|
||||||
|
|
||||||
|
@ -156,6 +161,13 @@ void BandwidthStatsWidget::updateFriendSelection(int n)
|
||||||
ui.bwgraph_BW->setSelector(BWGraphSource::SELECTOR_TYPE_FRIEND,BWGraphSource::GRAPH_TYPE_SINGLE,ui.friend_CB->itemData(ci,Qt::UserRole).toString().toStdString()) ;
|
ui.bwgraph_BW->setSelector(BWGraphSource::SELECTOR_TYPE_FRIEND,BWGraphSource::GRAPH_TYPE_SINGLE,ui.friend_CB->itemData(ci,Qt::UserRole).toString().toStdString()) ;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
void BandwidthStatsWidget::updateLegendType(int n)
|
||||||
|
{
|
||||||
|
if(n==0)
|
||||||
|
ui.bwgraph_BW->resetFlags(RSGraphWidget::RSGRAPH_FLAGS_LEGEND_CUMULATED) ;
|
||||||
|
else
|
||||||
|
ui.bwgraph_BW->setFlags(RSGraphWidget::RSGRAPH_FLAGS_LEGEND_CUMULATED) ;
|
||||||
|
}
|
||||||
void BandwidthStatsWidget::updateServiceSelection(int n)
|
void BandwidthStatsWidget::updateServiceSelection(int n)
|
||||||
{
|
{
|
||||||
if(n == 0)
|
if(n == 0)
|
||||||
|
@ -187,7 +199,13 @@ void BandwidthStatsWidget::updateUpDownSelection(int n)
|
||||||
void BandwidthStatsWidget::updateUnitSelection(int n)
|
void BandwidthStatsWidget::updateUnitSelection(int n)
|
||||||
{
|
{
|
||||||
if(n==0)
|
if(n==0)
|
||||||
|
{
|
||||||
ui.bwgraph_BW->setUnit(BWGraphSource::UNIT_KILOBYTES) ;
|
ui.bwgraph_BW->setUnit(BWGraphSource::UNIT_KILOBYTES) ;
|
||||||
|
ui.legend_CB->setItemText(1,tr("Average"));
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
ui.bwgraph_BW->setUnit(BWGraphSource::UNIT_COUNT) ;
|
ui.bwgraph_BW->setUnit(BWGraphSource::UNIT_COUNT) ;
|
||||||
|
ui.legend_CB->setItemText(1,tr("Total"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,7 +15,8 @@ protected slots:
|
||||||
void updateUpDownSelection(int n);
|
void updateUpDownSelection(int n);
|
||||||
void updateUnitSelection(int n);
|
void updateUnitSelection(int n);
|
||||||
void toggleLogScale(bool b);
|
void toggleLogScale(bool b);
|
||||||
|
void updateLegendType(int n);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Ui::BwStatsWidget ui;
|
Ui::BwStatsWidget ui;
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>1128</width>
|
<width>1148</width>
|
||||||
<height>385</height>
|
<height>385</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
|
@ -14,7 +14,16 @@
|
||||||
<string>Form</string>
|
<string>Form</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout">
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
<property name="margin">
|
<property name="leftMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="topMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="rightMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="bottomMargin">
|
||||||
<number>0</number>
|
<number>0</number>
|
||||||
</property>
|
</property>
|
||||||
<item>
|
<item>
|
||||||
|
@ -103,6 +112,27 @@
|
||||||
<item>
|
<item>
|
||||||
<widget class="QComboBox" name="unit_CB"/>
|
<widget class="QComboBox" name="unit_CB"/>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_5">
|
||||||
|
<property name="text">
|
||||||
|
<string>Legend:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QComboBox" name="legend_CB">
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Current</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Total</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QCheckBox" name="logScale_CB">
|
<widget class="QCheckBox" name="logScale_CB">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue