//----------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------- void SocketHandler::processor() { // LOG_MSG("In processor"); socket = tcpServer->nextPendingConnection(); sprintf(msg,"got server connection: %p",socket); LOG_MSG(msg); emit sh_connected(); // try moving this (wgich triggers PreConnection()) to Run (after get_dimensions) QString qdata; QByteArray ba; ba.resize(1024); while (true) { if (stopped) { LOG_MSG("SocketHandler::processor: stopped!"); break; } socket->waitForReadyRead(100); int nb = socket->bytesAvailable(); if (nb > 0) { ba = socket->readLine(1024); qdata = QString(ba); QStringList s = qdata.split("^",QString::SkipEmptyParts); for (int k=0; k<s.length(); k++) { emit sh_output(s[k]); // Emit signal to update GUI if (port == CPORT0) { LOG_QMSG(s[k]); } } if (quitMessage(qdata)) { sprintf(msg,"Closing connection: port: %d", port); LOG_MSG(msg); break; } else { // LOG_MSG("No bytes yet"); } } } socket->close(); LOG_MSG("closed socket"); tcpServer->close(); LOG_MSG("closed tcpServer"); if (port == CPORT0) { emit sh_disconnected(); // Is it right that both threads emit this? } LOG_MSG("processor ends"); }
/*! * \brief Executes a command from telnet interface */ void TelnetSocket::execute(const QString &command) { QString arguments; Console::Command cmd = parseCommand(command, arguments); switch (cmd) { case Console::Empty: show(QString()); break; case Console::Help: show(helpMessage(arguments == QLatin1String("0"))); break; case Console::Quit: show(quitMessage(), false); disconnectFromHost(); break; case Console::Kill: show(quitMessage(), false); disconnectFromHost(); Console::execute(Console::Kill); break; case Console::Download: { QVariantList arg; arg.append(QVariant::fromValue(arguments)); arg.append(QVariant::fromValue(true)); if (Console::execute(Console::Download, arg)) show(color(tr("Link '%1' added").arg(arguments), Cyan)); else show(color(tr("Failed to add link '%1'").arg(arguments), Red)); } break; case Console::StartTask: case Console::PauseTask: case Console::StopTask: case Console::DeleteTask: { QVariantList arg; arg.append(QVariant::fromValue(arguments.toInt())); if (Console::execute(cmd, arg)) show(color(tr("Done"), Cyan)); else show(color(tr("Invalid task ID : '%1'").arg(arguments.toInt()), Red)); } break; case Console::GetProperty: { QVariantList arg; QVariant result; arg.append(QVariant::fromValue(arguments)); if (Console::execute(cmd, arg, &result)) show(color(tr("%1 : %2").arg(arguments).arg(result.toString()), Cyan)); else show(color(tr("Invalid property : '%1'").arg(arguments), Red)); } break; case Console::SetProperty: { QVariantList arg; arg.append(QVariant::fromValue(arguments.section(QLatin1Char(' '), 0, 0))); arg.append(QVariant::fromValue(arguments.section(QLatin1Char(' '), 1, 1).toInt())); if (Console::execute(cmd, arg)) show(color(tr("Done"), Cyan)); else show(color(tr("Invalid property : '%1'").arg(arguments), Red)); } break; case Console::Status: { /// \todo ugly here QStringList title; QList<QStringList> list; title.append(tr("ID")); title.append(tr("State")); title.append(tr("File")); title.append(tr("%")); title.append(tr("Size")); title.append(tr("DownloadTime")); const TaskManager::Tasks &tasks = TaskManager::getInstance()->getTasks(); for (auto iter = tasks.constBegin(); iter != tasks.constEnd(); ++iter) { QStringList item; item.append(QString::number(iter.key())); item.append(iter.value()->getStateString()); item.append(iter.value()->getName()); item.append(Utility::HumanReadable::formatPercent(iter.value()->getProgress())); item.append(Utility::HumanReadable::formatByte(iter.value()->getSize())); item.append(QString::number(iter.value()->getTransferTime())); list.append(item); } // get the max width for each column QList<int> width; foreach (const QString &columnName, title) width.append(columnName.size()); foreach (const QStringList &item, list) for (int i = 0; i < item.size(); ++i) width[i] = qMax(width[i], item[i].size()); // padding for (int i = 0; i < width.size(); ++i) width[i] += 3; QString result; // title for (int i = 0; i < title.size(); ++i) result.append(title[i].rightJustified(width[i])); result = color(result, Cyan); result.append(QLatin1Char('\n')); // items foreach (const QStringList &item, list) { for (int i = 0; i < item.size(); ++i) result.append(item[i].rightJustified(width[i])); result.append(QLatin1Char('\n')); } // global statistics result.append(tr("Download Rate : %1/s Upload Rate : %2/s") .arg(Utility::HumanReadable::formatByte(Network::TrafficManager::getInstance()->getDownloadRate())) .arg(Utility::HumanReadable::formatByte(Network::TrafficManager::getInstance()->getUploadRate()))); show(result); } break; default: show(color(tr("Invalid command '%1'\n\n").arg(command), Red) + helpMessage(true)); break; } }