From: Piotr Kosko
Date: Mon, 24 Oct 2016 08:33:59 +0000 (+0200)
Subject: [Push] Fixing disconnect method
X-Git-Tag: submit/tizen_3.0/20161102.040156~1
X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ecc6d678168ba87ec486ca54957ddd71e8920808;p=platform%2Fcore%2Fapi%2Fwebapi-plugins.git
[Push] Fixing disconnect method
[Feature] Now disconnect method really disconnects from push server
[Verification] TCT passrate didn't change.
Change-Id: I18fe628e62dd4d2528e4278b5b6dec6143cde4e8
Signed-off-by: Piotr Kosko
---
diff --git a/src/push/push_manager_old.cc b/src/push/push_manager_old.cc
index e9a20918..b9fa0e25 100644
--- a/src/push/push_manager_old.cc
+++ b/src/push/push_manager_old.cc
@@ -33,6 +33,18 @@ namespace push {
using common::PlatformResult;
using common::ErrorCode;
+#define CHECK_CONNECTION() \
+ if (!m_handle) { \
+ int ret = push_service_connect(m_pkgId.c_str(), onPushState, onPushNotify, this, \
+ &m_handle);\
+ if (ret != PUSH_SERVICE_ERROR_NONE) { \
+ LoggerE("Failed to connect to push (%d)", ret);\
+ }\
+ m_state = PUSH_SERVICE_STATE_UNREGISTERED;\
+ m_ignoreNotificationEvents = true;\
+ }
+
+
PushManagerOld::PushManagerOld(EventListener* listener) :
IPushManager(listener),
m_state(PUSH_SERVICE_STATE_UNREGISTERED),
@@ -51,19 +63,27 @@ PushManagerOld::~PushManagerOld() {
PlatformResult PushManagerOld::connectService() {
LoggerD("Enter");
+ CHECK_CONNECTION();
m_ignoreNotificationEvents = false;
return common::PlatformResult(ErrorCode::NO_ERROR);
}
PlatformResult PushManagerOld::disconnectService() {
LoggerD("Enter");
- m_ignoreNotificationEvents = true;
+ // disconnecting from push server
+ if (m_handle) {
+ push_service_disconnect(m_handle);
+ m_handle = nullptr;
+ m_state = PUSH_SERVICE_STATE_UNREGISTERED;
+ m_ignoreNotificationEvents = true;
+ }
return common::PlatformResult(ErrorCode::NO_ERROR);
}
PlatformResult PushManagerOld::registerApplication(double callbackId) {
LoggerD("Enter");
+ CHECK_CONNECTION();
PushManagerHolder* holder = new PushManagerHolder{this, callbackId};
@@ -77,12 +97,27 @@ PlatformResult PushManagerOld::registerApplication(double callbackId) {
return common::PlatformResult(ErrorCode::NO_ERROR);
}
+bool PushManagerOld::checkRegistered() {
+ LoggerD("Enter");
+ bool result = false;
+ char* temp = NULL;
+ int ret = push_service_get_registration_id(m_handle, &temp);
+ if (ret != PUSH_SERVICE_ERROR_NONE) {
+ return result;
+ }
+ result = (NULL != temp ? true : false);
+ free(temp);
+ return result;
+}
+
+
common::PlatformResult PushManagerOld::unregisterApplication(double callbackId) {
LoggerD("Enter");
+ CHECK_CONNECTION();
PushManagerHolder* holder = new PushManagerHolder{this, callbackId};
- if (m_state == PUSH_SERVICE_STATE_UNREGISTERED) {
- LoggerD("Already unregister, call unregister callback");
+ if (!checkRegistered()) {
+ LoggerD("Already unregistered, call unregister callback");
if (!g_idle_add(onFakeDeregister, holder)) {
delete holder;
return LogAndCreateResult(ErrorCode::UNKNOWN_ERR,
@@ -111,6 +146,7 @@ common::PlatformResult PushManagerOld::unregisterApplication(double callbackId)
common::PlatformResult PushManagerOld::getRegistrationId(std::string& id) {
LoggerD("Enter");
+ CHECK_CONNECTION();
char* temp = NULL;
int ret = push_service_get_registration_id(m_handle, &temp);
if (ret != PUSH_SERVICE_ERROR_NONE) {
@@ -132,6 +168,7 @@ common::PlatformResult PushManagerOld::getRegistrationId(std::string& id) {
common::PlatformResult PushManagerOld::getUnreadNotifications() {
LoggerD("Enter");
+ CHECK_CONNECTION();
int ret = push_service_request_unread_notification(m_handle);
if (ret != PUSH_SERVICE_ERROR_NONE) {
return LogAndCreateResult(ErrorCode::UNKNOWN_ERR,
@@ -143,6 +180,7 @@ common::PlatformResult PushManagerOld::getUnreadNotifications() {
PlatformResult PushManagerOld::getPushMessage(picojson::value* out) {
LoggerD("Enter");
+ CHECK_CONNECTION();
push_service_notification_h handle = nullptr;
int ret = push_service_app_control_to_notification(app_control_, operation_,
diff --git a/src/push/push_manager_old.h b/src/push/push_manager_old.h
index 9c9deb7c..4ff45a81 100644
--- a/src/push/push_manager_old.h
+++ b/src/push/push_manager_old.h
@@ -45,6 +45,7 @@ class PushManagerOld : public IPushManager {
static common::ErrorCode ConvertPushError(int e);
private:
+ bool checkRegistered();
static void onPushState(push_service_state_e state, const char *err,
void *user_data);
static void onPushNotify(push_service_notification_h noti, void *user_data);