/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* vim: set et sw=2 ts=2: */ /*************************************************************************** * msgparser.cc * * Fri Feb 24 14:59:34 CET 2012 * Copyright 2012 Jonas Suhr Christensen * jsc@umbraculum.org ****************************************************************************/ /* * This file is part of Munia. * * Munia is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * Munia is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Munia; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ #include "msgparser.h" #include #include inline void parse_add(msg_t& m, std::string data) { int offset = 0; std::string title = data.substr(offset, data.find(' ', offset) - offset); offset += title.length() + 1; std::string desc = data.substr(offset, data.find(' ', offset) - offset); offset += desc.length() + 1; std::string x_str = data.substr(offset, data.find(' ', offset) - offset); int x = atoi(x_str.c_str()); offset += x_str.length() + 1; std::string y_str = data.substr(offset, data.find(' ', offset) - offset); int y = atoi(y_str.c_str()); sprintf(m.add.title, "%s", desc.c_str()); sprintf(m.add.desc, "%s", desc.c_str()); m.add.x = x; m.add.y = y; } inline void parse_del(msg_t& m, std::string data) { int offset = 0; std::string id_str = data.substr(offset, data.find(' ', offset) - offset); int id = atoi(id_str.c_str()); m.del.id = id; } inline void parse_move(msg_t& m, std::string data) { int offset = 1; std::string s_id = data.substr(offset, data.find(' ', offset) - offset); int id = atoi(s_id.c_str()); offset += s_id.length() + 1; std::string x_str = data.substr(offset, data.find(' ', offset) - offset); int x = atoi(x_str.c_str()); offset += x_str.length() + 1; std::string y_str = data.substr(offset, data.find(' ', offset) - offset); int y = atoi(y_str.c_str()); m.move.id = id; m.move.x = x; m.move.y = y; } MsgVector parse_msg(std::string data) { //todo: explode on ';' and handle '"' and escaping printf("parsing: %s\n", data.c_str()); msg_t m; std::string cmd = data.substr(0, data.find(' ')); if(cmd == "add") m.cmd = cmd::add; else if(cmd == "del") m.cmd = cmd::del; else if(cmd == "move") m.cmd = cmd::move; else if(cmd == "update") m.cmd = cmd::update; else m.cmd = cmd::error; data = data.substr(cmd.length()+1, std::string::npos); switch(m.cmd) { case cmd::add: parse_add(m, data); break; case cmd::del: parse_del(m, data); break; case cmd::move: parse_move(m, data); break; case cmd::update: break; default: break; } MsgVector v; v.push_back(m); return v; } #ifdef TEST_MSGPARSER //Additional dependency files //deps: //Required cflags (autoconf vars may be used) //cflags: //Required link options (autoconf vars may be used) //libs: #include "test.h" TEST_BEGIN; // TODO: Put some testcode here (see test.h for usable macros). TEST_TRUE(false, "No tests yet!"); TEST_END; #endif/*TEST_MSGPARSER*/