#include "Network.h"
Network::Network(unsigned int port) {
this->_server = new QTcpServer(this);
connect(this->_server, SIGNAL(newConnection()), this, SLOT(newUser()));
if (!this->_server->listen(QHostAddress::Any, port)) {
qDebug() << "Unable to start the server: " << this->_server->errorString();
} else {
qDebug() << "Listen port: " << port;
}
this->_socket = new QList<QTcpSocket *>;
}
Network::~Network()
{
foreach (QTcpSocket *socketReceiver, *this->_socket) {
socketReceiver->close();
}
}
void Network::newUser() {
qDebug() << "New connection";
while (QTcpSocket * socket = this->_server->nextPendingConnection()) {
this->_socket->push_back(socket);
connect(socket, SIGNAL(readyRead()), this, SLOT(readUserData()));
connect(socket, SIGNAL(disconnected()), this, SLOT(disconnectedClient()));
}
}
void Network::readUserData() {
QTcpSocket *socket = (QTcpSocket *)this->sender();
QByteArray data = socket->readAll();
QByteArray width_str(4, '0');
QByteArray tmp_byte_arr = QByteArray::number(socket->socketDescriptor(), 16);
width_str.replace(4 - tmp_byte_arr.size(), tmp_byte_arr.size(), tmp_byte_arr);
data.prepend(width_str);
foreach (QTcpSocket *socketReceiver, *this->_socket) {
if (socketReceiver->socketDescriptor() != socket->socketDescriptor()) {
socketReceiver->write(data);
}
}
}
void Network::disconnectedClient()
{
qDebug() << "Connection lost";
QTcpSocket *socket = (QTcpSocket *)this->sender();
int index = this->_socket->indexOf(socket);
this->_socket->removeAt(index);
}