Change to return an error if it fails because an error may occur when executing Execute.
Signed-off-by: Changgyu Choi <changyu.choi@samsung.com>
int top_k,
float search_threshold) {}
-void ActionRequestHandler::OnExecute(const std::string& instance, pid_t pid,
+int ActionRequestHandler::OnExecute(const std::string& instance, pid_t pid,
uid_t uid, rpc::ActionModel& action) {
auto db = std::make_unique<action::SqliteDb>();
std::string schema_json = db->GetAction(action.Getaction_id());
if (!ActionValidator().CheckModelValid(schema_json, action.Getjson())) {
LOG(DEBUG) << "OnExecute not valid : " << action.Getaction_id();
- return;
+ return -1;
}
try {
auto required_privileges = db->GetRequiredPrivileges(model.GetId());
if (!CheckPrivileges(pid, uid, required_privileges)) {
LOG(ERROR) << "Not allowed to execute action due to missing privileges";
- return;
+ return -1;
}
auto executor = ActionExecutorFactory::CreateExecutor(instance, model);
executor->SetResultHandler(this);
- executor->Execute(model);
+ int ret = executor->Execute(model);
executors_.emplace_back(std::move(executor));
+ return ret;
} catch (const std::runtime_error& e) {
LOG(ERROR) << "Failed to execute action : " << e.what();
+ return -1;
}
}
#include "action/request_handler.hh"
#include "action/tizen_action_service_stub.h"
#include "common/action_executor.hh"
-#include "common/action_schema.h"
#include "common/action_result_handler.hh"
+#include "common/action_schema.h"
namespace action {
-class ActionRequestHandler : public IRequestHandler, common::IActionResultHandler {
+class ActionRequestHandler : public IRequestHandler,
+ common::IActionResultHandler {
public:
ActionRequestHandler();
~ActionRequestHandler();
void OnGetActionId(const std::string& user_description,
int top_k,
float search_threshold) override;
- void OnExecute(const std::string& instance, pid_t pid, uid_t uid,
+ int OnExecute(const std::string& instance, pid_t pid, uid_t uid,
rpc::ActionModel& model) override;
void RegisterRequestReplyHandler(const std::string& requester,
IRequestReplyHandler* handler) override;
virtual rpc::ActionSchema OnGetAction(const std::string& id) = 0;
virtual void OnGetActionId(const std::string& user_description, int top_k,
float search_threshold) = 0;
- virtual void OnExecute(const std::string& requester, pid_t pid, uid_t uid, rpc::ActionModel& model) = 0;
+ virtual int OnExecute(const std::string& requester, pid_t pid, uid_t uid, rpc::ActionModel& model) = 0;
virtual void RegisterRequestReplyHandler(const std::string& requester,
- IRequestReplyHandler* handler) = 0;
+ IRequestReplyHandler* handler) = 0;
virtual void UnregisterRequestReplyHandler(const std::string& requester) = 0;
};
int Service::Execute(rpc::ActionModel action) {
LOG(DEBUG) << "Execute : " << action.Getaction_id();
- handler_.OnExecute(GetInstance(), GetPid(), GetUid(), action);
- return 0;
+ return handler_.OnExecute(GetInstance(), GetPid(), GetUid(), action);
}
int Service::RegisterActionReplyCb(std::unique_ptr<ActionReplyCb> cb) {
#include "action_tool/tizen_action_service_proxy.h"
#include "log_private.hh"
-
namespace action_tool {
namespace {
constexpr const char kStubAppId[] = "org.tizen.action-framework.service";
+GMainLoop* mainloop = nullptr;
+
} // namespace
namespace rpc = rpc_port::tizen_action_service_proxy;
public:
void OnReceived(std::string result) {
_I("result : %s", result.c_str());
+ g_main_loop_quit(mainloop);
}
};
class Execute : public ActionTool,
- rpc_port::tizen_action_service_proxy::proxy::ActionService::
- IEventListener {
+ rpc_port::tizen_action_service_proxy::proxy::ActionService::
+ IEventListener {
public:
Execute()
: ActionTool("execute", "Execute", "execute <action id> <json string>"),
virtual ~Execute() {}
void SetUp() override {
+ mainloop = g_main_loop_new(nullptr, FALSE);
try {
proxy_.Connect(true);
connected = true;
proxy_.UnregisterActionReplyCb(cb_id_);
proxy_.Disconnect();
}
+
+ g_main_loop_unref(mainloop);
}
int Run(int argc, char** argv) override {
action.Setjson(json);
try {
int ret = proxy_.Execute(action);
+ if (ret == 0)
+ g_main_loop_run(mainloop);
+
return ret;
} catch (...) {
_E("Execute Failed");