Add configuration age to listnetworks results and GUI.

This commit is contained in:
Adam Ierymenko 2013-11-21 15:11:22 -05:00
parent 31d718c4a4
commit 4296db2358
9 changed files with 130 additions and 57 deletions

View file

@ -52,9 +52,10 @@ MainWindow::MainWindow(QWidget *parent) :
ui(new Ui::MainWindow)
{
ui->setupUi(this);
this->startTimer(1000);
this->startTimer(1000); // poll service every second
this->setEnabled(false); // gets enabled when updates are received
mainWindow = this;
this->cyclesSinceResponseFromService = 0;
}
MainWindow::~MainWindow()
@ -101,6 +102,11 @@ void MainWindow::timerEvent(QTimerEvent *event)
zeroTierClient = new ZeroTier::Node::LocalClient(authToken.c_str(),0,&handleZTMessage,this);
}
// TODO: do something more user-friendly here... or maybe try to restart
// the service?
if (++this->cyclesSinceResponseFromService == 3)
QMessageBox::critical(this,"No Response from Service","The ZeroTier One service does not appear to be running.",QMessageBox::Ok,QMessageBox::NoButton);
zeroTierClient->send("info");
zeroTierClient->send("listnetworks");
zeroTierClient->send("listpeers");
@ -119,9 +125,7 @@ void MainWindow::customEvent(QEvent *event)
if (hdr[0] != "200")
return;
// Enable main window on valid communication with service
if (!this->isEnabled())
this->setEnabled(true);
this->cyclesSinceResponseFromService = 0;
if (hdr[1] == "info") {
if (hdr.size() >= 3)
@ -134,8 +138,8 @@ void MainWindow::customEvent(QEvent *event)
std::map< std::string,std::vector<std::string> > byNwid;
for(unsigned long i=1;i<m->ztMessage.size();++i) {
std::vector<std::string> l(ZeroTier::Node::LocalClient::splitLine(m->ztMessage[i]));
// 200 listnetworks <nwid> <name> <status> <type> <dev> <ips>
if ((l.size() == 8)&&(l[2].length() == 16))
// 200 listnetworks <nwid> <name> <status> <config age> <type> <dev> <ips>
if ((l.size() == 9)&&(l[2].length() == 16))
byNwid[l[2]] = l;
}
@ -149,10 +153,10 @@ void MainWindow::customEvent(QEvent *event)
if (byNwid.count(i->first)) {
std::vector<std::string> &l = byNwid[i->first];
i->second.second->setNetworkName(l[3]);
i->second.second->setStatus(l[4]);
i->second.second->setNetworkType(l[5]);
i->second.second->setNetworkDeviceName(l[6]);
i->second.second->setIps(l[7]);
i->second.second->setStatus(l[4],l[5]);
i->second.second->setNetworkType(l[6]);
i->second.second->setNetworkDeviceName(l[7]);
i->second.second->setIps(l[8]);
} else {
delete ui->networkListWidget->takeItem(i->second.first);
}
@ -163,10 +167,10 @@ void MainWindow::customEvent(QEvent *event)
std::vector<std::string> &l = i->second;
Network *nw = new Network((QWidget *)0,i->first);
nw->setNetworkName(l[3]);
nw->setStatus(l[4]);
nw->setNetworkType(l[5]);
nw->setNetworkDeviceName(l[6]);
nw->setIps(l[7]);
nw->setStatus(l[4],l[5]);
nw->setNetworkType(l[6]);
nw->setNetworkDeviceName(l[7]);
nw->setIps(l[8]);
QListWidgetItem *item = new QListWidgetItem();
item->setSizeHint(nw->sizeHint());
ui->networkListWidget->addItem(item);
@ -186,13 +190,23 @@ void MainWindow::customEvent(QEvent *event)
QString st(this->myAddress);
st += " (";
st += this->myStatus;
st += ", v";
st += this->myVersion;
st += ", ";
st += QString::number(this->numPeers);
st += " peers)";
while (st.size() < 38)
while (st.size() < 45)
st += QChar::Space;
ui->statusAndAddressButton->setText(st);
}
if (this->myStatus == "ONLINE") {
if (!this->isEnabled())
this->setEnabled(true);
} else {
if (this->isEnabled())
this->setEnabled(false);
}
}
void MainWindow::on_joinNetworkButton_clicked()
@ -217,12 +231,6 @@ void MainWindow::on_actionAbout_triggered()
about->show();
}
void MainWindow::on_actionJoin_Network_triggered()
{
// Does the same thing as clicking join button on main UI
on_joinNetworkButton_clicked();
}
void MainWindow::on_networkIdLineEdit_textChanged(const QString &text)
{
QString newText;