add peer info in pisd
git-svn-id: svn://db.shs.com.ru/pip@19 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5
This commit is contained in:
@@ -114,7 +114,8 @@ public:
|
|||||||
bool isPeerExists(const PIString & name) const {return getPeerByName(name) != 0;}
|
bool isPeerExists(const PIString & name) const {return getPeerByName(name) != 0;}
|
||||||
|
|
||||||
const PeerInfo * getPeerByName(const PIString & name) const {piForeachC (PeerInfo & i, peers) if (i.name == name) return &i; return 0;}
|
const PeerInfo * getPeerByName(const PIString & name) const {piForeachC (PeerInfo & i, peers) if (i.name == name) return &i; return 0;}
|
||||||
const PeerInfo & selfInfo() {return self_info;}
|
const PeerInfo & selfInfo() const {return self_info;}
|
||||||
|
const PIMap<PIString, PIVector<PeerInfo * > > & _peerMap() const {return addresses_map;}
|
||||||
|
|
||||||
void lock() {mc_mutex.lock();}
|
void lock() {mc_mutex.lock();}
|
||||||
void unlock() {mc_mutex.unlock();}
|
void unlock() {mc_mutex.unlock();}
|
||||||
|
|||||||
@@ -36,10 +36,11 @@ FileManager file_manager;
|
|||||||
Daemon daemon_;
|
Daemon daemon_;
|
||||||
|
|
||||||
|
|
||||||
class MainMenu: public PIObject {
|
class MainMenu: public PITimer {
|
||||||
PIOBJECT(MainMenu)
|
PIOBJECT_SUBCLASS(MainMenu, PITimer)
|
||||||
public:
|
public:
|
||||||
MainMenu() {
|
MainMenu() {
|
||||||
|
cur_peer = -1;
|
||||||
TileSimple * tile = new TileSimple("title");
|
TileSimple * tile = new TileSimple("title");
|
||||||
tile->content << TileSimple::Row("pisd (PI System Daemon, PIP version " + PIPVersion() + ")", CellFormat(Black, Transparent));
|
tile->content << TileSimple::Row("pisd (PI System Daemon, PIP version " + PIPVersion() + ")", CellFormat(Black, Transparent));
|
||||||
tile->back_format.color_back = Yellow;
|
tile->back_format.color_back = Yellow;
|
||||||
@@ -68,16 +69,22 @@ public:
|
|||||||
mt->hide(); mt->name = "daemon";
|
mt->hide(); mt->name = "daemon";
|
||||||
center->addTile(mt); mtiles << mt;
|
center->addTile(mt); mtiles << mt;
|
||||||
|
|
||||||
|
mt = tpeer = peerTile();
|
||||||
|
mt->hide(); mt->name = "peer info";
|
||||||
|
center->addTile(mt); mtiles << mt;
|
||||||
|
|
||||||
CONNECTU(&screen, tileEvent, this, tileEvent)
|
CONNECTU(&screen, tileEvent, this, tileEvent)
|
||||||
CONNECTU(&screen, keyPressed, this, keyEvent)
|
CONNECTU(&screen, keyPressed, this, keyEvent)
|
||||||
CONNECTU(&file_manager, menuRequest, this, menuRequest)
|
CONNECTU(&file_manager, menuRequest, this, menuRequest)
|
||||||
CONNECTU(&daemon_, menuRequest, this, menuRequest)
|
CONNECTU(&daemon_, menuRequest, this, menuRequest)
|
||||||
|
start(100);
|
||||||
}
|
}
|
||||||
PIScreenTile * menuTile() {
|
PIScreenTile * menuTile() {
|
||||||
TileList * ret = new TileList();
|
TileList * ret = new TileList();
|
||||||
ret->content << TileList::Row("Show local info", CellFormat());
|
ret->content << TileList::Row("Show local info", CellFormat());
|
||||||
ret->content << TileList::Row("Local file manager", CellFormat());
|
ret->content << TileList::Row("Local file manager", CellFormat());
|
||||||
ret->content << TileList::Row("Connect to another daemon", CellFormat());
|
ret->content << TileList::Row("Connect to another daemon", CellFormat());
|
||||||
|
ret->content << TileList::Row("Peer info", CellFormat());
|
||||||
ret->content << TileList::Row("Exit", CellFormat());
|
ret->content << TileList::Row("Exit", CellFormat());
|
||||||
ret->selection_mode = TileList::NoSelection;
|
ret->selection_mode = TileList::NoSelection;
|
||||||
return ret;
|
return ret;
|
||||||
@@ -94,6 +101,62 @@ public:
|
|||||||
ret->content << TileSimple::Row(" CPU count: " + PIString::fromNumber(PISystemInfo::instance()->processorsCount), CellFormat());
|
ret->content << TileSimple::Row(" CPU count: " + PIString::fromNumber(PISystemInfo::instance()->processorsCount), CellFormat());
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
PIScreenTile * peerTile() {
|
||||||
|
PIScreenTile* ret = new PIScreenTile();
|
||||||
|
TileSimple * htl = new TileSimple();
|
||||||
|
htl->size_policy = PIScreenTypes::Fixed;
|
||||||
|
ret->direction = PIScreenTypes::Vertical;
|
||||||
|
htl->content << TileSimple::Row("Peer: " + daemon_.name() + " | " + daemon_.selfInfo().name, CellFormat(PIScreenTypes::Default, PIScreenTypes::Default, PIScreenTypes::Bold));
|
||||||
|
addrs_tl = new TileList();
|
||||||
|
peers_tl = new TileList();
|
||||||
|
peerinfo_tl = new TileSimple();
|
||||||
|
peermap_tl = new TileList();
|
||||||
|
peerinfo_tl->size_policy = PIScreenTypes::Fixed;
|
||||||
|
ret->addTile(htl);
|
||||||
|
ret->addTile(peers_tl);
|
||||||
|
ret->addTile(peerinfo_tl);
|
||||||
|
ret->addTile(addrs_tl);
|
||||||
|
ret->addTile(peermap_tl);
|
||||||
|
updatePeerInfo();
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
void updatePeerInfo() {
|
||||||
|
screen.lock();
|
||||||
|
peers_tl->content.clear();
|
||||||
|
addrs_tl->content.clear();
|
||||||
|
peerinfo_tl->content.clear();
|
||||||
|
peermap_tl->content.clear();
|
||||||
|
peers_tl->content << TileList::Row("this | 0 | 0 |" + PIString::fromNumber(daemon_.allPeers().size_s()) +
|
||||||
|
"," + PIString::fromNumber(cur_peer)
|
||||||
|
, CellFormat());
|
||||||
|
piForeachC(PIPeer::PeerInfo &p , daemon_.allPeers())
|
||||||
|
peers_tl->content << TileList::Row(p.name + " | " + PIString::fromNumber(p.dist) +
|
||||||
|
" | " + PIString::fromNumber(p.ping()) +
|
||||||
|
" | " + PIString::fromNumber(p.addresses.size_s()) +
|
||||||
|
" | " + PIString::fromBool(p.isNeighbour())
|
||||||
|
, CellFormat());
|
||||||
|
PIPeer::PeerInfo pi = daemon_.selfInfo();
|
||||||
|
if (cur_peer >= 0 && cur_peer < daemon_.allPeers().size_s()) pi = daemon_.allPeers()[cur_peer];
|
||||||
|
peerinfo_tl->content << TileSimple::Row("Name: " + pi.name, CellFormat());
|
||||||
|
peerinfo_tl->content << TileSimple::Row("Addreses: " + PIString::fromNumber(pi.addresses.size()), CellFormat());
|
||||||
|
piForeachC(PIPeer::PeerInfo::Address &a , pi.addresses)
|
||||||
|
addrs_tl->content << TileList::Row(a.address + " | " + a.netmask +
|
||||||
|
" | " + PIString::fromNumber(a.ping) +
|
||||||
|
" | " + PIString::fromNumber(a.last_ping.toSeconds()) +
|
||||||
|
" | " + PIString::fromBool(a.isAvailable()), CellFormat());
|
||||||
|
typedef PIPair<PIString, PIVector <PIPeer::PeerInfo* > > PeerPair;
|
||||||
|
PIStringList peermap;
|
||||||
|
piForeachC(PeerPair &p , daemon_._peerMap()) {
|
||||||
|
PIString s = p.first + " | ";
|
||||||
|
piForeachC(PIPeer::PeerInfo * pp, p.second) s += "->" + pp->name;
|
||||||
|
}
|
||||||
|
piForeachC(PIString &s , peermap)
|
||||||
|
peers_tl->content << TileList::Row(s, CellFormat());
|
||||||
|
screen.unlock();
|
||||||
|
}
|
||||||
|
void tick(void* data_, int delimiter) {
|
||||||
|
updatePeerInfo();
|
||||||
|
}
|
||||||
EVENT_HANDLER(void, menuRequest) {
|
EVENT_HANDLER(void, menuRequest) {
|
||||||
piForeach (PIScreenTile * t, mtiles)
|
piForeach (PIScreenTile * t, mtiles)
|
||||||
t->hide();
|
t->hide();
|
||||||
@@ -109,18 +172,29 @@ public:
|
|||||||
case 0: tinfo->show(); break;
|
case 0: tinfo->show(); break;
|
||||||
case 1: tfm->show(); break;
|
case 1: tfm->show(); break;
|
||||||
case 2: tdaemon->show(); break;
|
case 2: tdaemon->show(); break;
|
||||||
case 3: PIKbdListener::exiting = true; break;
|
case 3: tpeer->show(); break;
|
||||||
|
case 4: PIKbdListener::exiting = true; break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (t == peers_tl) {
|
||||||
|
if (e.type == TileList::RowPressed) {
|
||||||
|
cur_peer = e.data.toInt() - 1;
|
||||||
|
updatePeerInfo();
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
EVENT_HANDLER1(void, keyEvent, PIKbdListener::KeyEvent, e) {
|
EVENT_HANDLER1(void, keyEvent, PIKbdListener::KeyEvent, e) {
|
||||||
if (e.key == PIKbdListener::Esc) menuRequest();
|
if (e.key == PIKbdListener::Esc) menuRequest();
|
||||||
//piCout << "key" << e.key;
|
//piCout << "key" << e.key;
|
||||||
}
|
}
|
||||||
PIScreenTile * tmenu, * tinfo, * tfm, * tdaemon;
|
PIScreenTile * tmenu, * tinfo, * tfm, * tdaemon, * tpeer;
|
||||||
|
TileList * peers_tl, * addrs_tl, * peermap_tl;
|
||||||
|
TileSimple * peerinfo_tl;
|
||||||
PIVector<PIScreenTile * > mtiles;
|
PIVector<PIScreenTile * > mtiles;
|
||||||
|
int cur_peer;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user