mirror of
https://github.com/RetroShare/RetroShare.git
synced 2025-02-17 13:24:15 -05:00
group synchronisation now working (message syn not up yet, will do later, simple extension)
updated hub test git-svn-id: http://svn.code.sf.net/p/retroshare/code/branches/v0.5-new_cache_system@5300 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
parent
d3e5ec2836
commit
52a911329e
@ -577,11 +577,13 @@ int RsDataService::retrieveNxsGrps(std::map<std::string, RsNxsGrp *> &grp, bool
|
|||||||
{
|
{
|
||||||
std::vector<RsNxsGrp*> grps;
|
std::vector<RsNxsGrp*> grps;
|
||||||
retrieveGroups(c, grps);
|
retrieveGroups(c, grps);
|
||||||
std::vector<RsNxsGrp*>::iterator vit = grps.begin();
|
|
||||||
|
|
||||||
for(; vit != grps.end(); vit++)
|
if(!grps.empty())
|
||||||
{
|
{
|
||||||
grp[(*vit)->grpId] = *vit;
|
RsNxsGrp* ng = grps.front();
|
||||||
|
grp[ng->grpId] = ng;
|
||||||
|
}else{
|
||||||
|
grp.erase(grpId);
|
||||||
}
|
}
|
||||||
|
|
||||||
delete c;
|
delete c;
|
||||||
|
@ -23,7 +23,7 @@ public:
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
* Retrieves groups, if empty, retrieves all grps, if map is not empty
|
* Retrieves groups, if empty, retrieves all grps, if map is not empty
|
||||||
* only retrieve entries
|
* only retrieve entries, if entry cannot be found, it is removed from map
|
||||||
* @param grp retrieved groups
|
* @param grp retrieved groups
|
||||||
* @param cache whether to store retrieval in mem for faster later retrieval
|
* @param cache whether to store retrieval in mem for faster later retrieval
|
||||||
* @return error code
|
* @return error code
|
||||||
|
@ -2,18 +2,19 @@
|
|||||||
|
|
||||||
#define NXS_NET_DEBUG
|
#define NXS_NET_DEBUG
|
||||||
|
|
||||||
#define SYNC_PERIOD 1 // in microseconds every 10 seconds (1 second for testing)
|
#define SYNC_PERIOD 12 // in microseconds every 10 seconds (1 second for testing)
|
||||||
#define TRANSAC_TIMEOUT 5 // 5 seconds
|
#define TRANSAC_TIMEOUT 5 // 5 seconds
|
||||||
|
|
||||||
|
|
||||||
RsGxsNetService::RsGxsNetService(uint16_t servType, RsGeneralDataService *gds,
|
RsGxsNetService::RsGxsNetService(uint16_t servType, RsGeneralDataService *gds,
|
||||||
RsNxsNetMgr *netMgr, RsNxsObserver *nxsObs)
|
RsNxsNetMgr *netMgr, RsNxsObserver *nxsObs)
|
||||||
: p3Config(servType), p3ThreadedService(servType),
|
: p3Config(servType), p3ThreadedService(servType),
|
||||||
mTransactionTimeOut(TRANSAC_TIMEOUT), mServType(servType), mDataStore(gds),
|
mTransactionTimeOut(TRANSAC_TIMEOUT), mServType(servType), mDataStore(gds), mTransactionN(0),
|
||||||
mObserver(nxsObs), mNxsMutex("RsGxsNetService"), mNetMgr(netMgr), mSYNC_PERIOD(SYNC_PERIOD)
|
mObserver(nxsObs), mNxsMutex("RsGxsNetService"), mNetMgr(netMgr), mSYNC_PERIOD(SYNC_PERIOD)
|
||||||
|
|
||||||
{
|
{
|
||||||
addSerialType(new RsNxsSerialiser(mServType));
|
addSerialType(new RsNxsSerialiser(mServType));
|
||||||
|
mOwnId = mNetMgr->getOwnId();
|
||||||
}
|
}
|
||||||
|
|
||||||
RsGxsNetService::~RsGxsNetService()
|
RsGxsNetService::~RsGxsNetService()
|
||||||
@ -190,13 +191,19 @@ bool RsGxsNetService::locked_processTransac(RsNxsTransac* item)
|
|||||||
* For ending a transaction the
|
* For ending a transaction the
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const std::string& peer = item->PeerId();
|
std::string peer;
|
||||||
|
|
||||||
|
// for outgoing transaction use own id
|
||||||
|
if(item->transactFlag & (RsNxsTransac::FLAG_BEGIN_P2 | RsNxsTransac::FLAG_END_SUCCESS))
|
||||||
|
peer = mOwnId;
|
||||||
|
else
|
||||||
|
peer = item->PeerId();
|
||||||
|
|
||||||
uint32_t transN = item->transactionNumber;
|
uint32_t transN = item->transactionNumber;
|
||||||
item->timestamp = time(NULL); // register time received
|
item->timestamp = time(NULL); // register time received
|
||||||
NxsTransaction* tr = NULL;
|
NxsTransaction* tr = NULL;
|
||||||
|
|
||||||
#ifdef NXS_NET_DEBUG
|
#ifdef NXS_NET_DEBUG
|
||||||
|
|
||||||
std::cerr << "locked_processTransac() " << std::endl;
|
std::cerr << "locked_processTransac() " << std::endl;
|
||||||
std::cerr << "locked_processTransac(), Received transaction item: " << transN << std::endl;
|
std::cerr << "locked_processTransac(), Received transaction item: " << transN << std::endl;
|
||||||
std::cerr << "locked_processTransac(), With peer: " << item->PeerId() << std::endl;
|
std::cerr << "locked_processTransac(), With peer: " << item->PeerId() << std::endl;
|
||||||
@ -225,13 +232,13 @@ bool RsGxsNetService::locked_processTransac(RsNxsTransac* item)
|
|||||||
TransactionIdMap& transMap = mTransactions[peer];
|
TransactionIdMap& transMap = mTransactions[peer];
|
||||||
|
|
||||||
if(transExists)
|
if(transExists)
|
||||||
return false;
|
return false; // should not happen!
|
||||||
|
|
||||||
// create new transaction
|
// create new transaction
|
||||||
tr = new NxsTransaction();
|
tr = new NxsTransaction();
|
||||||
transMap[transN] = tr;
|
transMap[transN] = tr;
|
||||||
tr->mTransaction = item;
|
tr->mTransaction = item;
|
||||||
tr->mTimeOut = item->timestamp;
|
tr->mTimeOut = item->timestamp + mTransactionTimeOut;
|
||||||
|
|
||||||
// note state as receiving, commencement item
|
// note state as receiving, commencement item
|
||||||
// is sent on next run() loop
|
// is sent on next run() loop
|
||||||
@ -240,7 +247,7 @@ bool RsGxsNetService::locked_processTransac(RsNxsTransac* item)
|
|||||||
// commencement item for outgoing transaction
|
// commencement item for outgoing transaction
|
||||||
}else if(item->transactFlag & RsNxsTransac::FLAG_BEGIN_P2){
|
}else if(item->transactFlag & RsNxsTransac::FLAG_BEGIN_P2){
|
||||||
|
|
||||||
// transaction does not exist
|
// transaction must exist
|
||||||
if(!peerTrExists || !transExists)
|
if(!peerTrExists || !transExists)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
@ -291,13 +298,14 @@ void RsGxsNetService::run(){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RsGxsNetService::checkTransacTimedOut(NxsTransaction* tr)
|
bool RsGxsNetService::locked_checkTransacTimedOut(NxsTransaction* tr)
|
||||||
{
|
{
|
||||||
return tr->mTimeOut < ((uint32_t) time(NULL));
|
return tr->mTimeOut < ((uint32_t) time(NULL));
|
||||||
}
|
}
|
||||||
|
|
||||||
void RsGxsNetService::processTransactions(){
|
void RsGxsNetService::processTransactions(){
|
||||||
|
|
||||||
|
RsStackMutex stack(mNxsMutex);
|
||||||
|
|
||||||
TransactionsPeerMap::iterator mit = mTransactions.begin();
|
TransactionsPeerMap::iterator mit = mTransactions.begin();
|
||||||
|
|
||||||
@ -324,7 +332,7 @@ void RsGxsNetService::processTransactions(){
|
|||||||
uint32_t transN = tr->mTransaction->transactionNumber;
|
uint32_t transN = tr->mTransaction->transactionNumber;
|
||||||
|
|
||||||
// first check transaction has not expired
|
// first check transaction has not expired
|
||||||
if(checkTransacTimedOut(tr))
|
if(locked_checkTransacTimedOut(tr))
|
||||||
{
|
{
|
||||||
|
|
||||||
#ifdef NXS_NET_DEBUG
|
#ifdef NXS_NET_DEBUG
|
||||||
@ -405,7 +413,7 @@ void RsGxsNetService::processTransactions(){
|
|||||||
uint32_t transN = tr->mTransaction->transactionNumber;
|
uint32_t transN = tr->mTransaction->transactionNumber;
|
||||||
|
|
||||||
// first check transaction has not expired
|
// first check transaction has not expired
|
||||||
if(checkTransacTimedOut(tr))
|
if(locked_checkTransacTimedOut(tr))
|
||||||
{
|
{
|
||||||
|
|
||||||
#ifdef NXS_NET_DEBUG
|
#ifdef NXS_NET_DEBUG
|
||||||
@ -455,6 +463,7 @@ void RsGxsNetService::processTransactions(){
|
|||||||
trans->transactionNumber = transN;
|
trans->transactionNumber = transN;
|
||||||
trans->PeerId(tr->mTransaction->PeerId());
|
trans->PeerId(tr->mTransaction->PeerId());
|
||||||
sendItem(trans);
|
sendItem(trans);
|
||||||
|
tr->mFlag = NxsTransaction::FLAG_STATE_RECEIVING;
|
||||||
|
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
@ -481,6 +490,7 @@ void RsGxsNetService::processTransactions(){
|
|||||||
|
|
||||||
void RsGxsNetService::processCompletedTransactions()
|
void RsGxsNetService::processCompletedTransactions()
|
||||||
{
|
{
|
||||||
|
RsStackMutex stack(mNxsMutex);
|
||||||
/*!
|
/*!
|
||||||
* Depending on transaction we may have to respond to peer
|
* Depending on transaction we may have to respond to peer
|
||||||
* responsible for transaction
|
* responsible for transaction
|
||||||
@ -495,9 +505,9 @@ void RsGxsNetService::processCompletedTransactions()
|
|||||||
bool outgoing = tr->mTransaction->PeerId() == mOwnId;
|
bool outgoing = tr->mTransaction->PeerId() == mOwnId;
|
||||||
|
|
||||||
if(outgoing){
|
if(outgoing){
|
||||||
processCompletedOutgoingTrans(tr);
|
locked_processCompletedOutgoingTrans(tr);
|
||||||
}else{
|
}else{
|
||||||
|
locked_processCompletedIncomingTrans(tr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -506,7 +516,7 @@ void RsGxsNetService::processCompletedTransactions()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RsGxsNetService::processCompletedIncomingTrans(NxsTransaction* tr)
|
void RsGxsNetService::locked_processCompletedIncomingTrans(NxsTransaction* tr)
|
||||||
{
|
{
|
||||||
|
|
||||||
uint16_t flag = tr->mTransaction->transactFlag;
|
uint16_t flag = tr->mTransaction->transactFlag;
|
||||||
@ -517,20 +527,20 @@ void RsGxsNetService::processCompletedIncomingTrans(NxsTransaction* tr)
|
|||||||
if(flag & RsNxsTransac::FLAG_TYPE_MSG_LIST_RESP)
|
if(flag & RsNxsTransac::FLAG_TYPE_MSG_LIST_RESP)
|
||||||
{
|
{
|
||||||
// generate request based on a peers response
|
// generate request based on a peers response
|
||||||
genReqMsgTransaction(tr);
|
locked_genReqMsgTransaction(tr);
|
||||||
|
|
||||||
}else if(flag & RsNxsTransac::FLAG_TYPE_GRP_LIST_RESP)
|
}else if(flag & RsNxsTransac::FLAG_TYPE_GRP_LIST_RESP)
|
||||||
{
|
{
|
||||||
genReqGrpTransaction(tr);
|
locked_genReqGrpTransaction(tr);
|
||||||
}
|
}
|
||||||
// you've finished receiving request information now gen
|
// you've finished receiving request information now gen
|
||||||
else if(flag & RsNxsTransac::FLAG_TYPE_MSG_LIST_REQ)
|
else if(flag & RsNxsTransac::FLAG_TYPE_MSG_LIST_REQ)
|
||||||
{
|
{
|
||||||
genSendMsgsTransaction(tr);
|
locked_genSendMsgsTransaction(tr);
|
||||||
}
|
}
|
||||||
else if(flag & RsNxsTransac::FLAG_TYPE_GRP_LIST_REQ)
|
else if(flag & RsNxsTransac::FLAG_TYPE_GRP_LIST_REQ)
|
||||||
{
|
{
|
||||||
genSendGrpsTransaction(tr);
|
locked_genSendGrpsTransaction(tr);
|
||||||
}
|
}
|
||||||
else if(flag & RsNxsTransac::FLAG_TYPE_GRPS)
|
else if(flag & RsNxsTransac::FLAG_TYPE_GRPS)
|
||||||
{
|
{
|
||||||
@ -593,7 +603,7 @@ void RsGxsNetService::processCompletedIncomingTrans(NxsTransaction* tr)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RsGxsNetService::processCompletedOutgoingTrans(NxsTransaction* tr)
|
void RsGxsNetService::locked_processCompletedOutgoingTrans(NxsTransaction* tr)
|
||||||
{
|
{
|
||||||
uint16_t flag = tr->mTransaction->transactFlag;
|
uint16_t flag = tr->mTransaction->transactFlag;
|
||||||
|
|
||||||
@ -658,7 +668,7 @@ void RsGxsNetService::processCompletedOutgoingTrans(NxsTransaction* tr)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void RsGxsNetService::genReqMsgTransaction(NxsTransaction* tr)
|
void RsGxsNetService::locked_genReqMsgTransaction(NxsTransaction* tr)
|
||||||
{
|
{
|
||||||
|
|
||||||
// to create a transaction you need to know who you are transacting with
|
// to create a transaction you need to know who you are transacting with
|
||||||
@ -705,7 +715,7 @@ void RsGxsNetService::genReqMsgTransaction(NxsTransaction* tr)
|
|||||||
msgIdSet.insert((*vit)->mMsgId);
|
msgIdSet.insert((*vit)->mMsgId);
|
||||||
|
|
||||||
// get unique id for this transaction
|
// get unique id for this transaction
|
||||||
uint32_t transN = getTransactionId();
|
uint32_t transN = locked_getTransactionId();
|
||||||
|
|
||||||
|
|
||||||
// add msgs that you don't have to request list
|
// add msgs that you don't have to request list
|
||||||
@ -733,11 +743,12 @@ void RsGxsNetService::genReqMsgTransaction(NxsTransaction* tr)
|
|||||||
transac->timestamp = 0;
|
transac->timestamp = 0;
|
||||||
transac->nItems = reqList.size();
|
transac->nItems = reqList.size();
|
||||||
transac->PeerId(tr->mTransaction->PeerId());
|
transac->PeerId(tr->mTransaction->PeerId());
|
||||||
|
transac->transactionNumber = transN;
|
||||||
|
|
||||||
NxsTransaction* newTrans = new NxsTransaction();
|
NxsTransaction* newTrans = new NxsTransaction();
|
||||||
newTrans->mItems = reqList;
|
newTrans->mItems = reqList;
|
||||||
newTrans->mFlag = NxsTransaction::FLAG_STATE_WAITING_CONFIRM;
|
newTrans->mFlag = NxsTransaction::FLAG_STATE_WAITING_CONFIRM;
|
||||||
newTrans->mTimeOut = 0;
|
newTrans->mTimeOut = time(NULL) + mTransactionTimeOut;
|
||||||
|
|
||||||
// create transaction copy with your id to indicate
|
// create transaction copy with your id to indicate
|
||||||
// its an outgoing transaction
|
// its an outgoing transaction
|
||||||
@ -747,13 +758,12 @@ void RsGxsNetService::genReqMsgTransaction(NxsTransaction* tr)
|
|||||||
sendItem(transac);
|
sendItem(transac);
|
||||||
|
|
||||||
{
|
{
|
||||||
RsStackMutex stack(mNxsMutex);
|
|
||||||
if(!locked_addTransaction(newTrans))
|
if(!locked_addTransaction(newTrans))
|
||||||
delete newTrans;
|
delete newTrans;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RsGxsNetService::genReqGrpTransaction(NxsTransaction* tr)
|
void RsGxsNetService::locked_genReqGrpTransaction(NxsTransaction* tr)
|
||||||
{
|
{
|
||||||
|
|
||||||
// to create a transaction you need to know who you are transacting with
|
// to create a transaction you need to know who you are transacting with
|
||||||
@ -788,7 +798,7 @@ void RsGxsNetService::genReqGrpTransaction(NxsTransaction* tr)
|
|||||||
std::list<RsNxsSyncGrpItem*>::iterator llit = grpItemL.begin();
|
std::list<RsNxsSyncGrpItem*>::iterator llit = grpItemL.begin();
|
||||||
std::list<RsNxsItem*> reqList;
|
std::list<RsNxsItem*> reqList;
|
||||||
|
|
||||||
uint32_t transN = getTransactionId();
|
uint32_t transN = locked_getTransactionId();
|
||||||
|
|
||||||
for(; llit != grpItemL.end(); llit++)
|
for(; llit != grpItemL.end(); llit++)
|
||||||
{
|
{
|
||||||
@ -811,26 +821,31 @@ void RsGxsNetService::genReqGrpTransaction(NxsTransaction* tr)
|
|||||||
transac->timestamp = 0;
|
transac->timestamp = 0;
|
||||||
transac->nItems = reqList.size();
|
transac->nItems = reqList.size();
|
||||||
transac->PeerId(tr->mTransaction->PeerId());
|
transac->PeerId(tr->mTransaction->PeerId());
|
||||||
|
transac->transactionNumber = transN;
|
||||||
|
|
||||||
NxsTransaction* newTrans = new NxsTransaction();
|
NxsTransaction* newTrans = new NxsTransaction();
|
||||||
newTrans->mItems = reqList;
|
newTrans->mItems = reqList;
|
||||||
newTrans->mFlag = NxsTransaction::FLAG_STATE_WAITING_CONFIRM;
|
newTrans->mFlag = NxsTransaction::FLAG_STATE_WAITING_CONFIRM;
|
||||||
newTrans->mTimeOut = 0;
|
newTrans->mTimeOut = time(NULL) + mTransactionTimeOut;
|
||||||
newTrans->mTransaction = new RsNxsTransac(*transac);
|
newTrans->mTransaction = new RsNxsTransac(*transac);
|
||||||
newTrans->mTransaction->PeerId(mOwnId);
|
newTrans->mTransaction->PeerId(mOwnId);
|
||||||
|
|
||||||
sendItem(transac);
|
sendItem(transac);
|
||||||
|
|
||||||
{
|
if(!locked_addTransaction(newTrans))
|
||||||
RsStackMutex stack(mNxsMutex);
|
delete newTrans;
|
||||||
if(!locked_addTransaction(newTrans))
|
|
||||||
delete newTrans;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void RsGxsNetService::genSendGrpsTransaction(NxsTransaction* tr)
|
void RsGxsNetService::locked_genSendGrpsTransaction(NxsTransaction* tr)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
#ifdef NXS_NET_DEBUG
|
||||||
|
std::cerr << "locked_genSendGrpsTransaction()" << std::endl;
|
||||||
|
std::cerr << "Generating Grp data send fron TransN: " << tr->mTransaction->transactionNumber
|
||||||
|
<< std::endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
// go groups requested in transaction tr
|
// go groups requested in transaction tr
|
||||||
|
|
||||||
std::list<RsNxsItem*>::iterator lit = tr->mItems.begin();
|
std::list<RsNxsItem*>::iterator lit = tr->mItems.begin();
|
||||||
@ -845,41 +860,54 @@ void RsGxsNetService::genSendGrpsTransaction(NxsTransaction* tr)
|
|||||||
|
|
||||||
mDataStore->retrieveNxsGrps(grps, false);
|
mDataStore->retrieveNxsGrps(grps, false);
|
||||||
|
|
||||||
|
|
||||||
NxsTransaction* newTr = new NxsTransaction();
|
NxsTransaction* newTr = new NxsTransaction();
|
||||||
newTr->mFlag = NxsTransaction::FLAG_STATE_WAITING_CONFIRM;
|
newTr->mFlag = NxsTransaction::FLAG_STATE_WAITING_CONFIRM;
|
||||||
|
|
||||||
|
uint32_t transN = locked_getTransactionId();
|
||||||
|
|
||||||
// store grp items to send in transaction
|
// store grp items to send in transaction
|
||||||
std::map<std::string, RsNxsGrp*>::iterator mit = grps.begin();
|
std::map<std::string, RsNxsGrp*>::iterator mit = grps.begin();
|
||||||
|
std::string peerId = tr->mTransaction->PeerId();
|
||||||
for(;mit != grps.end(); mit++)
|
for(;mit != grps.end(); mit++)
|
||||||
{
|
{
|
||||||
|
mit->second->PeerId(peerId); // set so it gets send to right peer
|
||||||
|
mit->second->transactionNumber = transN;
|
||||||
newTr->mItems.push_back(mit->second);
|
newTr->mItems.push_back(mit->second);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(newTr->mItems.empty()){
|
||||||
|
delete newTr;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
RsNxsTransac* ntr = new RsNxsTransac(mServType);
|
RsNxsTransac* ntr = new RsNxsTransac(mServType);
|
||||||
ntr->transactionNumber = getTransactionId();
|
ntr->transactionNumber = transN;
|
||||||
ntr->transactFlag = RsNxsTransac::FLAG_BEGIN_P1 |
|
ntr->transactFlag = RsNxsTransac::FLAG_BEGIN_P1 |
|
||||||
RsNxsTransac::FLAG_TYPE_GRPS;
|
RsNxsTransac::FLAG_TYPE_GRPS;
|
||||||
ntr->nItems = grps.size();
|
ntr->nItems = grps.size();
|
||||||
|
|
||||||
newTr->mTransaction = new RsNxsTransac(*ntr);
|
newTr->mTransaction = new RsNxsTransac(*ntr);
|
||||||
newTr->mTransaction->PeerId(mOwnId);
|
newTr->mTransaction->PeerId(mOwnId);
|
||||||
|
newTr->mTimeOut = time(NULL) + mTransactionTimeOut;
|
||||||
|
|
||||||
ntr->PeerId(tr->mTransaction->PeerId());
|
ntr->PeerId(tr->mTransaction->PeerId());
|
||||||
sendItem(ntr);
|
sendItem(ntr);
|
||||||
|
|
||||||
|
locked_addTransaction(newTr);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RsGxsNetService::genSendMsgsTransaction(NxsTransaction* tr)
|
void RsGxsNetService::locked_genSendMsgsTransaction(NxsTransaction* tr)
|
||||||
{
|
{
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
uint32_t RsGxsNetService::getTransactionId()
|
uint32_t RsGxsNetService::locked_getTransactionId()
|
||||||
{
|
{
|
||||||
RsStackMutex stack(mNxsMutex);
|
return ++mTransactionN;
|
||||||
|
|
||||||
return mTransactionN++;
|
|
||||||
}
|
}
|
||||||
bool RsGxsNetService::locked_addTransaction(NxsTransaction* tr)
|
bool RsGxsNetService::locked_addTransaction(NxsTransaction* tr)
|
||||||
{
|
{
|
||||||
@ -918,6 +946,8 @@ void RsGxsNetService::cleanTransactionItems(NxsTransaction* tr) const
|
|||||||
void RsGxsNetService::handleRecvSyncGroup(RsNxsSyncGrp* item)
|
void RsGxsNetService::handleRecvSyncGroup(RsNxsSyncGrp* item)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
RsStackMutex stack(mNxsMutex);
|
||||||
|
|
||||||
std::string peer = item->PeerId();
|
std::string peer = item->PeerId();
|
||||||
|
|
||||||
std::map<std::string, RsGxsGrpMetaData*> grp;
|
std::map<std::string, RsGxsGrpMetaData*> grp;
|
||||||
@ -933,6 +963,8 @@ void RsGxsNetService::handleRecvSyncGroup(RsNxsSyncGrp* item)
|
|||||||
NxsTransaction* tr = new NxsTransaction();
|
NxsTransaction* tr = new NxsTransaction();
|
||||||
std::list<RsNxsItem*>& itemL = tr->mItems;
|
std::list<RsNxsItem*>& itemL = tr->mItems;
|
||||||
|
|
||||||
|
uint32_t transN = locked_getTransactionId();
|
||||||
|
|
||||||
for(; mit != grp.end(); mit++)
|
for(; mit != grp.end(); mit++)
|
||||||
{
|
{
|
||||||
RsNxsSyncGrpItem* gItem = new
|
RsNxsSyncGrpItem* gItem = new
|
||||||
@ -941,6 +973,7 @@ void RsGxsNetService::handleRecvSyncGroup(RsNxsSyncGrp* item)
|
|||||||
gItem->grpId = mit->first;
|
gItem->grpId = mit->first;
|
||||||
gItem->publishTs = mit->second->mPublishTs;
|
gItem->publishTs = mit->second->mPublishTs;
|
||||||
gItem->PeerId(peer);
|
gItem->PeerId(peer);
|
||||||
|
gItem->transactionNumber = transN;
|
||||||
itemL.push_back(gItem);
|
itemL.push_back(gItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -950,18 +983,18 @@ void RsGxsNetService::handleRecvSyncGroup(RsNxsSyncGrp* item)
|
|||||||
| RsNxsTransac::FLAG_TYPE_GRP_LIST_RESP;
|
| RsNxsTransac::FLAG_TYPE_GRP_LIST_RESP;
|
||||||
trItem->nItems = itemL.size();
|
trItem->nItems = itemL.size();
|
||||||
|
|
||||||
trItem->timestamp = time(NULL);
|
trItem->timestamp = 0;
|
||||||
trItem->PeerId(peer);
|
trItem->PeerId(peer);
|
||||||
trItem->transactionNumber = getTransactionId();
|
trItem->transactionNumber = transN;
|
||||||
|
|
||||||
// also make a copy for the resident transaction
|
// also make a copy for the resident transaction
|
||||||
tr->mTransaction = new RsNxsTransac(*trItem);
|
tr->mTransaction = new RsNxsTransac(*trItem);
|
||||||
tr->mTransaction->PeerId(mOwnId);
|
tr->mTransaction->PeerId(mOwnId);
|
||||||
|
tr->mTimeOut = time(NULL) + mTransactionTimeOut;
|
||||||
|
|
||||||
// signal peer to prepare for transaction
|
// signal peer to prepare for transaction
|
||||||
sendItem(trItem);
|
sendItem(trItem);
|
||||||
|
|
||||||
RsStackMutex stack(mNxsMutex);
|
|
||||||
locked_addTransaction(tr);
|
locked_addTransaction(tr);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
@ -969,6 +1002,7 @@ void RsGxsNetService::handleRecvSyncGroup(RsNxsSyncGrp* item)
|
|||||||
|
|
||||||
void RsGxsNetService::handleRecvSyncMessage(RsNxsSyncMsg* item)
|
void RsGxsNetService::handleRecvSyncMessage(RsNxsSyncMsg* item)
|
||||||
{
|
{
|
||||||
|
RsStackMutex stack(mNxsMutex);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -212,13 +212,13 @@ private:
|
|||||||
* Process transaction owned/started by user
|
* Process transaction owned/started by user
|
||||||
* @param tr transaction to process, ownership stays with callee
|
* @param tr transaction to process, ownership stays with callee
|
||||||
*/
|
*/
|
||||||
void processCompletedOutgoingTrans(NxsTransaction* tr);
|
void locked_processCompletedOutgoingTrans(NxsTransaction* tr);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* Process transactions started/owned by other peers
|
* Process transactions started/owned by other peers
|
||||||
* @param tr transaction to process, ownership stays with callee
|
* @param tr transaction to process, ownership stays with callee
|
||||||
*/
|
*/
|
||||||
void processCompletedIncomingTrans(NxsTransaction* tr);
|
void locked_processCompletedIncomingTrans(NxsTransaction* tr);
|
||||||
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@ -240,7 +240,7 @@ private:
|
|||||||
* This retrieves a unique transaction id that
|
* This retrieves a unique transaction id that
|
||||||
* can be used in an outgoing transaction
|
* can be used in an outgoing transaction
|
||||||
*/
|
*/
|
||||||
uint32_t getTransactionId();
|
uint32_t locked_getTransactionId();
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* This attempts to push the transaction id counter back if you have
|
* This attempts to push the transaction id counter back if you have
|
||||||
@ -265,28 +265,28 @@ private:
|
|||||||
* of msgs received from peer stored in passed transaction
|
* of msgs received from peer stored in passed transaction
|
||||||
* @param tr transaction responsible for generating msg request
|
* @param tr transaction responsible for generating msg request
|
||||||
*/
|
*/
|
||||||
void genReqMsgTransaction(NxsTransaction* tr);
|
void locked_genReqMsgTransaction(NxsTransaction* tr);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* Generates new transaction to send grp requests based on list
|
* Generates new transaction to send grp requests based on list
|
||||||
* of grps received from peer stored in passed transaction
|
* of grps received from peer stored in passed transaction
|
||||||
* @param tr transaction responsible for generating grp request
|
* @param tr transaction responsible for generating grp request
|
||||||
*/
|
*/
|
||||||
void genReqGrpTransaction(NxsTransaction* tr);
|
void locked_genReqGrpTransaction(NxsTransaction* tr);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* Generates new transaction to send msg data based on list
|
* Generates new transaction to send msg data based on list
|
||||||
* of grpids received from peer stored in passed transaction
|
* of grpids received from peer stored in passed transaction
|
||||||
* @param tr transaction responsible for generating grp request
|
* @param tr transaction responsible for generating grp request
|
||||||
*/
|
*/
|
||||||
void genSendMsgsTransaction(NxsTransaction* tr);
|
void locked_genSendMsgsTransaction(NxsTransaction* tr);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* Generates new transaction to send grp data based on list
|
* Generates new transaction to send grp data based on list
|
||||||
* of grps received from peer stored in passed transaction
|
* of grps received from peer stored in passed transaction
|
||||||
* @param tr transaction responsible for generating grp request
|
* @param tr transaction responsible for generating grp request
|
||||||
*/
|
*/
|
||||||
void genSendGrpsTransaction(NxsTransaction* tr);
|
void locked_genSendGrpsTransaction(NxsTransaction* tr);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* convenience function to add a transaction to list
|
* convenience function to add a transaction to list
|
||||||
@ -300,7 +300,7 @@ private:
|
|||||||
* @param tr the transaction to check for timeout
|
* @param tr the transaction to check for timeout
|
||||||
* @return false if transaction has timed out, true otherwise
|
* @return false if transaction has timed out, true otherwise
|
||||||
*/
|
*/
|
||||||
bool checkTransacTimedOut(NxsTransaction* tr);
|
bool locked_checkTransacTimedOut(NxsTransaction* tr);
|
||||||
|
|
||||||
/** E: Transaction processing **/
|
/** E: Transaction processing **/
|
||||||
|
|
||||||
|
@ -3,8 +3,10 @@
|
|||||||
NxsTestHub::NxsTestHub(NxsTestScenario* nts) : mTestScenario(nts)
|
NxsTestHub::NxsTestHub(NxsTestScenario* nts) : mTestScenario(nts)
|
||||||
{
|
{
|
||||||
|
|
||||||
netServicePairs.first = new RsGxsNetService(0, mTestScenario->dummyDataService1(), &netMgr1, mTestScenario);
|
netServicePairs.first = new RsGxsNetService(mTestScenario->getServiceType(),
|
||||||
netServicePairs.second = new RsGxsNetService(0, mTestScenario->dummyDataService2(), &netMgr2, mTestScenario);
|
mTestScenario->dummyDataService1(), &netMgr1, mTestScenario);
|
||||||
|
netServicePairs.second = new RsGxsNetService(mTestScenario->getServiceType(),
|
||||||
|
mTestScenario->dummyDataService2(), &netMgr2, mTestScenario);
|
||||||
|
|
||||||
mServicePairs.first = netServicePairs.first;
|
mServicePairs.first = netServicePairs.first;
|
||||||
mServicePairs.second = netServicePairs.second;
|
mServicePairs.second = netServicePairs.second;
|
||||||
@ -28,7 +30,7 @@ void NxsTestHub::run()
|
|||||||
while(isRunning()){
|
while(isRunning()){
|
||||||
|
|
||||||
// make thread sleep for a couple secs
|
// make thread sleep for a couple secs
|
||||||
usleep(300);
|
usleep(3000);
|
||||||
|
|
||||||
p3Service* s1 = mServicePairs.first;
|
p3Service* s1 = mServicePairs.first;
|
||||||
p3Service* s2 = mServicePairs.second;
|
p3Service* s2 = mServicePairs.second;
|
||||||
@ -36,11 +38,13 @@ void NxsTestHub::run()
|
|||||||
RsItem* item = NULL;
|
RsItem* item = NULL;
|
||||||
while((item = s1->send()) != NULL)
|
while((item = s1->send()) != NULL)
|
||||||
{
|
{
|
||||||
|
item->PeerId("PeerB");
|
||||||
send_queue_s1.push_back(item);
|
send_queue_s1.push_back(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
while((item = s2->send()) != NULL)
|
while((item = s2->send()) != NULL)
|
||||||
{
|
{
|
||||||
|
item->PeerId("PeerA");
|
||||||
send_queue_s2.push_back(item);
|
send_queue_s2.push_back(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -56,7 +60,7 @@ void NxsTestHub::run()
|
|||||||
send_queue_s2.pop_front();
|
send_queue_s2.pop_front();
|
||||||
}
|
}
|
||||||
|
|
||||||
// tick services so nxs net services processe items
|
// tick services so nxs net services process items
|
||||||
s1->tick();
|
s1->tick();
|
||||||
s2->tick();
|
s2->tick();
|
||||||
}
|
}
|
||||||
|
@ -9,10 +9,11 @@
|
|||||||
#include "gxs/rsdataservice.h"
|
#include "gxs/rsdataservice.h"
|
||||||
#include "data_support.h"
|
#include "data_support.h"
|
||||||
|
|
||||||
NxsMessageTest::NxsMessageTest()
|
NxsMessageTest::NxsMessageTest(uint16_t servtype)
|
||||||
|
: mServType(servtype)
|
||||||
{
|
{
|
||||||
mStorePair.first = new RsDataService(".", "dStore1", 0);
|
mStorePair.first = new RsDataService(".", "dStore1", mServType);
|
||||||
mStorePair.second = new RsDataService(".", "dStore2", 0);
|
mStorePair.second = new RsDataService(".", "dStore2", mServType);
|
||||||
|
|
||||||
setUpDataBases();
|
setUpDataBases();
|
||||||
}
|
}
|
||||||
@ -40,6 +41,11 @@ void NxsMessageTest::setUpDataBases()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint16_t NxsMessageTest::getServiceType()
|
||||||
|
{
|
||||||
|
return mServType;
|
||||||
|
}
|
||||||
|
|
||||||
void NxsMessageTest::populateStore(RsGeneralDataService* dStore)
|
void NxsMessageTest::populateStore(RsGeneralDataService* dStore)
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -51,7 +57,7 @@ void NxsMessageTest::populateStore(RsGeneralDataService* dStore)
|
|||||||
for(int i = 0; i < nGrp; i++)
|
for(int i = 0; i < nGrp; i++)
|
||||||
{
|
{
|
||||||
std::pair<RsNxsGrp*, RsGxsGrpMetaData*> p;
|
std::pair<RsNxsGrp*, RsGxsGrpMetaData*> p;
|
||||||
grp = new RsNxsGrp(RS_SERVICE_TYPE_PLUGIN_SIMPLE_FORUM);
|
grp = new RsNxsGrp(mServType);
|
||||||
grpMeta = new RsGxsGrpMetaData();
|
grpMeta = new RsGxsGrpMetaData();
|
||||||
p.first = grp;
|
p.first = grp;
|
||||||
p.second = grpMeta;
|
p.second = grpMeta;
|
||||||
@ -83,7 +89,7 @@ void NxsMessageTest::populateStore(RsGeneralDataService* dStore)
|
|||||||
|
|
||||||
for(int i=0; i<nMsgs; i++)
|
for(int i=0; i<nMsgs; i++)
|
||||||
{
|
{
|
||||||
msg = new RsNxsMsg(RS_SERVICE_TYPE_PLUGIN_SIMPLE_FORUM);
|
msg = new RsNxsMsg(mServType);
|
||||||
msgMeta = new RsGxsMsgMetaData();
|
msgMeta = new RsGxsMsgMetaData();
|
||||||
init_item(*msg);
|
init_item(*msg);
|
||||||
init_item(msgMeta);
|
init_item(msgMeta);
|
||||||
|
@ -23,6 +23,7 @@ public:
|
|||||||
virtual std::string getTestName() = 0;
|
virtual std::string getTestName() = 0;
|
||||||
virtual RsGeneralDataService* dummyDataService1() = 0;
|
virtual RsGeneralDataService* dummyDataService1() = 0;
|
||||||
virtual RsGeneralDataService* dummyDataService2() = 0;
|
virtual RsGeneralDataService* dummyDataService2() = 0;
|
||||||
|
virtual uint16_t getServiceType() = 0;
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* Call to remove files created
|
* Call to remove files created
|
||||||
@ -38,9 +39,10 @@ class NxsMessageTest : public NxsTestScenario
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
NxsMessageTest();
|
NxsMessageTest(uint16_t servtype);
|
||||||
virtual ~NxsMessageTest();
|
virtual ~NxsMessageTest();
|
||||||
std::string getTestName();
|
std::string getTestName();
|
||||||
|
uint16_t getServiceType();
|
||||||
RsGeneralDataService* dummyDataService1();
|
RsGeneralDataService* dummyDataService1();
|
||||||
RsGeneralDataService* dummyDataService2();
|
RsGeneralDataService* dummyDataService2();
|
||||||
|
|
||||||
@ -73,6 +75,7 @@ private:
|
|||||||
std::pair<RsGeneralDataService*, RsGeneralDataService*> mStorePair;
|
std::pair<RsGeneralDataService*, RsGeneralDataService*> mStorePair;
|
||||||
std::map<std::string, std::vector<RsNxsMsg*> > mPeerMsgs;
|
std::map<std::string, std::vector<RsNxsMsg*> > mPeerMsgs;
|
||||||
std::map<std::string, std::vector<RsNxsGrp*> > mPeerGrps;
|
std::map<std::string, std::vector<RsNxsGrp*> > mPeerGrps;
|
||||||
|
uint16_t mServType;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@ int main()
|
|||||||
{
|
{
|
||||||
|
|
||||||
// first setup
|
// first setup
|
||||||
NxsMessageTest msgTest;
|
NxsMessageTest msgTest(RS_SERVICE_TYPE_PLUGIN_SIMPLE_FORUM);
|
||||||
NxsTestHub hub(&msgTest);
|
NxsTestHub hub(&msgTest);
|
||||||
|
|
||||||
// now get things started
|
// now get things started
|
||||||
|
Loading…
x
Reference in New Issue
Block a user