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:
@@ -36,10 +36,11 @@ FileManager file_manager;
|
||||
Daemon daemon_;
|
||||
|
||||
|
||||
class MainMenu: public PIObject {
|
||||
PIOBJECT(MainMenu)
|
||||
class MainMenu: public PITimer {
|
||||
PIOBJECT_SUBCLASS(MainMenu, PITimer)
|
||||
public:
|
||||
MainMenu() {
|
||||
cur_peer = -1;
|
||||
TileSimple * tile = new TileSimple("title");
|
||||
tile->content << TileSimple::Row("pisd (PI System Daemon, PIP version " + PIPVersion() + ")", CellFormat(Black, Transparent));
|
||||
tile->back_format.color_back = Yellow;
|
||||
@@ -67,17 +68,23 @@ public:
|
||||
mt = tdaemon = daemon_.tile();
|
||||
mt->hide(); mt->name = "daemon";
|
||||
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, keyPressed, this, keyEvent)
|
||||
CONNECTU(&file_manager, menuRequest, this, menuRequest)
|
||||
CONNECTU(&daemon_, menuRequest, this, menuRequest)
|
||||
start(100);
|
||||
}
|
||||
PIScreenTile * menuTile() {
|
||||
TileList * ret = new TileList();
|
||||
ret->content << TileList::Row("Show local info", CellFormat());
|
||||
ret->content << TileList::Row("Local file manager", CellFormat());
|
||||
ret->content << TileList::Row("Connect to another daemon", CellFormat());
|
||||
ret->content << TileList::Row("Peer info", CellFormat());
|
||||
ret->content << TileList::Row("Exit", CellFormat());
|
||||
ret->selection_mode = TileList::NoSelection;
|
||||
return ret;
|
||||
@@ -94,6 +101,62 @@ public:
|
||||
ret->content << TileSimple::Row(" CPU count: " + PIString::fromNumber(PISystemInfo::instance()->processorsCount), CellFormat());
|
||||
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) {
|
||||
piForeach (PIScreenTile * t, mtiles)
|
||||
t->hide();
|
||||
@@ -109,18 +172,29 @@ public:
|
||||
case 0: tinfo->show(); break;
|
||||
case 1: tfm->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;
|
||||
}
|
||||
if (t == peers_tl) {
|
||||
if (e.type == TileList::RowPressed) {
|
||||
cur_peer = e.data.toInt() - 1;
|
||||
updatePeerInfo();
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
EVENT_HANDLER1(void, keyEvent, PIKbdListener::KeyEvent, e) {
|
||||
if (e.key == PIKbdListener::Esc) menuRequest();
|
||||
//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;
|
||||
int cur_peer;
|
||||
};
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user