callback->getMessageAttachment());
obj[JSON_DATA] = picojson::value(args);
- MessagingInstance::getInstance().PostMessage(json->serialize().c_str());
+ PostQueue::getInstance().resolve(
+ obj.at(JSON_CALLBACK_ID).get<double>(),
+ json->serialize()
+ );
} catch (...) {
LoggerW("Couldn't create JSMessageAttachment object!");
throw common::UnknownException(
LoggerD("Load message attachment failed!");
common::UnknownException e("Load message attachment failed!");
callback->setError(e.name(), e.message());
- MessagingInstance::getInstance().PostMessage(callback->getJson()->serialize().c_str());
+ PostQueue::getInstance().resolve(
+ callback->getJson()->get<picojson::object>().at(JSON_CALLBACK_ID).get<double>(),
+ callback->getJson()->serialize()
+ );
}
} catch (const common::PlatformException& e) {
LoggerE("Exception in signal callback");
callback->setError(e.name(), e.message());
- MessagingInstance::getInstance().PostMessage(callback->getJson()->serialize().c_str());
+ PostQueue::getInstance().resolve(
+ callback->getJson()->get<picojson::object>().at(JSON_CALLBACK_ID).get<double>(),
+ callback->getJson()->serialize()
+ );
} catch (...) {
LoggerE("Exception in signal callback");
common::UnknownException e("Exception in signal callback");
callback->setError(e.name(), e.message());
- MessagingInstance::getInstance().PostMessage(callback->getJson()->serialize().c_str());
+ PostQueue::getInstance().resolve(
+ callback->getJson()->get<picojson::object>().at(JSON_CALLBACK_ID).get<double>(),
+ callback->getJson()->serialize()
+ );
}
if(callback) {
callback->getMessage()->getBody());
obj[JSON_DATA] = picojson::value(args);
- MessagingInstance::getInstance().PostMessage(json->serialize().c_str());
+ PostQueue::getInstance().resolve(
+ obj.at(JSON_CALLBACK_ID).get<double>(),
+ json->serialize()
+ );
} catch (...) {
LoggerW("Couldn't create JSMessage object!");
throw common::UnknownException(
common::UnknownException e("Load message body failed!");
callback->setError(e.name(), e.message());
- MessagingInstance::getInstance().PostMessage(
- callback->getJson()->serialize().c_str());
+ PostQueue::getInstance().resolve(
+ callback->getJson()->get<picojson::object>().at(JSON_CALLBACK_ID).get<double>(),
+ callback->getJson()->serialize()
+ );
}
}
}
LoggerE("Exception in signal callback");
callback->setError(e.name(), e.message());
- MessagingInstance::getInstance().PostMessage(callback->getJson()->serialize().c_str());
+ PostQueue::getInstance().resolve(
+ callback->getJson()->get<picojson::object>().at(JSON_CALLBACK_ID).get<double>(),
+ callback->getJson()->serialize()
+ );
}
catch (...) {
LoggerE("Exception in signal callback");
common::UnknownException e("Load message body failed!");
callback->setError(e.name(), e.message());
- MessagingInstance::getInstance().PostMessage(callback->getJson()->serialize().c_str());
+ PostQueue::getInstance().resolve(
+ callback->getJson()->get<picojson::object>().at(JSON_CALLBACK_ID).get<double>(),
+ callback->getJson()->serialize()
+ );
}
if(callback) {
case NOTI_DOWNLOAD_FINISH:
LoggerD("Sync finished!");
obj[JSON_ACTION] = picojson::value(JSON_CALLBACK_SUCCCESS);
- MessagingInstance::getInstance().PostMessage(response->serialize().c_str());
+ PostQueue::getInstance().resolve(
+ obj.at(JSON_CALLBACK_ID).get<double>(),
+ response->serialize()
+ );
break;
case NOTI_DOWNLOAD_FAIL:
LoggerD("Sync failed!");
common::UnknownException err("Sync failed!");
callback->setError(err.name(), err.message());
- MessagingInstance::getInstance().PostMessage(response->serialize().c_str());
+ PostQueue::getInstance().resolve(
+ obj.at(JSON_CALLBACK_ID).get<double>(),
+ response->serialize()
+ );
}
break;
picojson::object& obj = json->get<picojson::object>();
obj[JSON_ACTION] = picojson::value(CONVERSATIONSADDED);
obj[JSON_DATA] = picojson::value(array);
- MessagingInstance::getInstance().PostMessage(json->serialize().c_str());
+
+ PostQueue::getInstance().addAndResolve(obj.at(
+ JSON_CALLBACK_ID).get<double>(), PostPriority::MEDIUM, json->serialize());
}
void ConversationsChangeCallback::updated(
picojson::object& obj = json->get<picojson::object>();
obj[JSON_ACTION] = picojson::value(CONVERSATIONSUPDATED);
obj[JSON_DATA] = picojson::value(array);
- MessagingInstance::getInstance().PostMessage(json->serialize().c_str());
+
+ PostQueue::getInstance().addAndResolve(obj.at(
+ JSON_CALLBACK_ID).get<double>(), PostPriority::LOW, json->serialize());
}
void ConversationsChangeCallback::removed(
picojson::object& obj = json->get<picojson::object>();
obj[JSON_ACTION] = picojson::value(CONVERSATIONSREMOVED);
obj[JSON_DATA] = picojson::value(array);
- MessagingInstance::getInstance().PostMessage(json->serialize().c_str());
+
+ PostQueue::getInstance().addAndResolve(obj.at(
+ JSON_CALLBACK_ID).get<double>(), PostPriority::LAST, json->serialize());
}
void ConversationsChangeCallback::setFilter(tizen::AbstractFilterPtr filter)
try {
if (callback->isError()) {
LoggerD("Calling error callback");
- MessagingInstance::getInstance().PostMessage(callback->getJson()->serialize().c_str());
+ PostQueue::getInstance().resolve(
+ callback->getJson()->get<picojson::object>().at(JSON_CALLBACK_ID).get<double>(),
+ callback->getJson()->serialize()
+ );
callback->getMessage()->setMessageStatus(MessageStatus::STATUS_FAILED);
} else {
LoggerD("Calling success callback");
args[JSON_DATA_MESSAGE] = MessagingUtil::messageToJson(callback->getMessage());
obj[JSON_DATA] = picojson::value(args);
- MessagingInstance::getInstance().PostMessage(json->serialize().c_str());
+ PostQueue::getInstance().resolve(
+ obj.at(JSON_CALLBACK_ID).get<double>(),
+ json->serialize()
+ );
}
} catch (const PlatformException& err) {
LoggerE("%s (%s)", (err.name()).c_str(), (err.message()).c_str());
try {
if (callback->isError()) {
- MessagingInstance::getInstance().PostMessage(callback->getJson()->serialize().c_str());
+ PostQueue::getInstance().resolve(
+ callback->getJson()->get<picojson::object>().at(JSON_CALLBACK_ID).get<double>(),
+ callback->getJson()->serialize()
+ );
callback->getMessage()->setMessageStatus(MessageStatus::STATUS_FAILED);
}
else {
data[JSON_DATA_MESSAGE] = MessagingUtil::messageToJson(callback->getMessage());
obj[JSON_DATA] = picojson::value(data);
- MessagingInstance::getInstance().PostMessage(json->serialize().c_str());
+ PostQueue::getInstance().resolve(
+ obj.at(JSON_CALLBACK_ID).get<double>(),
+ json->serialize()
+ );
callback->getMessage()->setMessageStatus(MessageStatus::STATUS_SENT);
}
}
picojson::object& obj = response->get<picojson::object>();
AbortException error("Sync aborted by user");
callback->setError(error.name(), error.message());
- MessagingInstance::getInstance().PostMessage(response->serialize().c_str());
+ PostQueue::getInstance().resolve(
+ obj.at(JSON_CALLBACK_ID).get<double>(),
+ response->serialize()
+ );
m_proxy_sync->removeCallback(op_id);
}
try {
if (callback->isError()) {
LoggerD("Calling error callback");
- MessagingInstance::getInstance().PostMessage(
- callback->getJson()->serialize().c_str());
+ PostQueue::getInstance().resolve(
+ callback->getJson()->get<picojson::object>().at(JSON_CALLBACK_ID).get<double>(),
+ callback->getJson()->serialize()
+ );
} else {
LoggerD("Calling success callback");
auto json = callback->getJson();
picojson::object& obj = json->get<picojson::object>();
obj[JSON_ACTION] = picojson::value(JSON_CALLBACK_SUCCCESS);
- MessagingInstance::getInstance().PostMessage(json->serialize().c_str());
+ PostQueue::getInstance().resolve(
+ obj.at(JSON_CALLBACK_ID).get<double>(),
+ json->serialize()
+ );
}
} catch (const PlatformException& err) {
LoggerE("Error while calling removeEmail callback: %s (%s)",
try {
if (callback->isError()) {
LoggerD("Calling error callback");
- MessagingInstance::getInstance().PostMessage(callback->getJson()->serialize().c_str());
+ PostQueue::getInstance().resolve(
+ callback->getJson()->get<picojson::object>().at(JSON_CALLBACK_ID).get<double>(),
+ callback->getJson()->serialize()
+ );
} else {
LoggerD("Calling success callback");
auto json = callback->getJson();
picojson::object& obj = json->get<picojson::object>();
obj[JSON_ACTION] = picojson::value(JSON_CALLBACK_SUCCCESS);
- MessagingInstance::getInstance().PostMessage(json->serialize().c_str());
+ PostQueue::getInstance().resolve(
+ obj.at(JSON_CALLBACK_ID).get<double>(),
+ json->serialize()
+ );
}
} catch (const PlatformException& err) {
LoggerE("Error while calling updateEmail callback: %s (%s)",
try {
if (callback->isError()) {
LoggerD("Calling error callback");
- MessagingInstance::getInstance().PostMessage(callback->getJson()->serialize().c_str());
+ PostQueue::getInstance().resolve(
+ callback->getJson()->get<picojson::object>().at(JSON_CALLBACK_ID).get<double>(),
+ callback->getJson()->serialize()
+ );
} else {
LoggerD("Calling success callback");
auto json = callback->getJson();
});
obj[JSON_DATA] = picojson::value(response);
obj[JSON_ACTION] = picojson::value(JSON_CALLBACK_SUCCCESS);
- MessagingInstance::getInstance().PostMessage(json->serialize().c_str());
+
+ PostQueue::getInstance().resolve(
+ obj.at(JSON_CALLBACK_ID).get<double>(),
+ json->serialize()
+ );
}
} catch (const PlatformException& err) {
LoggerE("Error while calling findMessages callback: %s (%s)",
try {
if (callback->isError()) {
LoggerD("Calling error callback");
- MessagingInstance::getInstance().PostMessage(callback->getJson()->serialize().c_str());
+ PostQueue::getInstance().resolve(
+ callback->getJson()->get<picojson::object>().at(JSON_CALLBACK_ID).get<double>(),
+ callback->getJson()->serialize()
+ );
} else {
LoggerD("Calling success callback");
auto json = callback->getJson();
);
obj[JSON_DATA] = picojson::value(response);
obj[JSON_ACTION] = picojson::value(JSON_CALLBACK_SUCCCESS);
- MessagingInstance::getInstance().PostMessage(json->serialize().c_str());
+
+ PostQueue::getInstance().resolve(
+ obj.at(JSON_CALLBACK_ID).get<double>(),
+ json->serialize()
+ );
}
} catch (const PlatformException& err) {
LoggerE("Error while calling findConversations callback: %s (%s)",
try {
if (callback->isError()) {
LoggerD("Calling error callback");
- MessagingInstance::getInstance().PostMessage(callback->getJson()->serialize().c_str());
+ PostQueue::getInstance().resolve(
+ callback->getJson()->get<picojson::object>().at(JSON_CALLBACK_ID).get<double>(),
+ callback->getJson()->serialize()
+ );
} else {
LoggerD("Calling success callback");
auto json = callback->getJson();
);
obj[JSON_DATA] = picojson::value(response);
obj[JSON_ACTION] = picojson::value(JSON_CALLBACK_SUCCCESS);
- MessagingInstance::getInstance().PostMessage(json->serialize().c_str());
+
+ PostQueue::getInstance().resolve(
+ obj.at(JSON_CALLBACK_ID).get<double>(),
+ json->serialize()
+ );
}
} catch (const PlatformException& err) {
LoggerE("Error while calling findFolders callback: %s (%s)",
try {
if (callback->isError()) {
LoggerD("Calling error callback");
- MessagingInstance::getInstance().PostMessage(
- callback->getJson()->serialize().c_str());
+ PostQueue::getInstance().resolve(
+ callback->getJson()->get<picojson::object>().at(JSON_CALLBACK_ID).get<double>(),
+ callback->getJson()->serialize()
+ );
} else {
LoggerD("Calling success callback");
auto json = callback->getJson();
picojson::object& obj = json->get<picojson::object>();
obj[JSON_ACTION] = picojson::value(JSON_CALLBACK_SUCCCESS);
- MessagingInstance::getInstance().PostMessage(json->serialize().c_str());
+
+ PostQueue::getInstance().resolve(
+ obj.at(JSON_CALLBACK_ID).get<double>(),
+ json->serialize()
+ );
}
} catch (const PlatformException& err) {
LoggerE("Error while calling removeConversations callback: %s (%s)",
picojson::object& obj = json->get<picojson::object>();
obj[JSON_ACTION] = picojson::value(FOLDERSADDED);
obj[JSON_DATA] = picojson::value(array);
- MessagingInstance::getInstance().PostMessage(json->serialize().c_str());
+
+ PostQueue::getInstance().addAndResolve(obj.at(
+ JSON_CALLBACK_ID).get<double>(), PostPriority::MEDIUM, json->serialize());
}
void FoldersChangeCallback::updated(const FolderPtrVector& folders)
picojson::object& obj = json->get<picojson::object>();
obj[JSON_ACTION] = picojson::value(FOLDERSUPDATED);
obj[JSON_DATA] = picojson::value(array);
- MessagingInstance::getInstance().PostMessage(json->serialize().c_str());
+
+ PostQueue::getInstance().addAndResolve(obj.at(
+ JSON_CALLBACK_ID).get<double>(), PostPriority::LOW, json->serialize());
}
void FoldersChangeCallback::removed(const FolderPtrVector& folders)
picojson::object& obj = json->get<picojson::object>();
obj[JSON_ACTION] = picojson::value(FOLDERSREMOVED);
obj[JSON_DATA] = picojson::value(array);
- MessagingInstance::getInstance().PostMessage(json->serialize().c_str());
+
+ PostQueue::getInstance().addAndResolve(obj.at(
+ JSON_CALLBACK_ID).get<double>(), PostPriority::LAST, json->serialize());
}
void FoldersChangeCallback::setFilter(tizen::AbstractFilterPtr filter)
callback->getMessageAttachment());
obj[JSON_DATA] = picojson::value(args);
- MessagingInstance::getInstance().PostMessage(json->serialize().c_str());
+ PostQueue::getInstance().resolve(
+ obj.at(JSON_CALLBACK_ID).get<double>(),
+ json->serialize()
+ );
+
delete callback;
callback = NULL;
return FALSE;
args[JSON_DATA_MESSAGE_BODY] = MessagingUtil::messageBodyToJson(body);
obj[JSON_DATA] = picojson::value(args);
- MessagingInstance::getInstance().PostMessage(json->serialize().c_str());
+ PostQueue::getInstance().resolve(
+ obj.at(JSON_CALLBACK_ID).get<double>(),
+ json->serialize()
+ );
} catch (...) {
LoggerE("Couldn't create JSMessage object!");
common::UnknownException e("Loade message body failed");
callback->setError(e.name(), e.message());
- MessagingInstance::getInstance().PostMessage(callback->getJson()->serialize().c_str());
+ PostQueue::getInstance().resolve(
+ callback->getJson()->get<picojson::object>().at(JSON_CALLBACK_ID).get<double>(),
+ callback->getJson()->serialize()
+ );
}
return FALSE;
return FALSE;
}
- MessagingInstance::getInstance().PostMessage(callback->getJson()->serialize().c_str());
+ PostQueue::getInstance().resolve(
+ callback->getJson()->get<picojson::object>().at(JSON_CALLBACK_ID).get<double>(),
+ callback->getJson()->serialize()
+ );
return FALSE;
}
obj[JSON_DATA] = picojson::value(array);
obj[JSON_ACTION] = picojson::value(JSON_CALLBACK_SUCCCESS);
- MessagingInstance::getInstance().PostMessage(json->serialize().c_str());
+
+ PostQueue::getInstance().resolve(
+ obj.at(JSON_CALLBACK_ID).get<double>(),
+ json->serialize()
+ );
delete callback;
callback = NULL;
picojson::object& obj = json->get<picojson::object>();
obj[JSON_ACTION] = picojson::value(MESSAGESADDED);
obj[JSON_DATA] = picojson::value(array);
- MessagingInstance::getInstance().PostMessage(json->serialize().c_str());
+
+ PostQueue::getInstance().addAndResolve(obj.at(
+ JSON_CALLBACK_ID).get<double>(), PostPriority::MEDIUM, json->serialize());
}
void MessagesChangeCallback::updated(const MessagePtrVector& msgs)
picojson::object& obj = json->get<picojson::object>();
obj[JSON_ACTION] = picojson::value(MESSAGESUPDATED);
obj[JSON_DATA] = picojson::value(array);
- MessagingInstance::getInstance().PostMessage(json->serialize().c_str());
+
+ PostQueue::getInstance().addAndResolve(obj.at(
+ JSON_CALLBACK_ID).get<double>(), PostPriority::LOW, json->serialize());
}
void MessagesChangeCallback::removed(const MessagePtrVector& msgs)
obj[JSON_ACTION] = picojson::value(MESSAGESREMOVED);
LoggerD("MESSAGES: %s", picojson::value(array).serialize().c_str());
obj[JSON_DATA] = picojson::value(array);
- MessagingInstance::getInstance().PostMessage(json->serialize().c_str());
+ PostQueue::getInstance().addAndResolve(obj.at(
+ JSON_CALLBACK_ID).get<double>(), PostPriority::LAST, json->serialize());
}
void MessagesChangeCallback::setFilter(tizen::AbstractFilterPtr filter)
(MessagingUtil::getValueFromJSONObject<double>(data,SEND_MESSAGE_ARGS_SIMINDEX));
if (!callback->setSimIndex(simIndex)) {
- PostMessage(json->serialize().c_str());
+ PostQueue::getInstance().resolve(
+ obj.at(JSON_CALLBACK_ID).get<double>(),
+ json->serialize()
+ );
delete callback;
callback = NULL;
return;
callback->setJson(json);
+ PostQueue::getInstance().add(static_cast<long>(callbackId), PostPriority::HIGH);
auto service = MessagingManager::getInstance().getMessageService(serviceId);
service->sendMessage(callback);
}
picojson::value message = data.at(ADD_DRAFT_MESSAGE_ARGS_MESSAGE);
const double callbackId = args.get(JSON_CALLBACK_ID).get<double>();
+
MessageBodyCallbackData* callback = new MessageBodyCallbackData();
callback->setMessage(MessagingUtil::jsonToMessage(message));
obj[JSON_CALLBACK_ID] = picojson::value(callbackId);
callback->setJson(json);
+ PostQueue::getInstance().add(static_cast<long>(callbackId), PostPriority::HIGH);
auto service = MessagingManager::getInstance().getMessageService(getServiceIdFromJSON(data));
service->loadMessageBody(callback);
}
picojson::object data = args.get(JSON_DATA).get<picojson::object>();
picojson::value attachment = data.at(LOAD_MESSAGE_ATTACHMENT_ARGS_ATTACHMENT);
const double callbackId = args.get(JSON_CALLBACK_ID).get<double>();
+
MessageAttachmentCallbackData* callback = new MessageAttachmentCallbackData();
callback->setMessageAttachment(MessagingUtil::jsonToMessageAttachment(attachment));
obj[JSON_CALLBACK_ID] = picojson::value(callbackId);
callback->setJson(json);
+ PostQueue::getInstance().add(static_cast<long>(callbackId), PostPriority::HIGH);
auto service = MessagingManager::getInstance().getMessageService(getServiceIdFromJSON(data));
service->loadMessageAttachment(callback);
}
callback->setAccountId(id);
callback->setLimit(limit);
+ PostQueue::getInstance().add(static_cast<long>(callbackId), PostPriority::HIGH);
long op_id = MessagingManager::getInstance().getMessageService(id)->sync(callback);
picojson::value v_op_id(static_cast<double>(op_id));
callback->setMessageFolder(MessagingUtil::jsonToMessageFolder(v_folder));
callback->setLimit(limit);
+ PostQueue::getInstance().add(static_cast<long>(callbackId), PostPriority::HIGH);
long op_id = MessagingManager::getInstance().getMessageService(id)->syncFolder(callback);
picojson::value v_op_id(static_cast<double>(op_id));
obj[JSON_CALLBACK_ID] = picojson::value(callbackId);
callback->setJson(json);
+ PostQueue::getInstance().add(static_cast<long>(callbackId), PostPriority::HIGH);
auto service = MessagingManager::getInstance().getMessageService(serviceId);
service->getMsgStorage()->addDraftMessage(callback);
}
obj[JSON_CALLBACK_ID] = picojson::value(callbackId);
callback->setJson(json);
+ PostQueue::getInstance().add(static_cast<long>(callbackId), PostPriority::HIGH);
storage->findMessages(callback);
}
auto service = MessagingManager::getInstance().getMessageService(getServiceIdFromJSON(data));
+ PostQueue::getInstance().add(static_cast<long>(callbackId), PostPriority::HIGH);
service->getMsgStorage()->removeMessages(callback);
}
auto service = MessagingManager::getInstance().getMessageService(getServiceIdFromJSON(data));
+ PostQueue::getInstance().add(static_cast<long>(callbackId), PostPriority::HIGH);
service->getMsgStorage()->updateMessages(callback);
}
obj[JSON_CALLBACK_ID] = picojson::value(callbackId);
callback->setJson(json);
+ PostQueue::getInstance().add(static_cast<long>(callbackId), PostPriority::HIGH);
auto storage = MessagingManager::getInstance().getMessageService(serviceId)->getMsgStorage();
storage->findConversations(callback);
}
auto service = MessagingManager::getInstance().getMessageService(getServiceIdFromJSON(data));
+ PostQueue::getInstance().add(static_cast<long>(callbackId), PostPriority::HIGH);
service->getMsgStorage()->removeConversations(callback);
}
picojson::object& obj = json->get<picojson::object>();
obj[JSON_CALLBACK_ID] = picojson::value(callbackId);
callback->setJson(json);
+
+ PostQueue::getInstance().add(static_cast<long>(callbackId), PostPriority::HIGH);
auto service = MessagingManager::getInstance().getMessageService(getServiceIdFromJSON(data));
service->getMsgStorage()->findFolders(callback);
}
#include "messaging_util.h"
#include <fstream>
-#include <map>
#include <stdexcept>
#include <streambuf>
#include <sstream>
#include "message_sms.h"
#include "message_mms.h"
#include "message_conversation.h"
+#include "messaging_instance.h"
#include "tizen/tizen.h"
#include "common/logger.h"
return conversation;
}
+PostQueue& PostQueue::getInstance()
+{
+ LoggerD("Entered");
+ static PostQueue instance;
+ return instance;
+}
+
+PostQueue::PostQueue()
+{
+ LoggerD("Entered");
+}
+PostQueue::~PostQueue()
+{
+ LoggerD("Entered");
+}
+
+void PostQueue::addAndResolve(const long cid, PostPriority priority, const std::string json)
+{
+ LoggerD("Entered");
+
+ std::shared_ptr<PostTask> t(new PostTask(priority));
+ t->attach(json);
+ tasks_mutex_.lock();
+ tasks_.push_back(std::make_pair(cid, t));
+ tasks_mutex_.unlock();
+
+ resolve(PostPriority::HIGH);
+
+ return;
+}
+
+void PostQueue::add(const long cid, PostPriority priority)
+{
+ LoggerD("Entered");
+
+ tasks_mutex_.lock();
+ tasks_.push_back(std::make_pair(cid, std::shared_ptr<PostTask>(new PostTask(priority))));
+ tasks_mutex_.unlock();
+
+ return;
+}
+
+void PostQueue::resolve(const long cid, const std::string json)
+{
+ LoggerD("Entered");
+
+ tasks_mutex_.lock();
+
+ TasksCollection::iterator i;
+ i = std::find_if(tasks_.begin(), tasks_.end(), [&cid] (TasksCollectionItem item)->bool {
+ return (cid == item.first);
+ });
+
+ if (tasks_.end() == i) {
+ LoggerD("Not found cid");
+ tasks_mutex_.unlock();
+ return;
+ }
+
+ i->second->attach(json);
+ tasks_mutex_.unlock();
+
+ resolve(PostPriority::HIGH);
+ return;
+}
+
+void PostQueue::resolve(PostPriority p)
+{
+ LoggerD("Entered");
+
+ TasksCollection::iterator i;
+
+ tasks_mutex_.lock();
+ i = std::find_if(tasks_.begin(), tasks_.end(), [&p] (TasksCollectionItem item)->bool {
+ return (p == item.second->priority());
+ });
+
+ if (tasks_.end() == i) {
+ // not found
+ tasks_mutex_.unlock();
+
+ if (PostPriority::LAST != p) {
+ return resolve(static_cast<PostPriority>(p-1));
+ } else {
+ return;
+ }
+ }
+
+ if (TaskState::READY == i->second->state()) {
+ i->second->resolve();
+ std::string json = i->second->json();
+
+ i = tasks_.erase(i);
+ tasks_mutex_.unlock();
+
+ MessagingInstance::getInstance().PostMessage(json.c_str());
+ } else if (TaskState::NEW == i->second->state()) {
+ tasks_mutex_.unlock();
+
+ return;
+ } else if (TaskState::DONE == i->second->state()) {
+ i = tasks_.erase(i);
+ tasks_mutex_.unlock();
+ }
+
+ return resolve(static_cast<PostPriority>(p));
+}
+
+PostQueue::PostTask::PostTask()
+{
+ LoggerD("Entered");
+ priority_ = PostPriority::LOW;
+ state_ = TaskState::NEW;
+}
+PostQueue::PostTask::PostTask(PostPriority p)
+{
+ LoggerD("Entered");
+ priority_ = p;
+ state_ = TaskState::NEW;
+}
+PostQueue::PostTask::~PostTask()
+{
+ LoggerD("Entered");
+}
+
+void PostQueue::PostTask::attach(const std::string j)
+{
+ LoggerD("Entered");
+ if (TaskState::DONE == state_) {
+ return;
+ }
+ json_ = j;
+ state_ = TaskState::READY;
+ return;
+}
+
+PostPriority PostQueue::PostTask::priority()
+{
+ return priority_;
+}
+
+PostQueue::TaskState PostQueue::PostTask::state()
+{
+ return state_;
+}
+
+std::string PostQueue::PostTask::json()
+{
+ return json_;
+}
+
+void PostQueue::PostTask::resolve()
+{
+ LoggerD("Entered");
+ if (TaskState::READY == state_) {
+ state_ = TaskState::DONE;
+ }
+ return;
+}
+
+
} // messaging
} // extension
#include <string>
#include <vector>
#include <memory>
+#include <mutex>
+#include <map>
#include <stdexcept>
#include "common/logger.h"
#include "common/picojson.h"
static tizen::AttributeRangeFilterPtr jsonFilterToAttributeRangeFilter(const picojson::object& json);
};
+enum PostPriority {
+ LAST = 0,
+ LOW,
+ MEDIUM,
+ HIGH
+};
+
+class PostQueue {
+public:
+ static PostQueue& getInstance();
+ void addAndResolve(const long cid, PostPriority priority, const std::string json);
+ void add(const long cid, PostPriority priority = PostPriority::LAST);
+ void resolve(const long cid, const std::string json);
+
+ enum TaskState {
+ NEW = 0,
+ READY,
+ DONE
+ };
+
+private:
+ class PostTask;
+ typedef std::pair<long, std::shared_ptr<PostTask>> TasksCollectionItem;
+ typedef std::vector<TasksCollectionItem> TasksCollection;
+
+ PostQueue();
+ PostQueue(const PostQueue &);
+ ~PostQueue();
+ void operator=(const PostQueue &);
+ void resolve(PostPriority p);
+ TasksCollection tasks_;
+ std::mutex tasks_mutex_;
+
+ class PostTask {
+ public:
+ PostTask();
+ PostTask(PostPriority p);
+ ~PostTask();
+ void attach(const std::string j);
+ PostPriority priority();
+ TaskState state();
+ std::string json();
+ void resolve();
+ private:
+ std::string json_;
+ PostPriority priority_;
+ TaskState state_;
+ };
+};
+
} // messaging
} // extension
#endif // MESSAGING_MESSAGING_UTIL_H_
try {
if (callback->isError()) {
- MessagingInstance::getInstance().PostMessage(callback->getJson()->serialize().c_str());
+ PostQueue::getInstance().resolve(
+ callback->getJson()->get<picojson::object>().at(JSON_CALLBACK_ID).get<double>(),
+ callback->getJson()->serialize()
+ );
callback->getMessage()->setMessageStatus(MessageStatus::STATUS_FAILED);
}
else {
data[JSON_DATA_MESSAGE] = MessagingUtil::messageToJson(message);
obj[JSON_DATA] = picojson::value(data);
- MessagingInstance::getInstance().PostMessage(json->serialize().c_str());
+ PostQueue::getInstance().resolve(
+ obj.at(JSON_CALLBACK_ID).get<double>(),
+ json->serialize()
+ );
callback->getMessage()->setMessageStatus(MessageStatus::STATUS_SENT);
}
}
if (callback->isError()) {
LoggerD("Calling error callback");
- MessagingInstance::getInstance().PostMessage(callback->getJson()->serialize().c_str());
+ PostQueue::getInstance().resolve(
+ callback->getJson()->get<picojson::object>().at(JSON_CALLBACK_ID).get<long>(),
+ callback->getJson()->serialize()
+ );
callback->getMessage()->setMessageStatus(MessageStatus::STATUS_FAILED);
} else {
LoggerD("Calling success callback");
args[JSON_DATA_MESSAGE] = MessagingUtil::messageToJson(callback->getMessage());
obj[JSON_DATA] = picojson::value(args);
- MessagingInstance::getInstance().PostMessage(json->serialize().c_str());
+ PostQueue::getInstance().resolve(
+ obj.at(JSON_CALLBACK_ID).get<double>(),
+ json->serialize()
+ );
}
} catch (const common::PlatformException& err) {
LoggerE("Error while calling addDraftMessage callback: %s (%s)",
try {
if (callback->isError()) {
LoggerD("Calling error callback");
- MessagingInstance::getInstance().PostMessage(callback->getJson()->serialize().c_str());
+ PostQueue::getInstance().resolve(
+ callback->getJson()->get<picojson::object>().at(JSON_CALLBACK_ID).get<double>(),
+ callback->getJson()->serialize()
+ );
} else {
LoggerD("Calling success callback");
auto json = callback->getJson();
picojson::object& obj = json->get<picojson::object>();
obj[JSON_ACTION] = picojson::value(JSON_CALLBACK_SUCCCESS);
- MessagingInstance::getInstance().PostMessage(json->serialize().c_str());
+
+ PostQueue::getInstance().resolve(
+ obj.at(JSON_CALLBACK_ID).get<double>(),
+ json->serialize()
+ );
}
} catch (const common::PlatformException& err) {
LoggerE("Error while calling removeShortMsg callback: %s (%s)",
if (callback->isError()) {
LoggerD("Calling error callback");
- MessagingInstance::getInstance().PostMessage(callback->getJson()->serialize().c_str());
+ PostQueue::getInstance().resolve(
+ callback->getJson()->get<picojson::object>().at(JSON_CALLBACK_ID).get<double>(),
+ callback->getJson()->serialize()
+ );
} else {
LoggerD("Calling success callback");
obj[JSON_DATA] = picojson::value(array);
obj[JSON_ACTION] = picojson::value(JSON_CALLBACK_SUCCCESS);
- MessagingInstance::getInstance().PostMessage(json->serialize().c_str());
+
+ PostQueue::getInstance().resolve(
+ obj.at(JSON_CALLBACK_ID).get<double>(),
+ json->serialize()
+ );
}
} catch (const common::PlatformException& err) {
LoggerE("Error while calling updateShortMsg callback: %s (%s)",
try {
if (callback->isError()) {
LoggerD("Calling error callback");
- MessagingInstance::getInstance().PostMessage(callback->getJson()->serialize().c_str());
+ PostQueue::getInstance().resolve(
+ callback->getJson()->get<picojson::object>().at(JSON_CALLBACK_ID).get<double>(),
+ callback->getJson()->serialize()
+ );
} else {
LoggerD("Calling success callback with %d messages:",
callback->getMessages().size());
obj[JSON_DATA] = picojson::value(response);
obj[JSON_ACTION] = picojson::value(JSON_CALLBACK_SUCCCESS);
- MessagingInstance::getInstance().PostMessage(json->serialize().c_str());
+
+ PostQueue::getInstance().resolve(
+ obj.at(JSON_CALLBACK_ID).get<double>(),
+ json->serialize()
+ );
}
} catch (const common::PlatformException& err) {
LoggerE("Error while calling findMessages callback: %s (%s)",
try {
if (callback->isError()) {
LoggerD("Calling error callback");
- MessagingInstance::getInstance().PostMessage(callback->getJson()->serialize().c_str());
+ PostQueue::getInstance().resolve(
+ callback->getJson()->get<picojson::object>().at(JSON_CALLBACK_ID).get<double>(),
+ callback->getJson()->serialize()
+ );
} else {
LoggerD("Calling success callback");
auto json = callback->getJson();
);
obj[JSON_DATA] = picojson::value(response);
obj[JSON_ACTION] = picojson::value(JSON_CALLBACK_SUCCCESS);
- MessagingInstance::getInstance().PostMessage(json->serialize().c_str());
+
+ PostQueue::getInstance().resolve(
+ obj.at(JSON_CALLBACK_ID).get<double>(),
+ json->serialize()
+ );
}
} catch (const common::PlatformException& err) {
LoggerE("Error while calling findConversations callback: %s (%s)",
try {
if (callback->isError()) {
LoggerD("Calling error callback");
- MessagingInstance::getInstance().PostMessage(
- callback->getJson()->serialize().c_str());
+ PostQueue::getInstance().resolve(
+ callback->getJson()->get<picojson::object>().at(JSON_CALLBACK_ID).get<double>(),
+ callback->getJson()->serialize()
+ );
} else {
LoggerD("Calling success callback");
auto json = callback->getJson();
picojson::object& obj = json->get<picojson::object>();
obj[JSON_ACTION] = picojson::value(JSON_CALLBACK_SUCCCESS);
- MessagingInstance::getInstance().PostMessage(json->serialize().c_str());
+
+ PostQueue::getInstance().resolve(
+ obj.at(JSON_CALLBACK_ID).get<double>(),
+ json->serialize()
+ );
}
} catch (const common::PlatformException& err) {
LoggerE("Error while calling removeConversations callback: %s (%s)",