Connection::Connection(QTcpSocket *socket) : QObject() , m_connection(socket) , m_command(0) { connect(m_connection, SIGNAL(readyRead()), this, SLOT(receiveCommand())); connect(m_connection, SIGNAL(disconnected()), this, SLOT(closedConnection())); }
// Richiesta connessione TCP in ingresso void DuktoProtocol::newIncomingConnection() { // Verifica presenza connessione pendente if (!mTcpServer->hasPendingConnections()) return; // Recupero connessione QTcpSocket *s = mTcpServer->nextPendingConnection(); // Se sto già ricevendo o inviando, rifiuto la connessione if (mIsReceiving || mIsSending) { s->close(); return; } // Aggiornamento interfaccia grafica receiveFileStart(); // Impostazione socket TCP corrente mCurrentSocket = s; // Attesa header della connessione (timeout 10 sec) if (!s->waitForReadyRead(10000)) { // Non ho ricevuto l'header della connessione, chiudo mCurrentSocket->close(); delete mCurrentSocket; mCurrentSocket = NULL; return; } // Registrazione gestori eventi socket connect(mCurrentSocket, SIGNAL(readyRead()), this, SLOT(readNewData()), Qt::DirectConnection); connect(mCurrentSocket, SIGNAL(disconnected()), this, SLOT(closedConnection()), Qt::QueuedConnection); // Inizializzazione variabili mIsReceiving = true; mTotalReceivedData = 0; mElementSize = -1; mReceivedFiles = new QStringList(); mRootFolderName = ""; mRootFolderRenamed = ""; // -- Lettura header generale -- // Numero entità da ricevere mCurrentSocket->read((char*) &mElementsToReceiveCount, sizeof(qint64)); // Dimensione totale mCurrentSocket->read((char*) &mTotalSize, sizeof(qint64)); // Inizio lettura dati sui file readNewData(); }
void DuktoProtocol::closedConnectionTmp() { QTimer::singleShot(500, this, SLOT(closedConnection())); }