summaryrefslogtreecommitdiff
path: root/resourceqt-client
diff options
context:
space:
mode:
authorRobert Löfman <ext-robert.lofman@nokia.com>2010-12-01 15:36:20 +0200
committerRobert Löfman <ext-robert.lofman@nokia.com>2010-12-01 15:36:20 +0200
commitef6d735381083c0e90b122f6a22771c13337b8c1 (patch)
tree4f69feab50e681ed253ba8d8d0fe4ea6ce0987c8 /resourceqt-client
parent248ec24e0e776588278053c33bef18be52c489c2 (diff)
parent2db176e028c54684e2fe6adf58ab0c5807d298c9 (diff)
Merge branch 'master' of ssh://karma.research.nokia.com/u/repositories/libresourceqt
Conflicts: resourceqt-client/client.cpp resourceqt-client/client.h
Diffstat (limited to 'resourceqt-client')
-rw-r--r--resourceqt-client/client.cpp112
-rw-r--r--resourceqt-client/client.h4
-rw-r--r--resourceqt-client/commandlineparser.cpp29
-rw-r--r--resourceqt-client/commandlineparser.h5
-rw-r--r--resourceqt-client/resourceqt-client.cpp1
5 files changed, 91 insertions, 60 deletions
diff --git a/resourceqt-client/client.cpp b/resourceqt-client/client.cpp
index ee76bf8..007259f 100644
--- a/resourceqt-client/client.cpp
+++ b/resourceqt-client/client.cpp
@@ -29,7 +29,8 @@ USA.
#include "client.h"
-#define outputln output << "\n"
+#define OUTPUT output << prefix
+#define outputln output << "\n" << prefix
using namespace ResourcePolicy;
@@ -52,14 +53,14 @@ CommandListArgs::~CommandListArgs()
Client::Client()
: QObject(), standardInput(stdin, QIODevice::ReadOnly), stdInNotifier(0, QSocketNotifier::Read), pendingAddAudio(false), applicationClass(),
- resourceSet(NULL), output(stdout)
+ resourceSet(NULL), output(stdout), prefix(""), showTimings(false)
{
commandList["help"] = CommandListArgs("", "print this help message");
commandList["quit"] = CommandListArgs("", "exit application");
commandList["free"] = CommandListArgs("", "destroy and free the resources");
commandList["acquire"] = CommandListArgs("", "acquire required resources");
commandList["release"] = CommandListArgs("", "release resources");
- commandList["update"] = CommandListArgs("update all[:opt] where 'all' and 'opt' are comma separated resources",
+ commandList["update"] = CommandListArgs("update <all>[:opt] where 'all' and 'opt' are comma separated resources",
"update the resource set by specifying the new set");
commandList["audio"] = CommandListArgs("pid <pid> | group <audio group> | tag <name> <value>", "set audio properties");
commandList["addaudio"] = CommandListArgs("<audio group> <pid> <tag name> <tag value>", "Add an audio resource and set the properties");
@@ -74,7 +75,7 @@ Client::~Client()
void Client::showPrompt()
{
- output << "resource-Qt> " << flush;
+ OUTPUT << "resource-Qt> " << flush;
}
bool Client::initialize(const CommandLineParser &parser)
@@ -82,13 +83,16 @@ bool Client::initialize(const CommandLineParser &parser)
QSet<ResourcePolicy::ResourceType> allResources;
QSet<ResourcePolicy::ResourceType> optionalResources;
+ prefix = parser.getPrefix();
+
if (parser.shouldAlwaysReply()) {
- output << "client: AlwaysReply" << endl;
+ OUTPUT << "client: AlwaysReply" << endl;
}
if (parser.shouldAutoRelease()) {
- output << "client: AutoRelease" << endl;
+ OUTPUT << "client: AutoRelease" << endl;
}
+ showTimings = parser.showTimings();
resourceSet = new ResourceSet(parser.resourceApplicationClass(), this,
parser.shouldAlwaysReply(),
@@ -136,9 +140,9 @@ bool Client::initialize(const CommandLineParser &parser)
return false;
}
- start_timer();
+ startTimer();
resourceSet->initAndConnect();
- output << "accepting input" << endl;
+ OUTPUT << "accepting input" << endl;
showPrompt();
return true;
}
@@ -273,19 +277,12 @@ void Client::showResources(const QList<Resource*> &resList)
void Client::stopConnectTimerHandler()
{
- long int ms = stop_timer();
- if (ms > 0) {
- outputln << "Register took " << ms << "ms" << endl;
- }
-
+ stopTimer();
}
void Client::resourceAcquiredHandler(const QList<ResourceType>&)
{
- long int ms = stop_timer();
- if (ms > 0) {
- outputln << "Operation took " << ms << "ms" << endl;
- }
+ stopTimer();
QList<Resource*> list = resourceSet->resources();
if (!list.count()) {
@@ -298,28 +295,22 @@ void Client::resourceAcquiredHandler(const QList<ResourceType>&)
grantedResources << resource->type();
}
}
- output << "granted:" << grantedResources << endl;
+ OUTPUT << "granted:" << grantedResources << endl;
}
showPrompt();
}
void Client::resourceDeniedHandler()
{
- long int ms = stop_timer();
- if (ms > 0) {
- outputln << "Operation took " << ms << "ms" << endl;
- }
+ stopTimer();
QList<Resource*> allResources = resourceSet->resources();
- output << "denied:" << allResources << endl;
+ OUTPUT << "denied:" << allResources << endl;
showPrompt();
}
void Client::resourceLostHandler()
{
- long int ms = stop_timer();
- if (ms > 0) {
- outputln << "Operation took " << ms << "ms" << endl;
- }
+ stopTimer();
QList<Resource*> allResources = resourceSet->resources();
outputln << "lost:" << allResources << endl;
@@ -328,10 +319,7 @@ void Client::resourceLostHandler()
void Client::resourceReleasedHandler()
{
- long int ms = stop_timer();
- if (ms > 0) {
- outputln << "Operation took " << ms << "ms" << endl;
- }
+ stopTimer();
QList<Resource*> allResources = resourceSet->resources();
outputln << "released:"<< allResources << endl;
@@ -342,10 +330,7 @@ void Client::resourcesBecameAvailableHandler(const QList<ResourcePolicy::Resourc
{
if (pendingAddAudio) {
pendingAddAudio = false;
- long int ms = stop_timer();
- if (ms > 0) {
- outputln << "Operation took " << ms << "ms" << endl;
- }
+ stopTimer();
}
outputln << "advice:" << availableResources << endl;
showPrompt();
@@ -371,11 +356,11 @@ void Client::readLine(int)
return;
}
else if (command == "help") {
- output << "Available commands:\n";
+ OUTPUT << "Available commands:\n";
QMap<QString, CommandListArgs>::const_iterator i =
commandList.constBegin();
while (i != commandList.constEnd()) {
- output << qSetFieldWidth(10) << right << i.key()
+ OUTPUT << qSetFieldWidth(10) << right << i.key()
<< qSetFieldWidth(1) << " "
<< qSetFieldWidth(55) << left << i.value().args
<< qSetFieldWidth(0) << i.value().help << endl;
@@ -389,7 +374,7 @@ void Client::readLine(int)
else {
QList<Resource*> list = resourceSet->resources();
if (!list.count()) {
- output << "Resource set is empty, use add command to add some."
+ OUTPUT << "Resource set is empty, use add command to add some."
<< endl;
}
else {
@@ -398,20 +383,19 @@ void Client::readLine(int)
}
}
else if (command == "acquire") {
- start_timer();
+ startTimer();
if (!resourceSet || !resourceSet->acquire()) {
- stop_timer();
+ stopTimer();
qCritical("%s failed!", qPrintable(command));
}
}
else if (command == "release") {
- start_timer();
+ startTimer();
if (!resourceSet || !resourceSet->release()) {
- stop_timer();
+ stopTimer();
qCritical("%s failed!", qPrintable(command));
}
}
-
else if (command == "update") {
QString resourceList;
@@ -420,14 +404,12 @@ void Client::readLine(int)
if (!resourceSet)
qCritical("%s failed!", qPrintable(command));
- if (resourceList.isEmpty() || resourceList.isNull())
- {
+ if (resourceList.isEmpty() || resourceList.isNull()) {
qCritical("%s failed! List of desired resources is missing. Use help.",
qPrintable(command));
}
- else
- {
- start_timer();
+ else {
+ startTimer();
modifyResources(resourceList);
if (!resourceSet->update())
@@ -441,14 +423,14 @@ void Client::readLine(int)
input >> what;
if (what.isEmpty() || what.isNull()) {
- output << "Not enough parameters! See help" << endl;
+ OUTPUT << "Not enough parameters! See help" << endl;
}
else {
Resource *resource = resourceSet->resource(AudioPlaybackType);
AudioResource *audioResource = static_cast<AudioResource*>(resource);
qDebug("resource = %p audioResource = %p", resource, audioResource);
if (audioResource == NULL) {
- output << "No AudioResource available in set!" << endl;
+ OUTPUT << "No AudioResource available in set!" << endl;
}
else {
if (what == "group") {
@@ -462,14 +444,14 @@ void Client::readLine(int)
audioResource->setProcessID(pid);
}
else {
- output << "Bad pid parameter!" << endl;
+ OUTPUT << "Bad pid parameter!" << endl;
}
}
else if (what == "tag") {
input >> tagName >> tagValue;
if (tagName.isEmpty() || tagName.isNull() ||
tagValue.isEmpty() || tagValue.isNull()) {
- output << "tag requires 2 parameters name and value. See help"
+ OUTPUT << "tag requires 2 parameters name and value. See help"
<< endl;
}
else {
@@ -477,7 +459,7 @@ void Client::readLine(int)
}
}
else {
- output << "Unknown audio command!";
+ OUTPUT << "Unknown audio command!";
}
}
}
@@ -488,18 +470,18 @@ void Client::readLine(int)
input >> group >> pid >> tagName >> tagValue;
if (group.isEmpty() || (pid == 0) || tagName.isEmpty() || tagValue.isEmpty()) {
- output << "Invalid parameters! See help!" << endl;
+ OUTPUT << "Invalid parameters! See help!" << endl;
}
else {
AudioResource *audioResource = new AudioResource(group);
if (audioResource == NULL) {
- output << "Failed to create an AudioResource object!" << endl;
+ OUTPUT << "Failed to create an AudioResource object!" << endl;
}
else {
audioResource->setProcessID(pid);
audioResource->setStreamTag(tagName, tagValue);
pendingAddAudio = true;
- start_timer();
+ startTimer();
resourceSet->addResourceObject(audioResource);
}
}
@@ -509,7 +491,7 @@ void Client::readLine(int)
resourceSet = new ResourceSet(applicationClass);
}
else {
- output << "unknown command '" << command << "'" << endl;
+ OUTPUT << "unknown command '" << command << "'" << endl;
}
showPrompt();
@@ -537,3 +519,19 @@ QTextStream & operator<< (QTextStream &output,
return output;
}
+void Client::startTimer()
+{
+ if (showTimings) {
+ start_timer();
+ }
+}
+
+void Client::stopTimer()
+{
+ if (showTimings) {
+ long int ms = stop_timer();
+ if (ms > 0) {
+ outputln << "Operation took " << ms << " ms" << endl;
+ }
+ }
+}
diff --git a/resourceqt-client/client.h b/resourceqt-client/client.h
index e592fb9..6419003 100644
--- a/resourceqt-client/client.h
+++ b/resourceqt-client/client.h
@@ -71,6 +71,8 @@ private:
QString applicationClass;
ResourcePolicy::ResourceSet *resourceSet;
QTextStream output;
+ QString prefix;
+ bool showTimings;
static QMap<QString, CommandListArgs> commandList;
@@ -81,6 +83,8 @@ private:
void showResources(const QList<ResourcePolicy::ResourceType> &resList);
void showResources(const QList<ResourcePolicy::Resource*> &resList);
void modifyResources(const QString &resString);
+ inline void startTimer();
+ inline void stopTimer();
};
QTextStream & operator<< (QTextStream &output,
diff --git a/resourceqt-client/commandlineparser.cpp b/resourceqt-client/commandlineparser.cpp
index f169801..cb477fd 100644
--- a/resourceqt-client/commandlineparser.cpp
+++ b/resourceqt-client/commandlineparser.cpp
@@ -28,7 +28,8 @@ QHash<QString, ResourcePolicy::ResourceType> CommandLineParser::resourceValues;
CommandLineParser::CommandLineParser():
allResources(), optResources(), autoRelease(false), alwaysReply(false),
- verbose(false), allowUnkownResourceClass(false), output(stdout)
+ verbose(false), allowUnkownResourceClass(false), output(stdout), prefix(""),
+ timings(false)
{
resourceValues["AudioPlayback"] = ResourcePolicy::AudioPlaybackType;
resourceValues["VideoPlayback"] = ResourcePolicy::VideoPlaybackType;
@@ -63,6 +64,8 @@ bool CommandLineParser::parseArguments()
case 'm':
case 's':
case 'i':
+ timings = true;
+ break;
case 't':
break;
case 'f':
@@ -82,6 +85,9 @@ bool CommandLineParser::parseArguments()
case 'v':
verbose = true;
break;
+ case 'p':
+ parsePrefix(*(++ci));
+ break;
case 'h':
default:
usage();
@@ -139,6 +145,16 @@ bool CommandLineParser::parseClassString(const QString &str)
return true;
}
+void CommandLineParser::parsePrefix(const QString &str)
+{
+ prefix = str + ": ";
+}
+
+QString CommandLineParser::getPrefix() const
+{
+ return prefix;
+}
+
bool CommandLineParser::parseResourceList(const QString &resourceListStr,
QSet<ResourcePolicy::ResourceType> &resources)
{
@@ -182,11 +198,14 @@ bool CommandLineParser::parseModeValues(const QString &modeListStr)
void CommandLineParser::usage()
{
- output << "usage: resourceqt-client [-h] [-m mode-values]" <<
- "[-o optional-resources] [-s shared-resources -m shared-mask] " <<
+ output << "usage: resourceqt-client [-h] [-f mode-values]" <<
+ "[-o optional-resources] [-i] [-v] [-p prefix] " <<
"class all-resources" << endl;
output << "\toptions:" << endl;
output << "\t h\tprint this help message and exit" << endl;
+ output << "\t i\tshow timings of requests" << endl;
+ output << "\t v\tshow debug of libresourceqt" << endl;
+ output << "\t p\tPrefix all output with the given prefix" << endl;
output << "\t f\tmode values. See 'modes' below for the "
"\n\t\tsyntax of <mode-values>" << endl;
output << "\t o\toptional resources. See 'resources' below for the "
@@ -247,3 +266,7 @@ bool CommandLineParser::shouldBeVerbose() const
return verbose;
}
+bool CommandLineParser::showTimings() const
+{
+ return timings;
+}
diff --git a/resourceqt-client/commandlineparser.h b/resourceqt-client/commandlineparser.h
index 000fb80..deab478 100644
--- a/resourceqt-client/commandlineparser.h
+++ b/resourceqt-client/commandlineparser.h
@@ -46,6 +46,8 @@ public:
bool shouldAutoRelease() const;
bool shouldAlwaysReply() const;
bool shouldBeVerbose() const;
+ QString getPrefix() const;
+ bool showTimings() const;
private:
QSet<ResourcePolicy::ResourceType> allResources;
@@ -57,8 +59,11 @@ private:
bool verbose;
bool allowUnkownResourceClass;
QTextStream output;
+ QString prefix;
+ bool timings;
bool parseClassString(const QString &str);
+ void parsePrefix(const QString &str);
bool parseModeValues(const QString &modeListStr);
void usage();
diff --git a/resourceqt-client/resourceqt-client.cpp b/resourceqt-client/resourceqt-client.cpp
index 240b3ce..9bf61d2 100644
--- a/resourceqt-client/resourceqt-client.cpp
+++ b/resourceqt-client/resourceqt-client.cpp
@@ -56,6 +56,7 @@ int main(int argc, char *argv[])
if (!parser.parseArguments()) {
return 1;
}
+ verbose = parser.shouldBeVerbose();
if (!client.initialize(parser)) {
qFatal("Initialization failed");