From adab7fc5a061624ad931fee4f95de09f78ace91d Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Fri, 11 Jan 2013 15:52:08 +0100 Subject: Fix unobserve bug. Change more printf's into hugin syntax. --- src/messageparser.cc | 56 +++++++++++++++++++++++++++++++++++----------------- 1 file changed, 38 insertions(+), 18 deletions(-) (limited to 'src/messageparser.cc') 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 &sym, std::string token) @@ -104,7 +118,13 @@ static taskid_t getId(std::map &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); -- cgit v1.2.3