#include <peermanager.h>
Inheritance diagram for PeerManager:


Definition at line 36 of file peermanager.h.
Signals | |
| void | newConnection (Connection *connection) |
Public Member Functions | |
| PeerManager (Client *client) | |
| void | setServerPort (int port) |
| QByteArray | userName () const |
| void | startBroadcasting () |
| bool | isLocalHostAddress (const QHostAddress &address) |
Private Slots | |
| void | sendBroadcastDatagram () |
| void | readBroadcastDatagram () |
Private Member Functions | |
| void | updateAddresses () |
Private Attributes | |
| Client * | client |
| QList< QHostAddress > | broadcastAddresses |
| QList< QHostAddress > | ipAddresses |
| QUdpSocket | broadcastSocket |
| QTimer | broadcastTimer |
| QByteArray | username |
| int | serverPort |
| PeerManager::PeerManager | ( | Client * | client | ) |
Definition at line 33 of file peermanager.cpp.
References QHostAddress::Any, QList< T >::at(), QUdpSocket::bind(), BroadcastInterval, broadcastPort, broadcastSocket, broadcastTimer, client, QObject::connect(), index, QStringList::indexOf(), QByteArray::isEmpty(), readBroadcastDatagram(), QUdpSocket::ReuseAddressHint, sendBroadcastDatagram(), serverPort, QTimer::setInterval(), QUdpSocket::ShareAddress, SIGNAL, QList< T >::size(), SLOT, QString::split(), QProcess::systemEnvironment(), QString::toUtf8(), updateAddresses(), and username.
00034 : QObject(client) 00035 { 00036 this->client = client; 00037 00038 QStringList envVariables; 00039 envVariables << "USERNAME.*" << "USER.*" << "USERDOMAIN.*" 00040 << "HOSTNAME.*" << "DOMAINNAME.*"; 00041 00042 QStringList environment = QProcess::systemEnvironment(); 00043 foreach (QString string, envVariables) { 00044 int index = environment.indexOf(QRegExp(string)); 00045 if (index != -1) { 00046 QStringList stringList = environment.at(index).split("="); 00047 if (stringList.size() == 2) { 00048 username = stringList.at(1).toUtf8(); 00049 break; 00050 } 00051 } 00052 } 00053 00054 if (username.isEmpty()) 00055 username = "unknown"; 00056 00057 updateAddresses(); 00058 serverPort = 0; 00059 00060 broadcastSocket.bind(QHostAddress::Any, broadcastPort, QUdpSocket::ShareAddress 00061 | QUdpSocket::ReuseAddressHint); 00062 connect(&broadcastSocket, SIGNAL(readyRead()), 00063 this, SLOT(readBroadcastDatagram())); 00064 00065 broadcastTimer.setInterval(BroadcastInterval); 00066 connect(&broadcastTimer, SIGNAL(timeout()), 00067 this, SLOT(sendBroadcastDatagram())); 00068 }
Here is the call graph for this function:

