Lots of bugfixes and tweaks:

* Switched p3Ranking to share Friends Links as well as own.
 * Modified rankmsgs to contain source id.
 * Fixed up rsNotify, added pqiNotify and global function call to get it.
 * Added notify for Bad Incoming Directory
 * Added Emergency Incoming directory so RS can keep running.
 * Added notify for Bad Packet (connecting to V0.3.X)
 * Added notify for Incomplete Packet Read (not been triggered yet!)
 * added close() to BinInterface, close on pqissl calls reset() 
 * removed exit(1) calls from pqistreamer, replaced with bio->close().
 * Increased Maximum Packet Size for HTML messages.
 * Fixed Online/Offline Message Forwarding. (TEST).
 * Increased DHT bootstrap buckets to 4.
 * Cleaned up much of serialiser debug (was slowing down Mac)
 * Added directory path to File Listings.
 * added ConvertSharedFilePath() so correct local dir can be found.
 * Added ForceDirectoryCheck() and InDirectoryCheck() for file hashing.
 * removed old TMP cache loading.
 * switched off Cache debug.



git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@448 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
drbob 2008-03-31 14:06:59 +00:00
parent a76baa5421
commit 5e41b21cef
36 changed files with 632 additions and 224 deletions

View file

@ -9,7 +9,7 @@ include $(RS_TOP_DIR)/scripts/config.mk
RSOBJ = p3service.o p3chatservice.o p3msgservice.o \
p3gamelauncher.o p3ranking.o p3disc.o \
p3photoservice.o
p3photoservice.o
#TESTOBJ =

View file

