2012-07-05 21:26:14 +00:00
|
|
|
#include "nxstesthub.h"
|
|
|
|
|
2012-08-28 21:11:54 +00:00
|
|
|
NxsTestHub::NxsTestHub(NxsTestScenario * nts, std::set<std::string> &peers) : mTestScenario(nts)
|
2012-07-05 21:26:14 +00:00
|
|
|
{
|
2012-07-12 20:18:58 +00:00
|
|
|
|
2012-08-28 21:11:54 +00:00
|
|
|
std::set<std::string>::iterator sit = peers.begin();
|
2012-07-12 20:18:58 +00:00
|
|
|
|
2012-08-28 21:11:54 +00:00
|
|
|
for(; sit != peers.end(); sit++)
|
|
|
|
{
|
|
|
|
std::set<std::string> msgPeers = peers;
|
2012-07-12 20:18:58 +00:00
|
|
|
|
2012-08-28 21:11:54 +00:00
|
|
|
// add peers all peers except one iterator currently points to
|
|
|
|
msgPeers.erase(*sit);
|
|
|
|
NxsNetDummyMgr* dummyMgr = new NxsNetDummyMgr(*sit, msgPeers);
|
|
|
|
RsGeneralDataService* ds = mTestScenario->getDataService(*sit);
|
|
|
|
NxsMessageTestObserver* obs = new NxsMessageTestObserver(ds);
|
|
|
|
|
|
|
|
RsGxsNetService* netService =
|
|
|
|
new RsGxsNetService(mTestScenario->getServiceType(),
|
|
|
|
ds, dummyMgr, obs);
|
|
|
|
|
|
|
|
|
|
|
|
mNetServices.insert(std::make_pair(*sit, netService));
|
|
|
|
mObservers.insert(std::make_pair(*sit, obs));
|
|
|
|
}
|
|
|
|
|
|
|
|
sit = peers.begin();
|
|
|
|
|
|
|
|
// launch net services
|
|
|
|
for(; sit != peers.end(); sit++)
|
|
|
|
{
|
|
|
|
RsGxsNetService* n = mNetServices[*sit];
|
|
|
|
createThread(*n);
|
|
|
|
mServices.insert(std::make_pair(*sit, n));
|
|
|
|
}
|
2012-07-12 20:18:58 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
NxsTestHub::~NxsTestHub()
|
|
|
|
{
|
2012-08-28 21:11:54 +00:00
|
|
|
std::map<std::string, RsGxsNetService*>::iterator mit = mNetServices.begin();
|
|
|
|
|
|
|
|
for(; mit != mNetServices.end(); mit++)
|
|
|
|
delete mit->second;
|
2012-07-12 20:18:58 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void NxsTestHub::run()
|
|
|
|
{
|
2012-08-28 21:11:54 +00:00
|
|
|
double timeDelta = .2;
|
2012-07-12 20:18:58 +00:00
|
|
|
|
|
|
|
while(isRunning()){
|
|
|
|
|
2012-08-28 21:11:54 +00:00
|
|
|
// make thread sleep for a bit
|
|
|
|
#ifndef WINDOWS_SYS
|
|
|
|
usleep((int) (timeDelta * 1000000));
|
|
|
|
#else
|
|
|
|
Sleep((int) (timeDelta * 1000));
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
std::map<std::string, p3Service*>::iterator mit = mServices.begin();
|
|
|
|
|
|
|
|
for(; mit != mServices.end(); mit++)
|
|
|
|
{
|
|
|
|
p3Service* s = mit->second;
|
|
|
|
s->tick();
|
|
|
|
}
|
|
|
|
|
|
|
|
mit = mServices.begin();
|
2012-07-12 20:18:58 +00:00
|
|
|
|
2012-08-28 21:11:54 +00:00
|
|
|
// collect msgs to send to peers from peers
|
|
|
|
for(; mit != mServices.end(); mit++)
|
|
|
|
{
|
|
|
|
const std::string& peer = mit->first;
|
|
|
|
p3Service* s = mit->second;
|
|
|
|
|
|
|
|
// first store all the sends from all services
|
|
|
|
RsItem* item = NULL;
|
|
|
|
|
|
|
|
while((item = s->send()) != NULL){
|
|
|
|
|
|
|
|
const std::string peerToReceive = item->PeerId();
|
|
|
|
|
|
|
|
// set the peer this item comes from
|
|
|
|
item->PeerId(peer);
|
|
|
|
mPeerQueues[peerToReceive].push_back(item);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
// now route items to peers
|
|
|
|
std::map<std::string, std::vector<RsItem*> >::iterator mit_queue = mPeerQueues.begin();
|
|
|
|
|
|
|
|
for(; mit_queue != mPeerQueues.end(); mit_queue++)
|
|
|
|
{
|
|
|
|
std::vector<RsItem*>& queueV = mit_queue->second;
|
|
|
|
std::vector<RsItem*>::iterator vit = queueV.begin();
|
|
|
|
const std::string peerToReceive = mit_queue->first;
|
|
|
|
for(; vit != queueV.end(); vit++)
|
|
|
|
{
|
|
|
|
|
|
|
|
RsItem* item = *vit;
|
|
|
|
p3Service* service = mServices[peerToReceive];
|
|
|
|
|
|
|
|
service->receive(dynamic_cast<RsRawItem*>(item));
|
|
|
|
}
|
|
|
|
queueV.clear();
|
|
|
|
}
|
|
|
|
}
|
2012-07-12 20:18:58 +00:00
|
|
|
}
|
|
|
|
|
2012-07-14 17:59:54 +00:00
|
|
|
void NxsTestHub::cleanUp()
|
2012-07-12 20:18:58 +00:00
|
|
|
{
|
2012-08-28 21:11:54 +00:00
|
|
|
std::map<std::string, RsGxsNetService*>::iterator mit = mNetServices.begin();
|
|
|
|
for(; mit != mNetServices.end(); mit++)
|
|
|
|
{
|
|
|
|
RsGxsNetService* n = mit->second;
|
|
|
|
n->join();
|
|
|
|
}
|
|
|
|
|
|
|
|
// also shut down this net service peers if this goes down
|
|
|
|
mTestScenario->cleanUp();
|
2012-07-14 17:59:54 +00:00
|
|
|
}
|
2012-07-12 20:18:58 +00:00
|
|
|
|
2012-07-14 17:59:54 +00:00
|
|
|
bool NxsTestHub::testsPassed()
|
|
|
|
{
|
2012-07-12 20:18:58 +00:00
|
|
|
return false;
|
2012-07-05 21:26:14 +00:00
|
|
|
}
|