v2.0.0
Loading...
Searching...
No Matches
command_parser.cpp
Go to the documentation of this file.
1//=============================================================================================================
36
37//=============================================================================================================
38// INCLUDES
39//=============================================================================================================
40
41#include "command_parser.h"
42#include "command_manager.h"
43
44//=============================================================================================================
45// QT INCLUDES
46//=============================================================================================================
47
48#include <QDebug>
49#include <QStringList>
50#include <QJsonObject>
51#include <QJsonDocument>
52#include <QDebug>
53
54//=============================================================================================================
55// USED NAMESPACES
56//=============================================================================================================
57
58using namespace COMLIB;
59
60//=============================================================================================================
61// DEFINE MEMBER METHODS
62//=============================================================================================================
63
65: QObject(parent)
66{
67}
68
69//=============================================================================================================
70
71bool CommandParser::exists(const QString& p_sCommand)
72{
73 Subject::t_Observers::Iterator itObservers;
74 for(itObservers = this->observers().begin(); itObservers != this->observers().end(); ++itObservers)
75 {
76 CommandManager* t_pCommandManager = static_cast<CommandManager*> (*itObservers);
77 if(t_pCommandManager->hasCommand(p_sCommand))
78 return true;
79 }
80 return false;
81}
82
83//=============================================================================================================
84
85bool CommandParser::parse(const QString &p_sInput, QStringList &p_qListCommandsParsed)
86{
87 if(p_sInput.size() <= 0)
88 return false;
89
90 p_qListCommandsParsed.clear();
91
92 //Check if JSON format;
93 bool isJson = false;
94 if(QString::compare(p_sInput.at(0), QString("{")) == 0)
95 isJson = true;
96
97 if(isJson)
98 {
99 qDebug() << "JSON command recognized";
100
101 QJsonObject t_jsonObjectCommand;
102 QJsonObject t_jsonObjectParameters;
103 QJsonDocument t_jsonDocument(QJsonDocument::fromJson(p_sInput.toUtf8()));
104
105 //Switch to command object
106 if(t_jsonDocument.isObject() && t_jsonDocument.object().value(QString("commands")) != QJsonValue::Undefined)
107 t_jsonObjectCommand = t_jsonDocument.object().value(QString("commands")).toObject();
108 else
109 return false;
110
111 //iterate over commands
112 QJsonObject::Iterator it;
113 QJsonObject::Iterator itParam;
114 for(it = t_jsonObjectCommand.begin(); it != t_jsonObjectCommand.end(); ++it)
115 {
116 //Print Command
117 qInfo("%s\r\n", it.key().toUtf8().constData());
118
119 if(exists(it.key()))
120 {
121 RawCommand t_rawCommand(it.key(), true);
122 m_rawCommand = t_rawCommand;
123 t_jsonObjectParameters = it.value().toObject();
124
125 // push command to processed commands
126 p_qListCommandsParsed.push_back(it.key());
127
128 //append the parameters
129 for(itParam= t_jsonObjectParameters.begin(); itParam != t_jsonObjectParameters.end(); ++itParam)
130 {
131 qInfo(" %s", itParam.value().toString().toUtf8().constData());
132 //ToDo do a cross check with the param naming and key
133 m_rawCommand.pValues().append(itParam.value().toString());
134// qDebug() << itParam.key() << " + " << itParam.value().toString();
135 }
136
137 //Notify attached command manager
138 notify();
139 }
140 qInfo("\r\n");
141 }
142 }
143 else
144 {
145 QStringList t_qCommandList = p_sInput.split(" ");
146
147 //Print command
148 qInfo("%s\r\n", t_qCommandList[0].toUtf8().constData());
149
150 if(!exists(t_qCommandList[0]))
151 {
152 qInfo("\r\n");
153 return false;
154 }
155
156 RawCommand t_rawCommand(t_qCommandList[0], false);
157 m_rawCommand = t_rawCommand;
158
159 // push command to processed commands
160 p_qListCommandsParsed.push_back(t_qCommandList[0]);
161
162 if(t_qCommandList.size() > 1) //Parameter parsing
163 {
164 //Parse Parameters
165 for(qint32 i = 1; i < t_qCommandList.size(); ++i)
166 {
167 qInfo(" %s", t_qCommandList[i].toUtf8().constData());
168 m_rawCommand.pValues().append(t_qCommandList[i]);
169 }
170 }
171 qInfo("\r\n");
172 notify();
173 }
174
175 return true;
176}
Declaration of the CommandManager Class.
Real-time client/server communication (commands, raw data streaming).
Registry of available commands; dispatches parsed command strings to the matching Command handler.
bool hasCommand(const QString &p_sCommand) const
bool exists(const QString &p_sCommand)
CommandParser(QObject *parent=0)
bool parse(const QString &p_sInput, QStringList &p_qListCommandsParsed)
Parsed but untyped command holding raw string parameters before type resolution.
Definition raw_command.h:70
t_Observers & observers()