summaryrefslogtreecommitdiff
path: root/src/messageparser.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/messageparser.cc')
-rw-r--r--src/messageparser.cc56
1 files changed, 38 insertions, 18 deletions
diff --git a/src/messageparser.cc b/src/messageparser.cc
index 9e5e7ab..4f047d9 100644
--- a/src/messageparser.cc
+++ b/src/messageparser.cc
@@ -50,34 +50,32 @@ inline static void parse_into_msg_tokens(std::string& data,
switch(ch) {
case '\"':
- if(prev_ch != '\\')
+ if(prev_ch != '\\') {
inside_quote = !inside_quote;
- else {
+ } else {
token += ch;
}
break;
case ' ':
if(inside_quote) {
- //DEBUG(msgparser, "Appending %c\n", ch);
+ DEBUG(msgparser, "Appending %c\n", ch);
token += ch;
- }
- else {
+ } else {
if(token.empty()) continue; // skip multiple white spaces and pre white space
-// DEBUG(msgparser, "Adding token %s\n", token.c_str());
+ DEBUG(msgparser, "Adding token %s\n", token.c_str());
tokenVector.push_back(token);
token.clear();
- }
+ }
break;
case ';':
if(inside_quote) {
token += ch;
- }
- else {
+ } else {
tokenVector.push_back(token);
msgTokensList.push_back(tokenVector);
tokenVector.clear();
token.clear();
- }
+ }
break;
default:
token += ch;
@@ -86,15 +84,31 @@ inline static void parse_into_msg_tokens(std::string& data,
prev_ch = ch;
}
-// if(!token.empty()) {
+ if(token != "") {
tokenVector.push_back(token);
token.clear();
-// }
+ }
if(!tokenVector.empty()) {
msgTokensList.push_back(tokenVector);
tokenVector.clear();
}
+
+
+ // Debug: print tokens
+ DEBUG(parser, "tokenlists: %d\n", msgTokensList.size());
+ MsgTokensList::iterator j = msgTokensList.begin();
+ while(j != msgTokensList.end()) {
+ DEBUG(parser, " tokens: %d\n", j->size());
+ int idx = 0;
+ TokenVector::iterator i = j->begin();
+ while(i != j->end()) {
+ DEBUG(parser, " token[%d]: '%s'\n", idx++, i->c_str());
+ i++;
+ }
+ j++;
+ }
+
}
static taskid_t getId(std::map<std::string, taskid_t> &sym, std::string token)
@@ -104,7 +118,13 @@ static taskid_t getId(std::map<std::string, taskid_t> &sym, std::string token)
isnumeric &= (token[i] >= '0' && token[i] <= '9');
}
- if(isnumeric) return atoi(token.c_str());
+ DEBUG(getid, "======= %d %s\n", isnumeric, token.c_str());
+
+ if(isnumeric) {
+ taskid_t id = atoi(token.c_str());
+ DEBUG(getid, "======= id: %d\n", id);
+ return id;
+ }
if(sym.find(token) == sym.end()) sym[token] = task_manager.createId();
return sym[token];
@@ -129,7 +149,8 @@ inline static void create_msg_list(MsgTokensList& msgTokensList,
message_t m;
- DEBUG(msgparser, "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);
// DEBUG(msgparser, "%d\n", t.size());
@@ -141,8 +162,6 @@ inline static void create_msg_list(MsgTokensList& msgTokensList,
else if(t[origin] == "update") m.cmd = cmd::update;
else m.cmd = cmd::error;
-// DEBUG(msgparser, "Number of tokens %d\n", t.size());
-
switch(m.cmd) {
case cmd::observe: {
if(t.size() != origin+1+1) {
@@ -158,6 +177,7 @@ inline static void create_msg_list(MsgTokensList& msgTokensList,
continue;
}
m.unobserve.id = getId(sym, t[origin+1]);//atoi(t[origin+1].c_str());
+ DEBUG(msgparser, "unobserve @ %d\n", m.unobserve.id);
break;
}
case cmd::create: {
@@ -214,7 +234,7 @@ inline static void create_msg_list(MsgTokensList& msgTokensList,
}
MessageList parse_msg(std::string data) {
- DEBUG(msgparser, "Parsing: %s\n", data.c_str());
+ DEBUG(msgparser, "Parsing: '%s'\n", data.c_str());
MsgTokensList msgTokensList;
parse_into_msg_tokens(data, msgTokensList);
@@ -226,7 +246,7 @@ MessageList parse_msg(std::string data) {
}
MessageList parse_msg_client(std::string data) {
- DEBUG(msgparser, "Parsing: \n%s\n", data.c_str());
+ DEBUG(msgparser, "Parsing: '%s'\n", data.c_str());
MsgTokensList msgTokensList;
parse_into_msg_tokens(data, msgTokensList);