Server::Server() { // Gestion du lancement du serveur serveur = new QTcpServer(this); if (!serveur->listen(QHostAddress::Any, 50885)) // Démarrage du serveur sur toutes les IP disponibles et sur le port 50585 { qDebug() << "Server failed to start"; exit(0); } else { qDebug() << "Server Started"; screen = QApplication::desktop()->screenGeometry(); connect(serveur, SIGNAL(newConnection()), this, SLOT(nouvelleConnexion())); } //on récupère l'ip du serveur pour l'afficher foreach (const QHostAddress &address, QNetworkInterface::allAddresses()) { if (address.protocol() == QAbstractSocket::IPv4Protocol && address != QHostAddress(QHostAddress::LocalHost)) localIp=address.toString(); } //on initialise les variables propres au serveur et on lance l'affichage tailleMessage = 0; pipeline = NULL; allocatedPort = 5000; setPipeline(); }
bool RenderableParticleEffectEntityItem::addToScene(EntityItemPointer self, render::ScenePointer scene, render::PendingChanges& pendingChanges) { auto particlePayload = std::shared_ptr<ParticlePayload>(new ParticlePayload(shared_from_this())); particlePayload->setPipeline(_untexturedPipeline); _renderItemId = scene->allocateID(); auto renderData = ParticlePayload::Pointer(particlePayload); auto renderPayload = render::PayloadPointer(new ParticlePayload::Payload(renderData)); pendingChanges.resetItem(_renderItemId, renderPayload); _scene = scene; return true; }
//FONCTION : réagit selon le message passé en paramètre void Server::processRequest(const QString &message,QTcpSocket*socket) { QStringList req = message.split(QRegExp("@")); int idClient = getIndexFromSocket(socket); if(req[0].compare("isSending")==0) { bool statePlaying=req[1].toInt(); qDebug() << "SERVER pipeline will change because user streaming stopped"; clients[idClient].isSending=statePlaying; setPipeline(); } else if (req[0].compare("name")==0) { int databaseResult = verifyDataBase(req[1],req[2]); if(databaseResult==-1 || alreadyConnected(req[1])) { //si le client n'est pas dans la base, on le kick qDebug() << "SERVER kicked " + req[1]; clients[idClient].sock->abort(); } else { clients[idClient].name=req[1]; sendToClient("port@"+QString::number(allocatedPort),clients[idClient].sock); clients[idClient].port=allocatedPort; clients[idClient].isTeacher=databaseResult; clients[idClient].isSending=true; allocatedPort++; sendToClient("isTeacher@"+QString::number(databaseResult),clients[idClient].sock); setPipeline(); } } else if (req[0].compare("chat")==0) { sendToAll(message); } }
//SLOT : Lorsque la socket client est perdue supprime les données relatives au client change l'affichage void Server::clientDisconnected() { // On détermine quel client se déconnecte QTcpSocket *socket = qobject_cast<QTcpSocket *>(sender()); if (socket == 0) // Si par hasard on n'a pas trouvé le client à l'origine du signal, on arrête la méthode return; qDebug() << clients[getIndexFromSocket(socket)].sock->peerAddress() << "is now disconnected"; int num=getIndexFromSocket(socket); int removedClientPort=clients[num].port; clients.removeAt(num); socket->deleteLater(); if(removedClientPort!=-1) setPipeline(); }