Пример #1
0
//-----------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------
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");
}
Пример #2
0
/*!
 * \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;
	}
}