Add group invited event handler
authorSangyoon Jang <jeremy.jang@samsung.com>
Fri, 24 Aug 2018 08:07:05 +0000 (17:07 +0900)
committer장상윤/Tizen Platform Lab(SR)/Engineer/삼성전자 <jeremy.jang@samsung.com>
Wed, 29 Aug 2018 01:50:32 +0000 (10:50 +0900)
If local device is invited by not invited remote device,
try invite that remote device.

Change-Id: If69867bf3934dec3eed412324fce5fda692afda3
Signed-off-by: Sangyoon Jang <jeremy.jang@samsung.com>
src/common/mdg_manager.cc
src/common/mdg_manager.h

index 9657757c929854a22f78a0a9e64d765f484e6d59..1b659b526bdaa7e4f8d6fc1f1dd38e39e87c83a6 100644 (file)
@@ -149,6 +149,13 @@ bool MDGManager::Initialize() {
     return false;
   }
 
+  ret = mdg_set_invited_event_cb(mdg_handle_, &MDGManager::GroupInvitedCb,
+      this);
+  if (ret != MDG_ERROR_NONE) {
+    LOG(ERROR) << "Failed to set invited event cb: " << MDGErrorToString(ret);
+    return false;
+  }
+
   if (!CreateGroup()) {
     LOG(ERROR) << "Failed to create capmgr group";
     return false;
@@ -323,6 +330,39 @@ bool MDGManager::GroupForeachCb(mdg_device_h device, void* user_data) {
   return true;
 }
 
+void MDGManager::GroupInvitedCb(mdg_group_h group, void* user_data) {
+  char* device_id;
+  int ret = mdg_group_info_get_device_id(group, &device_id);
+  if (ret != MDG_ERROR_NONE) {
+    LOG(ERROR) << "Failed to get device id: " << MDGErrorToString(ret);
+    return;
+  }
+
+  LOG(INFO) << "Invited by device id: " << device_id;
+
+  bool found = false;
+  MDGManager* mdgmgr = static_cast<MDGManager*>(user_data);
+  for (auto& dev : GListRange<mdg_device_h>(mdgmgr->device_list_)) {
+    char* dev_id;
+    int ret = mdg_device_info_get_device_id(dev, &dev_id);
+    if (ret != MDG_ERROR_NONE)
+      continue;
+    ret = strcmp(dev_id, device_id);
+    free(dev_id);
+    if (!ret) {
+      found = true;
+      break;
+    }
+  }
+  free(device_id);
+
+  if (!found) {
+    LOG(INFO) << "Invited by not invited device. "
+              << "Try find and invite this device.";
+    mdgmgr->FindDevices();
+  }
+}
+
 bool MDGManager::CreateGroup() {
   int ret = mdg_group_create(mdg_handle_, const_cast<char*>(kGroupName));
   if (ret == MDG_ERROR_NONE) {
index 43193726bc2683f25a715378b08ee6e7879f297e..2a3e32884e322d637af03c0c43d23599c8def6ab 100644 (file)
@@ -60,6 +60,7 @@ class MDGManager : public ConnectionManager {
   static bool DeviceFoundCb(mdg_device_h device, void* user_data);
   static void DeviceFinishCb(int result, void* user_data);
   static bool GroupForeachCb(mdg_device_h device, void* user_data);
+  static void GroupInvitedCb(mdg_group_h group, void* user_data);
 
   mdg_h mdg_handle_;
   mdg_group_h group_handle_;