-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathserver.cpp
More file actions
101 lines (78 loc) · 2.29 KB
/
server.cpp
File metadata and controls
101 lines (78 loc) · 2.29 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#include "server.h"
#include <config.h>
#include <QTcpSocket>
#include <QDebug>
#include <QStringBuilder>
#include <QNetworkInterface>
Server* Server::instance;
Server::Server(QObject *parent) : QObject(parent)
{
port = Config::Instance()->port;
tcpServer = new QTcpServer();
}
Server::~Server()
{
//Limpio todo.
delete tcpServer;
qDeleteAll(clientList.begin(),clientList.end());
clientList.clear();
}
Server* Server::Instance()
{
if(instance == nullptr)
instance = new Server();
return instance;
}
void Server::startNewClient()
{
while(tcpServer->hasPendingConnections())
{
QTcpSocket* newSocket = tcpServer->nextPendingConnection();
Client* newClient = new Client(newSocket,this);
connect(newClient, &Client::destroyed, this, &Server::clientDeleted);
this->clientList.append(newClient);
qDebug() << "New Client";
}
}
QString Server::startServer()
{
bool result = tcpServer->listen(QHostAddress::Any,port);
if(!result){
return "No se pudo iniciar el servidor.";
}
connect(tcpServer, &QTcpServer::newConnection, this, &Server::startNewClient);
return "";
}
void Server::stopServer()
{
//Close server listening connection
tcpServer->close();
//Close every Client connection and destroy
qDeleteAll(clientList.begin(),clientList.end());
clientList.clear();
}
bool Server::isRunning()
{
return tcpServer->isListening();
}
QString Server::serverInfo()
{
//QString address = "Address: " + tcpServer->serverAddress().toString();
QString address = "Address: ";
foreach(const QHostAddress &addr, QNetworkInterface::allAddresses()){
if(addr.protocol() == QAbstractSocket::IPv4Protocol && !addr.isLoopback())
address.append(addr.toString());
}
QString separator = "\n" + QString(address.length(),QChar('-')) + "\n";
QString port = "Port: " + QString::number(tcpServer->serverPort(),10);
return address +
separator +
port;
}
void Server::clientDeleted(QObject* obj)
{
Client* client = static_cast<Client*>(obj);
//qDebug() << "CLIENT POINTER: " << client << "QOBJECT POINTER: " << obj;
//qDebug() << "REMOVE SUCCESS: " << clientList.removeOne(client);
//qDebug() << "CLIENT COUNT: " << clientList.size();
}