@ -30,7 +30,7 @@
#include "pqi/p3connmgr.h"
#include "services/p3msgservice.h"
#include "rsiface/rsnotify.h"
#include "pqi/pqinotify.h"
#include "util/rsdir.h"
@ -144,9 +144,10 @@ int p3MsgService::incomingMsgs()
initRsMIS(mi, mis);
// msgNotifications.push_back(mis);
if (rsNotify)
pqiNotify *notify = getPqiNotify();
if (notify)
{
rsNotify->AddPopupMessage(RS_POPUP_MSG, mi->PeerId(),
notify->AddPopupMessage(RS_POPUP_MSG, mi->PeerId(),
"New Message from: ");
}
}
@ -191,7 +192,7 @@ int p3MsgService::checkOutgoingMessages()
if (mConnMgr->getFriendNetStatus(pid, pstate))
{
if (pstate.state & RS_PEER_S_ONLINE)
if (pstate.state & RS_PEER_S_CONNECTED)
{
toSend = true;
}

View file

@ -32,6 +32,9 @@
const uint32_t RANK_MAX_FWD_OFFSET = (60 * 60 * 24 * 2); /* 2 Days */
//const uint32_t FRIEND_RANK_REPUBLISH_PERIOD = 60; /* every minute for testing */
const uint32_t FRIEND_RANK_REPUBLISH_PERIOD = 1800; /* every 30 minutes */
std::string generateRandomLinkId();
/*****
@ -43,17 +46,20 @@ std::string generateRandomLinkId();
#define RANK_DEBUG 1
p3Ranking::p3Ranking(uint16_t type, CacheStrapper *cs, CacheTransfer *cft,
p3Ranking::p3Ranking(p3ConnectMgr *connMgr,
uint16_t type, CacheStrapper *cs, CacheTransfer *cft,
std::string sourcedir, std::string storedir,
uint32_t storePeriod)
:CacheSource(type, true, cs, sourcedir),
CacheStore(type, true, cs, cft, storedir),
mConnMgr(connMgr),
mRepublish(false), mRepublishFriends(false), mRepublishFriendTS(0),
mStorePeriod(storePeriod), mUpdated(true)
{
{ RsStackMutex stack(mRankMtx); /********** STACK LOCKED MTX ******/
mOwnId = getAuthMgr()->OwnId();
mOwnId = mConnMgr->getOwnId();
mViewPeriod = 60 * 60 * 24 * 30; /* one Month */
mSortType = RS_RANK_ALG;
@ -197,6 +203,8 @@ void p3Ranking::loadRankFile(std::string filename, std::string src)
std::cerr << "p3Ranking::loadRankFile() Loading Item";
std::cerr << std::endl;
#endif
/* correct the source (if is a message from a friend) */
newMsg->PeerId(newMsg->pid);
addRankMsg(newMsg);
}
@ -207,7 +215,7 @@ void p3Ranking::loadRankFile(std::string filename, std::string src)
}
void p3Ranking::publishMsgs()
void p3Ranking::publishMsgs(bool own)
{
#ifdef RANK_DEBUG
@ -215,12 +223,29 @@ void p3Ranking::publishMsgs()
std::cerr << std::endl;
#endif
/* determine filename */
std::string path = CacheSource::getCacheDir();
std::ostringstream out;
out << "rank-links-" << time(NULL) << ".rsrl";
uint16_t subid;
/* setup name / etc based on whether we're
* publishing own or friends...
*/
if (own)
{
/* setup to publish own messages */
out << "rank-links-" << time(NULL) << ".rsrl";
subid = 1;
}
else
{
/* setup to publish friend messages */
out << "rank-friend-links-" << time(NULL) << ".rsrl";
subid = 2;
}
/* determine filename */
std::string tmpname = out.str();
std::string fname = path + "/" + tmpname;
@ -241,10 +266,14 @@ void p3Ranking::publishMsgs()
/* iterate through list */
std::map<std::string, RankGroup>::iterator it;
std::map<std::string, RsRankLinkMsg *>::iterator cit;
for(it = mData.begin(); it != mData.end(); it++)
{
if (it->second.ownTag)
if (own)
{
if (it->second.ownTag)
{
/* write to serialiser */
RsItem *item = it->second.comments[mOwnId];
if (item)
@ -260,13 +289,36 @@ void p3Ranking::publishMsgs()
stream->tick(); /* Tick to write! */
}
}
else
{
}
else
{
#ifdef RANK_DEBUG
std::cerr << "p3Ranking::publishMsgs() Skipping Foreign item";
std::cerr << std::endl;
#endif
}
}
else
{
/* iterate through all comments */
for(cit = it->second.comments.begin();
cit != it->second.comments.end(); cit++)
{
RsItem *item = cit->second;
/* write to serialiser */
if (item && (mConnMgr->isFriend(item->PeerId())))
{
#ifdef RANK_DEBUG
std::cerr << "p3Ranking::publishMsgs() Storing Friend Item:";
std::cerr << std::endl;
item->print(std::cerr, 10);
std::cerr << std::endl;
#endif
stream->SendItem(item);
stream->tick(); /* Tick to write! */
}
}
}
}
@ -282,7 +334,7 @@ void p3Ranking::publishMsgs()
data.pid = mOwnId;
} /********** STACK LOCKED MTX ******/
data.cid = CacheId(CacheSource::getCacheType(), 1);
data.cid = CacheId(CacheSource::getCacheType(), subid);
data.path = path;
data.name = tmpname;
@ -367,6 +419,10 @@ void p3Ranking::addRankMsg(RsRankLinkMsg *msg)
if (newComment)
{
#ifdef RANK_DEBUG
std::cerr << "p3Ranking::addRankMsg() New Comment";
std::cerr << std::endl;
#endif
/* clean up old */
if ((it->second).comments.end() != cit)
{
@ -382,12 +438,32 @@ void p3Ranking::addRankMsg(RsRankLinkMsg *msg)
{
it->second.ownTag = true;
mRepublish = true;
#ifdef RANK_DEBUG
std::cerr << "p3Ranking::addRankMsg() Own Comment: mRepublish = true";
std::cerr << std::endl;
#endif
}
else
{
mRepublishFriends = true;
#ifdef RANK_DEBUG
std::cerr << "p3Ranking::addRankMsg() Other Comment: mRepublishFriends = true";
std::cerr << "p3Ranking::addRankMsg() Old Comment ignoring";
std::cerr << std::endl;
#endif
}
locked_reSortGroup(it->second);
mUpdated = true;
}
else
{
#ifdef RANK_DEBUG
std::cerr << "p3Ranking::addRankMsg() Old Comment ignoring";
std::cerr << std::endl;
#endif
}
}
@ -702,18 +778,33 @@ bool p3Ranking::getRankDetails(std::string rid, RsRankDetails &details)
void p3Ranking::tick()
{
bool repub = false;
bool repubFriends = false;
{
RsStackMutex stack(mRankMtx); /********** STACK LOCKED MTX ******/
repub = mRepublish;
repubFriends = mRepublishFriends && (time(NULL) > mRepublishFriendTS);
}
if (repub)
{
publishMsgs();
publishMsgs(true);
RsStackMutex stack(mRankMtx); /********** STACK LOCKED MTX ******/
mRepublish = false;
}
if (repubFriends)
{
publishMsgs(false);
RsStackMutex stack(mRankMtx); /********** STACK LOCKED MTX ******/
mRepublishFriends = false;
mRepublishFriendTS = time(NULL) + FRIEND_RANK_REPUBLISH_PERIOD;
}
}
bool p3Ranking::updated()
@ -741,6 +832,7 @@ std::string p3Ranking::newRankMsg(std::wstring link, std::wstring title, std::ws
{
RsStackMutex stack(mRankMtx); /********** STACK LOCKED MTX ******/
msg->PeerId(mOwnId);
msg->pid = mOwnId;
}
msg->rid = rid;
@ -785,6 +877,7 @@ bool p3Ranking::updateComment(std::string rid, std::wstring comment)
time_t now = time(NULL);
msg->PeerId(mOwnId);
msg->pid = mOwnId;
msg->rid = rid;
msg->timestamp = now;
msg->title = (it->second).title;
@ -866,6 +959,7 @@ void p3Ranking::createDummyData()
time_t now = time(NULL);
msg->PeerId(mOwnId);
msg->pid = mOwnId;
msg->rid = "0001";
msg->title = L"Original Awesome Site!";
msg->timestamp = now - 60 * 60 * 24 * 15;
@ -876,6 +970,7 @@ void p3Ranking::createDummyData()
msg = new RsRankLinkMsg();
msg->PeerId(mOwnId);
msg->pid = mOwnId;
msg->rid = "0002";
msg->title = L"Awesome Site!";
msg->timestamp = now - 123;
@ -886,6 +981,7 @@ void p3Ranking::createDummyData()
msg = new RsRankLinkMsg();
msg->PeerId("ALTID");
msg->pid = "ALTID";
msg->rid = "0002";
msg->title = L"Awesome Site!";
msg->timestamp = now - 60 * 60 * 24 * 29;
@ -898,6 +994,7 @@ void p3Ranking::createDummyData()
msg = new RsRankLinkMsg();
msg->PeerId("ALTID2");
msg->pid = "ALTID2";
msg->rid = "0002";
msg->title = L"Awesome Site!";
msg->timestamp = now - 60 * 60 * 7;
@ -911,6 +1008,7 @@ void p3Ranking::createDummyData()
msg = new RsRankLinkMsg();
msg->PeerId(mOwnId);
msg->pid = mOwnId;
msg->rid = "0003";
msg->title = L"Weird Site!";
msg->timestamp = now - 60 * 60;
@ -921,6 +1019,7 @@ void p3Ranking::createDummyData()
msg = new RsRankLinkMsg();
msg->PeerId("ALTID");
msg->pid = "ALTID";
msg->rid = "0003";
msg->title = L"Weird Site!";
msg->timestamp = now - 60 * 60 * 24 * 2;

View file

@ -29,7 +29,7 @@
#include "dbase/cachestrapper.h"
#include "pqi/pqiservice.h"
#include "pqi/pqistreamer.h"
//#include "util/rsthreads.h"
#include "pqi/p3connmgr.h"
#include "serialiser/rsserial.h"
@ -65,7 +65,8 @@ class p3Ranking: public CacheSource, public CacheStore
{
public:
p3Ranking(uint16_t type, CacheStrapper *cs, CacheTransfer *cft,
p3Ranking(p3ConnectMgr *connMgr,
uint16_t type, CacheStrapper *cs, CacheTransfer *cft,
std::string sourcedir, std::string storedir,
uint32_t storePeriod);
@ -107,7 +108,7 @@ void tick();
void loadRankFile(std::string filename, std::string src);
void addRankMsg(RsRankLinkMsg *msg);
void publishMsgs();
void publishMsgs(bool own);
float locked_calcRank(RankGroup &grp); /* returns 0->100 */
void locked_reSortGroup(RankGroup &grp);
@ -119,11 +120,16 @@ pqistreamer *createStreamer(std::string file, std::string src, bool reading);
void createDummyData();
p3ConnectMgr *mConnMgr;
RsMutex mRankMtx;
/***** below here is locked *****/
bool mRepublish;
bool mRepublishFriends;
time_t mRepublishFriendTS;
uint32_t mStorePeriod;
std::string mOwnId;