#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QTreeWidgetItem>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
// initTreeWidget();
sock = new QUdpSocket;
mmap.insert(QString::number(this->winId()), "jack");
updateTreeWidget();
sock->bind(8000, QUdpSocket::ReuseAddressHint);
online = QString::number(ONLINE) + QString::number(this->winId());
sock->writeDatagram(online.toLocal8Bit(), QHostAddress::Broadcast, 8000);
connect(sock, SIGNAL(readyRead()),
this, SLOT(dealRecvData()));
}
MainWindow::~MainWindow()
{
offline = QString::number(OFFLINE) + QString::number(this->winId());
sock->writeDatagram(offline.toLocal8Bit(), QHostAddress::Broadcast, 8000);
delete ui;
}
void MainWindow::initTreeWidget()
{
// ui->treeWidget->clear();
QStringList headerlist;
headerlist << "WinId" << "Nickname";
ui->treeWidget->setHeaderLabels(headerlist);
gitem = new QTreeWidgetItem;
gitem->setText(0, "Group");
ui->treeWidget->addTopLevelItem(gitem);
// QTreeWidgetItem *child = new QTreeWidgetItem(gitem);
}
void MainWindow::updateTreeWidget()
{
qDebug() << "========" << /*gitem->childCount()*/;
// if(gitem->childCount()){
//// gitem->takeChildren();
// }
if(!mmap.isEmpty()) {
QMap<QString, QString>::iterator mi;
for(mi = mmap.begin(); mi != mmap.end(); mi++) {
QTreeWidgetItem *child = new QTreeWidgetItem;
child->setText(0, mi.key());
child->setText(1, mi.value());
gitem->addChild(child);
}
}
gitem->setExpanded(true);
}
void MainWindow::dealOnline(QByteArray data)
{
if(!mmap.contains(data.mid(1, data.size() - 1))) {
mmap.insert(data.mid(1, data.size() - 1), data.mid(1, data.size() - 1));
sock->writeDatagram(online.toLocal8Bit(), QHostAddress::Broadcast, 8000);
updateTreeWidget();
}
}
void MainWindow::dealOffline(QByteArray data)
{
}
void MainWindow::dealMsg(QByteArray data)
{
}
void MainWindow::dealRecvData()
{
if(sock->hasPendingDatagrams()) {
QByteArray array;
qint64 len = sock->pendingDatagramSize();
array.resize(len);
QHostAddress ip;
quint16 port;
sock->readDatagram(array.data(), len, &ip, &port);
qDebug() << ip << port;
STATUS flag = static_cast<STATUS> (array.at(0) - 48);
switch(flag) {
case ONLINE:
dealOnline(array);
break;
case OFFLINE:
dealOffline(array);
break;
case MSGDATA:
dealMsg(array);
break;
default:
break;
}
}
}