summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/msgparser.cc102
-rw-r--r--src/msgparser.h13
-rw-r--r--src/task_proto.cc52
3 files changed, 133 insertions, 34 deletions
diff --git a/src/msgparser.cc b/src/msgparser.cc
index 68de487..c6f83d5 100644
--- a/src/msgparser.cc
+++ b/src/msgparser.cc
@@ -96,28 +96,28 @@ MsgVector parse_msg(std::string data) {
if(prev_ch != '\\')
inside_quote = !inside_quote;
else {
- printf("Appending %c\n", ch);
+// printf("Appending %c\n", ch);
token += ch;
}
break;
case ' ':
if(inside_quote) {
- printf("Appending %c\n", ch);
+// printf("Appending %c\n", ch);
token += ch;
break;
}
if(token.empty()) continue; // skip multiple white spaces and pre white space
- printf("Adding token %s\n", token.c_str());
+// printf("Adding token %s\n", token.c_str());
tokens.push_back(token);
token.clear();
break;
case ';':
if(inside_quote) {
- printf("Appending %c\n", ch);
+// printf("Appending %c\n", ch);
token += ch;
break;
}
- printf("Adding msg...\n");
+// printf("Adding msg...\n");
if(!token.empty()) {
tokens.push_back(token);
}
@@ -126,7 +126,7 @@ MsgVector parse_msg(std::string data) {
token.clear();
break;
default:
- printf("Appending %c\n", ch);
+// printf("Appending %c\n", ch);
token += ch;
break;
}
@@ -143,7 +143,7 @@ MsgVector parse_msg(std::string data) {
tokens.clear();
}
- printf("Number of messages: %d\n", msglist.size());
+// printf("Number of messages: %d\n", msglist.size());
MsgVector v;
MsgList::iterator it_msg;
@@ -161,7 +161,7 @@ MsgVector parse_msg(std::string data) {
else if(t[0] == "update") m.cmd = cmd::update;
else m.cmd = cmd::error;
- printf("Number of tokens %d\n", t.size());
+// printf("Number of tokens %d\n", t.size());
switch(m.cmd) {
case cmd::add: {
@@ -169,10 +169,11 @@ MsgVector parse_msg(std::string data) {
printf("Wrong number of parameters\n");
continue;
}
- sprintf(m.add.title, "%s", t[0].c_str());
- sprintf(m.add.desc, "%s", t[1].c_str());
- m.add.x = atoi(t[2].c_str());
- m.add.y = atoi(t[3].c_str());
+ sprintf(m.add.title, "%s", t[1].c_str());
+ sprintf(m.add.desc, "%s", t[2].c_str());
+ m.add.x = atoi(t[3].c_str());
+ m.add.y = atoi(t[4].c_str());
+// printf("addcmd: %s %s %d %d\n", m.add.title, m.add.desc, m.add.x, m.add.y);
break;
}
case cmd::del: {
@@ -210,6 +211,83 @@ MsgVector parse_msg(std::string data) {
return v;
}
+msg_t create_msg(cmd::cmd_t type, task_t t) {
+ msg_t m;
+ m.cmd = type;
+ switch(type) {
+ case cmd::add: {
+ m.add.id = t.id;
+ m.add.x = t.x;
+ m.add.y = t.y;
+// m.add.title = t.title.c_str();
+// m.add.desc = t.desc.c_str();
+ snprintf(m.add.title, sizeof(m.add.title), "%s", t.title.c_str());
+ snprintf(m.add.desc, sizeof(m.add.desc), "%s", t.desc.c_str());
+ break;
+ }
+ case cmd::del: {
+ m.del.id = t.id;
+ break;
+ }
+ case cmd::move: {
+ m.move.id = t.id;
+ m.move.x = t.x;
+ m.move.y = t.y;
+ break;
+ }
+ case cmd::update: {
+ m.update.id = t.id;
+// m.update.title = t.title;
+// m.update.desc = t.desc;
+ snprintf(m.update.title, sizeof(m.update.title), "%s", t.title.c_str());
+ snprintf(m.update.desc, sizeof(m.update.desc), "%s", t.desc.c_str());
+ break;
+ };
+ default:
+ break;
+ }
+ return m;
+}
+
+#define BUF_SIZE 4096
+std::string msg_tostring(msg_t m) {
+ char buf[4096];
+ switch(m.cmd) {
+ case cmd::add: {
+ printf("msg: %d, %d, %d, %s, %s\n", m.add.id, m.add.x, m.add.y, m.add.title, m.add.desc);
+ snprintf(buf, BUF_SIZE, "add %d %s %s %d %d;",
+ m.add.id,
+ m.add.title, m.add.desc,
+ m.add.x, m.add.y);
+ break;
+ }
+ case cmd::del: {
+ snprintf(buf, BUF_SIZE, "del %d;", m.del.id);
+ break;
+ }
+ case cmd::move: {
+ snprintf(buf, BUF_SIZE, "move %d %d %d;", m.move.id, m.move.x, m.move.y);
+ break;
+ }
+ case cmd::update: {
+ //todo
+ break;
+ };
+ default:
+ break;
+ }
+
+ printf("buffer: %s\n", buf);
+
+ if(buf) {
+ std::string str(buf);
+ return str;
+ }
+ else {
+ return "";
+ }
+}
+
#ifdef TEST_MSGPARSER
//Additional dependency files
//deps:
diff --git a/src/msgparser.h b/src/msgparser.h
index 07d67e9..fa853fa 100644
--- a/src/msgparser.h
+++ b/src/msgparser.h
@@ -31,6 +31,8 @@
#include <vector>
#include <string>
+#include "task.h"
+
namespace cmd {
enum cmd_t {
update,
@@ -42,10 +44,11 @@ namespace cmd {
};
typedef struct {
+ int id;
int x;
int y;
- char title[32];
- char desc[32];
+ char title[256];
+ char desc[256];
} add_t;
typedef struct {
int id;
@@ -57,8 +60,8 @@ typedef struct {
} move_t;
typedef struct {
int id;
- char title[32];
- char desc[32];
+ char title[256];
+ char desc[256];
} update_t;
@@ -80,4 +83,6 @@ typedef std::vector<msg_t> MsgVector;
MsgVector parse_msg(std::string msg);
+msg_t create_msg(cmd::cmd_t msg_type, task_t task);
+std::string msg_tostring(msg_t msg);
#endif/*__MUNIA_MSGPARSER_H__*/
diff --git a/src/task_proto.cc b/src/task_proto.cc
index 10cfe35..8516e1c 100644
--- a/src/task_proto.cc
+++ b/src/task_proto.cc
@@ -94,15 +94,17 @@ int callback_lws_task(struct libwebsocket_context * context,
pss->wsi = wsi;
// send all current tasks
- char buf[32];
+// char buf[512];
std::string init_str;
TaskList::iterator it;
for(it = tasklist.begin(); it != tasklist.end(); it++) {
task_t &t = *it;
- sprintf(buf, "add %d %s %s %d %d;",
- t.id, t.title.c_str(), t.desc.c_str(), t.x, t.y);
- init_str.append(buf);
+// sprintf(buf, "add %d %s %s %d %d;",
+// t.id, t.title.c_str(), t.desc.c_str(), t.x, t.y);
+
+// init_str.append(task_cmd(t));
+ init_str = msg_tostring(create_msg(cmd::add, t));
}
std::string msg;
@@ -169,8 +171,10 @@ int callback_lws_task(struct libwebsocket_context * context,
}
*/
- char buf[1024];
- size_t buf_len = 0;
+// char buf[1024];
+// size_t buf_len = 0;
+
+ std::string buf_str;
MsgVector msglist = parse_msg(data);
MsgVector::iterator it_msg;
@@ -178,28 +182,34 @@ int callback_lws_task(struct libwebsocket_context * context,
msg_t m = *it_msg;
switch(m.cmd) {
case cmd::add: {
- printf("Handling add cmd:\n");
+ printf("Handling add cmd\n");
task_t t = create_task(m.add.title, m.add.desc,
m.add.x, m.add.y);
tasklist.push_back(t);
- buf_len = sprintf(buf, "add %d %s %s %d %d;",
- t.id, t.title.c_str(), t.desc.c_str(),
- t.x, t.y);
+// buf_len = sprintf(buf, "add %d %s %s %d %d;",
+// t.id, t.title.c_str(), t.desc.c_str(),
+// t.x, t.y);
+
+// msg_t tm = create_msg(cmd::add, t);
+// std::string str = msg_tostring(tm);
+ buf_str = msg_tostring(create_msg(cmd::add, t));
- printf("Adding task: %s\n", buf);
+ printf("Adding task: %s\n", buf_str.c_str());
break;
}
case cmd::del: {
printf("Delete\n");
printf("Deleting task with id %d\n", m.del.id);
+ task_t del_task;
bool id_found = false;
TaskList::iterator it;
for(it = tasklist.begin(); it != tasklist.end(); it++) {
task_t &t = *it;
if(t.id == m.del.id) {
id_found = true;
+ del_task = t;
tasklist.erase(it);
break;
}
@@ -208,9 +218,11 @@ int callback_lws_task(struct libwebsocket_context * context,
if(!id_found) {
printf("\t!!!Could not locate task with id %d\n", m.del.id);
}
-
- buf_len = sprintf(buf, "del %d;", m.del.id);
- printf("Deleting task: %s\n", buf);
+ else {
+ // buf_len = sprintf(buf, "del %d;", m.del.id);
+ buf_str = msg_tostring(create_msg(cmd::del, del_task));
+ printf("Deleting task: %s\n", buf_str.c_str());
+ }
break;
}
case cmd::move: {
@@ -222,13 +234,15 @@ int callback_lws_task(struct libwebsocket_context * context,
TaskList::iterator it;
int x = m.move.x / 300 * 300;
-
+
+ task_t moved_task;
for(it = tasklist.begin(); it != tasklist.end(); it++) {
task_t &t = *it;
if(t.id == m.move.id) {
id_found = true;
t.x = x;
t.y = m.move.y;
+ moved_task = t;
break;
}
}
@@ -237,8 +251,9 @@ int callback_lws_task(struct libwebsocket_context * context,
printf("\t!!!Could not locate task with id %d\n", m.move.id);
}
- buf_len = sprintf(buf, "move %d %d %d;", m.move.id, x, m.move.y);
- printf("Moving task: %s\n", buf);
+// buf_len = sprintf(buf, "move %d %d %d;", m.move.id, x, m.move.y);
+ buf_str = msg_tostring(create_msg(cmd::move, moved_task));
+ printf("Moving task: %s\n", buf_str.c_str());
break;
}
case cmd::update:
@@ -265,7 +280,8 @@ int callback_lws_task(struct libwebsocket_context * context,
*/
std::string msg;
msg.append((size_t)LWS_SEND_BUFFER_PRE_PADDING, ' ');
- msg.append(buf, buf_len);
+// msg.append(buf, buf_len);
+ msg.append(buf_str);
msg.append((size_t)LWS_SEND_BUFFER_POST_PADDING, ' ');
std::map<struct libwebsocket *, std::queue<std::string> >::iterator it = msgqueue.begin();