this->status->showMessage("<font color=\"#ff0000\">Don't forget almost all features are not implemented!</font>",default_status_interval);
event->accept();
}
-bool mainWindow::isInMember(const AddressAndPort &peer,bool matchIPOnly){
- QList<AddressAndPort> iplist=this->memberList->addressPortList();
- foreach(AddressAndPort addressPort,iplist){
- if(matchIPOnly&&peer.first==addressPort.first) return true;
- else if(peer==addressPort) return true;
- }
- return false;
-}
//Client behavior
void mainWindow::on_sendButton_clicked(){
#ifdef DEBUG
qDebug()<<"Pending:"<<socket.peerAddress().toString()<<" Port:"<<socket.peerPort();
#endif
- if(!this->isInMember(AddressAndPort(socket.peerAddress(),0),true)) return false;
+ if(this->memberList->isInMember(AddressAndPort(socket.peerAddress(),0),true)<0) return false;
connect(&socket,
SIGNAL(msg_received(const QString &)),
SLOT(tcpserver_msg_received(const QString &)));
#include <QtGui>
#include <QtNetwork>
#include "../definition.h"
+
+#define AddressIndex 1
+#define NameIndex 0
class MemberList:virtual public QTableWidget{
Q_OBJECT
public:
QString name(const AddressAndPort&,bool) const;
int isInMember(const AddressAndPort &peer,bool matchIPOnly)const;
friend QDataStream &operator<<(QDataStream &out,const MemberList &value){
- QHash<QString,AddressAndPort> AddressList;
+ QList<NameAndAddrPort> AddressList;
for(int row=0;row<value.rowCount();row++){
- QStringList AddrAndPort=value.item(row,1)->text().split(":");
- AddressList.insertMulti(value.item(row,0)->text(),AddressAndPort(QHostAddress(AddrAndPort[0]),(AddrAndPort.count()==2)? AddrAndPort[1].toUShort():default_port));
+ QStringList AddrAndPort=value.item(row,AddressIndex)->text().split(":");
+ AddressList<<NameAndAddrPort(value.item(row,NameIndex)->text(),AddressAndPort(QHostAddress(AddrAndPort[0]),(AddrAndPort.count()==2)? AddrAndPort[1].toUShort():default_port));
}
out<<AddressList;
return out;
}
friend QDataStream &operator>>(QDataStream &in, MemberList &value){
- QHash<QString,AddressAndPort> AddressList;
+ QList<NameAndAddrPort> AddressList;
in>>AddressList;
value.remove_all_contents();
- for(QHash<QString,AddressAndPort>::iterator index=AddressList.begin();index!=AddressList.end();index++){
- QTableWidgetItem *name=new QTableWidgetItem(index.key()),
+ foreach(NameAndAddrPort addressList,AddressList){
+ QTableWidgetItem *name=new QTableWidgetItem(addressList.first),
*AddressPort=new QTableWidgetItem(QString("%1:%2").
- arg(index.value().first.toString()).
- arg(index.value().second));
+ arg(addressList.second.first.toString()).
+ arg(addressList.second.second));
value.insertRow(value.rowCount());
- value.setItem(value.rowCount()-1,0,name);
- value.setItem(value.rowCount()-1,1,AddressPort);
+ value.setItem(value.rowCount()-1,NameIndex,name);
+ value.setItem(value.rowCount()-1,AddressIndex,AddressPort);
}
return in;
}