Beispiel #1
0
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;
}
Beispiel #3
0
//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);
    }
}
Beispiel #4
0
//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();
}