summaryrefslogtreecommitdiff
path: root/src/messageparser.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/messageparser.cc')
-rw-r--r--src/messageparser.cc50
1 files changed, 28 insertions, 22 deletions
diff --git a/src/messageparser.cc b/src/messageparser.cc
index 1aba5ee..9e5e7ab 100644
--- a/src/messageparser.cc
+++ b/src/messageparser.cc
@@ -26,11 +26,15 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
#include "messageparser.h"
+#include "taskmanager.h"
#include <stdlib.h>
#include <stdio.h>
#include <list>
#include <vector>
+#include <map>
+
+#include "hugin.hpp"
typedef std::vector<std::string> TokenVector;
typedef std::list<TokenVector> MsgTokensList;
@@ -54,12 +58,12 @@ inline static void parse_into_msg_tokens(std::string& data,
break;
case ' ':
if(inside_quote) {
- //printf("Appending %c\n", ch);
+ //DEBUG(msgparser, "Appending %c\n", ch);
token += ch;
}
else {
if(token.empty()) continue; // skip multiple white spaces and pre white space
-// printf("Adding token %s\n", token.c_str());
+// DEBUG(msgparser, "Adding token %s\n", token.c_str());
tokenVector.push_back(token);
token.clear();
}
@@ -92,8 +96,7 @@ inline static void parse_into_msg_tokens(std::string& data,
tokenVector.clear();
}
}
-#include <map>
-static taskid_t baseid = 10000;
+
static taskid_t getId(std::map<std::string, taskid_t> &sym, std::string token)
{
bool isnumeric = true;
@@ -103,7 +106,7 @@ static taskid_t getId(std::map<std::string, taskid_t> &sym, std::string token)
if(isnumeric) return atoi(token.c_str());
- if(sym.find(token) == sym.end()) sym[token] = baseid++;
+ if(sym.find(token) == sym.end()) sym[token] = task_manager.createId();
return sym[token];
}
@@ -126,9 +129,9 @@ inline static void create_msg_list(MsgTokensList& msgTokensList,
message_t m;
- printf("t[%d] : %s, running in clientmode: %d\n", origin, t[origin].c_str(), clientmode);
+ DEBUG(msgparser, "t[%d] : %s, running in clientmode: %d\n", origin, t[origin].c_str(), clientmode);
-// printf("%d\n", t.size());
+// DEBUG(msgparser, "%d\n", t.size());
if(t[origin] == "observe") m.cmd = cmd::observe;
else if(t[origin] == "unobserve") m.cmd = cmd::unobserve;
@@ -138,12 +141,12 @@ inline static void create_msg_list(MsgTokensList& msgTokensList,
else if(t[origin] == "update") m.cmd = cmd::update;
else m.cmd = cmd::error;
-// printf("Number of tokens %d\n", t.size());
+// DEBUG(msgparser, "Number of tokens %d\n", t.size());
switch(m.cmd) {
case cmd::observe: {
if(t.size() != origin+1+1) {
- printf("Wrong number of parameters\n");
+ DEBUG(msgparser, "Wrong number of parameters\n");
continue;
}
m.observe.id = getId(sym, t[origin+1]);//atoi(t[origin+1].c_str());
@@ -151,7 +154,7 @@ inline static void create_msg_list(MsgTokensList& msgTokensList,
}
case cmd::unobserve: {
if(t.size() != origin+1+1) {
- printf("Wrong number of parameters\n");
+ DEBUG(msgparser, "Wrong number of parameters\n");
continue;
}
m.unobserve.id = getId(sym, t[origin+1]);//atoi(t[origin+1].c_str());
@@ -159,11 +162,11 @@ inline static void create_msg_list(MsgTokensList& msgTokensList,
}
case cmd::create: {
if(!clientmode && t.size() != origin+1+2) {
- printf("Wrong number of parameters\n");
+ DEBUG(msgparser, "Wrong number of parameters\n");
continue;
}
if(clientmode && t.size() != origin+1+2) {
- printf("Wrong number of parameters\n");
+ DEBUG(msgparser, "Wrong number of parameters\n");
continue;
}
if(clientmode) {
@@ -178,7 +181,7 @@ inline static void create_msg_list(MsgTokensList& msgTokensList,
}
case cmd::remove: {
if(t.size() != origin+1+1) {
- printf("Wrong number of parameters\n");
+ DEBUG(msgparser, "Wrong number of parameters\n");
continue;
}
m.remove.id = getId(sym, t[origin+1]);//atoi(t[origin+1].c_str());
@@ -186,7 +189,7 @@ inline static void create_msg_list(MsgTokensList& msgTokensList,
}
case cmd::move: {
if(t.size() != origin+2+1) {
- printf("Wrong number of parameters\n");
+ DEBUG(msgparser, "Wrong number of parameters\n");
continue;
}
m.move.id = getId(sym, t[origin+1]);//atoi(t[origin+1].c_str());
@@ -194,12 +197,13 @@ inline static void create_msg_list(MsgTokensList& msgTokensList,
break;
}
case cmd::update: {
- if(t.size() != origin+2+1) {
- printf("Wrong number of parameters\n");
+ if(t.size() != origin+3+1) {
+ DEBUG(msgparser, "Wrong number of parameters\n");
continue;
}
m.update.id = getId(sym, t[origin+1]);//atoi(t[origin+1].c_str());
- sprintf(m.update.title, "%s", t[origin+2].c_str());
+ m.update.name = t[origin+2];
+ m.update.value = t[origin+3];
break;
}
default:
@@ -210,7 +214,7 @@ inline static void create_msg_list(MsgTokensList& msgTokensList,
}
MessageList parse_msg(std::string data) {
- printf("Parsing: %s\n", data.c_str());
+ DEBUG(msgparser, "Parsing: %s\n", data.c_str());
MsgTokensList msgTokensList;
parse_into_msg_tokens(data, msgTokensList);
@@ -222,7 +226,7 @@ MessageList parse_msg(std::string data) {
}
MessageList parse_msg_client(std::string data) {
- printf("Parsing: \n%s\n", data.c_str());
+ DEBUG(msgparser, "Parsing: \n%s\n", data.c_str());
MsgTokensList msgTokensList;
parse_into_msg_tokens(data, msgTokensList);
@@ -250,7 +254,8 @@ std::string msg_tostring(message_t m) {
break;
}
case cmd::update: {
- asprintf(&buf, "update %d \"%s\";", m.update.id, m.update.title);
+ asprintf(&buf, "update %d \"%s\" \"%s\";",
+ m.update.id, m.update.name.c_str(), m.update.value.c_str());
break;
};
default:
@@ -274,11 +279,12 @@ message_t create_msg_create(task_t t) {
return m;
}
-message_t create_msg_update(task_t t) {
+message_t create_msg_update(task_t t, const std::string &attr) {
message_t m;
m.cmd = cmd::update;
m.update.id = t.id;
- sprintf(m.update.title, "%s", t.title.c_str());
+ m.update.name = attr;
+ m.update.value = t.attributes[attr];
return m;
}