| void PeerManager::setServerPort | ( | int | port | ) |
Definition at line 70 of file peermanager.cpp.
References serverPort.
Referenced by Client::Client().
00071 { 00072 serverPort = port; 00073 }
| QByteArray PeerManager::userName | ( | ) | const |
Definition at line 75 of file peermanager.cpp.
References username.
Referenced by Client::newConnection(), and Client::nickName().
00076 { 00077 return username; 00078 }
| void PeerManager::startBroadcasting | ( | ) |
Definition at line 80 of file peermanager.cpp.
References broadcastTimer, and QTimer::start().
Referenced by Client::Client().
00081 { 00082 broadcastTimer.start(); 00083 }
| bool PeerManager::isLocalHostAddress | ( | const QHostAddress & | address | ) |
Definition at line 85 of file peermanager.cpp.
References ipAddresses.
Referenced by readBroadcastDatagram().
00086 { 00087 foreach (QHostAddress localAddress, ipAddresses) { 00088 if (address == localAddress) 00089 return true; 00090 } 00091 return false; 00092 }
| void PeerManager::newConnection | ( | Connection * | connection | ) | [signal] |
Referenced by readBroadcastDatagram().
| void PeerManager::sendBroadcastDatagram | ( | ) | [private, slot] |
Definition at line 94 of file peermanager.cpp.
References QByteArray::append(), broadcastAddresses, broadcastPort, broadcastSocket, QByteArray::number(), serverPort, updateAddresses(), username, and QUdpSocket::writeDatagram().
Referenced by PeerManager().
00095 { 00096 QByteArray datagram(username); 00097 datagram.append('@'); 00098 datagram.append(QByteArray::number(serverPort)); 00099 00100 bool validBroadcastAddresses = true; 00101 foreach (QHostAddress address, broadcastAddresses) { 00102 if (broadcastSocket.writeDatagram(datagram, address, 00103 broadcastPort) == -1) 00104 validBroadcastAddresses = false; 00105 } 00106 00107 if (!validBroadcastAddresses) 00108 updateAddresses(); 00109 }
| void PeerManager::readBroadcastDatagram | ( | ) | [private, slot] |
Definition at line 111 of file peermanager.cpp.
References QList< T >::at(), broadcastSocket, client, connection, QByteArray::data(), emit, Client::hasConnection(), QUdpSocket::hasPendingDatagrams(), isLocalHostAddress(), newConnection(), QUdpSocket::pendingDatagramSize(), QUdpSocket::readDatagram(), QByteArray::resize(), serverPort, QByteArray::size(), QList< T >::size(), QByteArray::split(), and QByteArray::toInt().
Referenced by PeerManager().
00112 { 00113 while (broadcastSocket.hasPendingDatagrams()) { 00114 QHostAddress senderIp; 00115 quint16 senderPort; 00116 QByteArray datagram; 00117 datagram.resize(broadcastSocket.pendingDatagramSize()); 00118 if (broadcastSocket.readDatagram(datagram.data(), datagram.size(), 00119 &senderIp, &senderPort) == -1) 00120 continue; 00121 00122 QList<QByteArray> list = datagram.split('@'); 00123 if (list.size() != 2) 00124 continue; 00125 00126 int senderServerPort = list.at(1).toInt(); 00127 if (isLocalHostAddress(senderIp) && senderServerPort == serverPort) 00128 continue; 00129 00130 if (!client->hasConnection(senderIp)) { 00131 Connection *connection = new Connection(this); 00132 emit newConnection(connection); 00133 connection->connectToHost(senderIp, senderServerPort); 00134 } 00135 } 00136 }
| void PeerManager::updateAddresses | ( | ) | [private] |
Definition at line 138 of file peermanager.cpp.
References QNetworkInterface::addressEntries(), QNetworkInterface::allInterfaces(), QNetworkAddressEntry::broadcast(), broadcastAddresses, QList< T >::clear(), QNetworkAddressEntry::ip(), ipAddresses, and QHostAddress::Null.
Referenced by PeerManager(), and sendBroadcastDatagram().
00139 { 00140 broadcastAddresses.clear(); 00141 ipAddresses.clear(); 00142 foreach (QNetworkInterface interface, QNetworkInterface::allInterfaces()) { 00143 foreach (QNetworkAddressEntry entry, interface.addressEntries()) { 00144 QHostAddress broadcastAddress = entry.broadcast(); 00145 if (broadcastAddress != QHostAddress::Null) { 00146 broadcastAddresses << broadcastAddress; 00147 ipAddresses << entry.ip(); 00148 } 00149 } 00150 } 00151 }
Here is the call graph for this function:

Client* PeerManager::client [private] |
Definition at line 58 of file peermanager.h.
Referenced by PeerManager(), and readBroadcastDatagram().
QList<QHostAddress> PeerManager::broadcastAddresses [private] |
Definition at line 59 of file peermanager.h.
Referenced by sendBroadcastDatagram(), and updateAddresses().
QList<QHostAddress> PeerManager::ipAddresses [private] |
Definition at line 60 of file peermanager.h.
Referenced by isLocalHostAddress(), and updateAddresses().
QUdpSocket PeerManager::broadcastSocket [private] |
Definition at line 61 of file peermanager.h.
Referenced by PeerManager(), readBroadcastDatagram(), and sendBroadcastDatagram().
QTimer PeerManager::broadcastTimer [private] |
QByteArray PeerManager::username [private] |
Definition at line 63 of file peermanager.h.
Referenced by PeerManager(), sendBroadcastDatagram(), and userName().
int PeerManager::serverPort [private] |
Definition at line 64 of file peermanager.h.
Referenced by PeerManager(), readBroadcastDatagram(), sendBroadcastDatagram(), and setServerPort().
1.5.1