summaryrefslogtreecommitdiff
path: root/src/messagehandler.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/messagehandler.cc')
-rw-r--r--src/messagehandler.cc340
1 files changed, 179 insertions, 161 deletions
diff --git a/src/messagehandler.cc b/src/messagehandler.cc
index b061cc9..ad9b8bb 100644
--- a/src/messagehandler.cc
+++ b/src/messagehandler.cc
@@ -34,167 +34,185 @@
#include "messageparser.h"
-MessageList handle_msg(MessageList msgList, clientid_t wsi) {
-
- MessageList outmsgs;
-
- MessageList::iterator it;
- for(it = msgList.begin();
- it != msgList.end();
- it++) {
- message_t &m = *it;
-
- if(m.cmd == cmd::login) {
- connection_handler.login(wsi, m.login.user, m.login.password);
- }
-
- // If client is not authenticated; do not continue beyond this point...
- if(!connection_handler.authenticated(wsi)) continue;
-
- switch(m.cmd) {
- case cmd::create:
- {
- INFO(messagehandler, "Handling create command\n");
- try {
- taskid_t id = m.create.id;
- m.nodes = task_manager.createTask(m.create.parentid, &id);
- m.create.id = id;
- outmsgs.push_back(m);
- }
- catch (std::exception& e) {
- DEBUG(messagehandler, "Error creating task\n");
- }
- }
- break;
-
- case cmd::remove:
- {
- INFO(messagehandler, "Handling remove command\n");
- try {
- TaskIdList ids = task_manager.subTasks(m.remove.id);
- TaskIdList::reverse_iterator id = ids.rbegin();
- while(id != ids.rend()) {
- task_t task = task_manager.task(*id);
-
- message_t m = create_msg_remove(task);
- m.nodes = task_manager.removeTask(task.id);
-
- outmsgs.push_back(m);
- id++;
- }
- }
- catch (std::exception& e) {
- DEBUG(messagehandler, "Error remove task\n");
- }
- }
- break;
-
- case cmd::move:
- {
- INFO(messagehandler, "Handling move command\n");
- try {
- task_t removetask = task_manager.task(m.move.id);
- TaskIdListPair tilpair =
- task_manager.moveTask(m.move.id, m.move.parentid);
- task_t createtask = task_manager.task(m.move.id);
-
- /*
- TaskIdList commonAncestors;
- TaskIdList removeAncestors;
- TaskIdList createAncestors;
-
- // find command ancestors and fill ancestors for remove command
- for(TaskIdList::iterator it_remove = tilpair.first.begin();
- it_remove != tilpair.first.end(); it_remove++) {
- taskid_t removeid = *it;
- bool common = false;
- for(TaskIdList::iterator it_create = tilpair.second.begin();
- it_create = != tilpair.second.end(); it_create++) {
- taskid_t createid = *id;
- if(removeid == createid) {
- commandAncestors.push_back(removeid);
- common = true;
- }
- }
- if(!common) {
- removeAncestors.push_back(removeid);
- }
- }
-
- // fill ancestors for create command
- for(TaskIdList::iterator it_create = tilpair.second.begin();
- it_create = != tilpair.second.end(); it_create++) {
- taskid_t createid = *id;
- if(removeid == createid) {
- commandAncestors.push_back(removeid);
- common = true;
- }
- }
- */
-
- message_t removemsg = create_msg_remove(removetask);
- removemsg.nodes = tilpair.first;
- message_t createmsg = create_msg_create(createtask);
- createmsg.nodes = tilpair.second;
-
- outmsgs.push_back(removemsg);
- outmsgs.push_back(createmsg);
- }
- catch (std::exception& e) {
- DEBUG(messagehandler, "Error moving task\n");
- }
- }
- break;
-
- case cmd::observe:
- {
- //connection_handler.observe(wsi, m.observe.id);
- outmsgs.push_back(m);
- }
- break;
-
- case cmd::unobserve:
- //connection_handler.unobserve(wsi, m.observe.id);
- outmsgs.push_back(m);
- DEBUG(handler, "unobserve: %d\n", m.unobserve.id);
- break;
-
- case cmd::update:
- {
- INFO(messagehandler, "Handling update command\n");
- try {
- m.nodes = task_manager.updateTask(m.update.id,
- m.update.name, m.update.value);
- outmsgs.push_back(m);
- }
- catch (std::exception& e) {
- DEBUG(messagehandler, "Error updating task\n");
- }
- }
- break;
-
- case cmd::login:
- // Already handled, before this switch ... case
- break;
-
- case cmd::logout:
- connection_handler.logout(wsi);
- break;
-
- case cmd::error:
- ERR(messagehandler, "An error occurred.\n");
- break;
-
- default:
- WARN(messagehandler, "!!! Unknown command %d\n", m.cmd);
- break;
- }
- task_manager.tree.toStdOut();
- DEBUG(messagehandler, "%d affected nodes registered\n",
- (int)m.nodes.size());
- }
-
- return outmsgs;
+MessageList handle_msg(MessageList msgList, clientid_t wsi)
+{
+
+ MessageList outmsgs;
+
+ MessageList::iterator it;
+ for(it = msgList.begin(); it != msgList.end(); it++)
+ {
+ message_t &m = *it;
+
+ if(m.cmd == cmd::login)
+ {
+ connection_handler.login(wsi, m.login.user, m.login.password);
+ }
+
+ // If client is not authenticated; do not continue beyond this point...
+ if(!connection_handler.authenticated(wsi))
+ {
+ continue;
+ }
+
+ switch(m.cmd)
+ {
+ case cmd::create:
+ {
+ INFO(messagehandler, "Handling create command\n");
+ try
+ {
+ taskid_t id = m.create.id;
+ m.nodes = task_manager.createTask(m.create.parentid, &id);
+ m.create.id = id;
+ outmsgs.push_back(m);
+ }
+ catch (std::exception& e)
+ {
+ DEBUG(messagehandler, "Error creating task\n");
+ }
+ }
+ break;
+
+ case cmd::remove:
+ {
+ INFO(messagehandler, "Handling remove command\n");
+ try
+ {
+ TaskIdList ids = task_manager.subTasks(m.remove.id);
+ TaskIdList::reverse_iterator id = ids.rbegin();
+ while(id != ids.rend())
+ {
+ task_t task = task_manager.task(*id);
+
+ message_t m = create_msg_remove(task);
+ m.nodes = task_manager.removeTask(task.id);
+
+ outmsgs.push_back(m);
+ id++;
+ }
+ }
+ catch (std::exception& e)
+ {
+ DEBUG(messagehandler, "Error remove task\n");
+ }
+ }
+ break;
+
+ case cmd::move:
+ {
+ INFO(messagehandler, "Handling move command\n");
+ try
+ {
+ task_t removetask = task_manager.task(m.move.id);
+ TaskIdListPair tilpair =
+ task_manager.moveTask(m.move.id, m.move.parentid);
+ task_t createtask = task_manager.task(m.move.id);
+
+// TaskIdList commonAncestors;
+// TaskIdList removeAncestors;
+// TaskIdList createAncestors;
+//
+// // find command ancestors and fill ancestors for remove command
+// for(TaskIdList::iterator it_remove = tilpair.first.begin();
+// it_remove != tilpair.first.end(); it_remove++)
+// {
+// taskid_t removeid = *it;
+// bool common = false;
+// for(TaskIdList::iterator it_create = tilpair.second.begin();
+// it_create = != tilpair.second.end(); it_create++)
+// {
+// taskid_t createid = *id;
+// if(removeid == createid)
+// {
+// commandAncestors.push_back(removeid);
+// common = true;
+// }
+// }
+// if(!common)
+// {
+// removeAncestors.push_back(removeid);
+// }
+// }
+//
+// // fill ancestors for create command
+// for(TaskIdList::iterator it_create = tilpair.second.begin();
+// it_create = != tilpair.second.end(); it_create++)
+// {
+// taskid_t createid = *id;
+// if(removeid == createid)
+// {
+// commandAncestors.push_back(removeid);
+// common = true;
+// }
+// }
+
+ message_t removemsg = create_msg_remove(removetask);
+ removemsg.nodes = tilpair.first;
+ message_t createmsg = create_msg_create(createtask);
+ createmsg.nodes = tilpair.second;
+
+ outmsgs.push_back(removemsg);
+ outmsgs.push_back(createmsg);
+ }
+ catch (std::exception& e)
+ {
+ DEBUG(messagehandler, "Error moving task\n");
+ }
+ }
+ break;
+
+ case cmd::observe:
+ {
+ //connection_handler.observe(wsi, m.observe.id);
+ outmsgs.push_back(m);
+ }
+ break;
+
+ case cmd::unobserve:
+ //connection_handler.unobserve(wsi, m.observe.id);
+ outmsgs.push_back(m);
+ DEBUG(handler, "unobserve: %d\n", m.unobserve.id);
+ break;
+
+ case cmd::update:
+ {
+ INFO(messagehandler, "Handling update command\n");
+ try
+ {
+ m.nodes = task_manager.updateTask(m.update.id,
+ m.update.name, m.update.value);
+ outmsgs.push_back(m);
+ }
+ catch (std::exception& e)
+ {
+ DEBUG(messagehandler, "Error updating task\n");
+ }
+ }
+ break;
+
+ case cmd::login:
+ // Already handled, before this switch ... case
+ break;
+
+ case cmd::logout:
+ connection_handler.logout(wsi);
+ break;
+
+ case cmd::error:
+ ERR(messagehandler, "An error occurred.\n");
+ break;
+
+ default:
+ WARN(messagehandler, "!!! Unknown command %d\n", m.cmd);
+ break;
+ }
+ task_manager.tree.toStdOut();
+ DEBUG(messagehandler, "%d affected nodes registered\n",
+ (int)m.nodes.size());
+ }
+
+ return outmsgs;
}
#ifdef TEST_MSGHANDLER