Changes to Subscription Handler
[ric-app/hw.git] / src / xapp-mgmt / subs_mgmt.cc
index 58da73c..dca9412 100644 (file)
  * Author: Ashwin Shridharan, Shraboni Jana
  */
 #include "subs_mgmt.hpp"
-
+#include <thread>
 #include <errno.h>
 
-
 SubscriptionHandler::SubscriptionHandler(unsigned int timeout_seconds):_time_out(std::chrono::seconds(timeout_seconds)){
          _data_lock = std::make_unique<std::mutex>();
          _cv = std::make_unique<std::condition_variable>();
@@ -67,10 +66,10 @@ bool SubscriptionHandler::delete_request_entry(transaction_identifier id){
 
   if (search != status_table.end()){
     status_table.erase(search);
-    mdclog_write(MDCLOG_INFO,"Entry for Transaction ID deleted: %s",id.c_str());
+    mdclog_write(MDCLOG_INFO,"Entry for Transaction ID deleted: %d",id);
     return true;
   }
-  mdclog_write(MDCLOG_INFO,"Entry not found in SubscriptionHandler for Transaction ID: %s",id.c_str());
+  mdclog_write(MDCLOG_INFO,"Entry not found in SubscriptionHandler for Transaction ID: %d",id);
 
   return false;
 };
@@ -79,48 +78,63 @@ bool SubscriptionHandler::delete_request_entry(transaction_identifier id){
 bool SubscriptionHandler::set_request_status(transaction_identifier id, transaction_status status){
 
   // change status of a request only if it exists.
-  auto search = status_table.find(id);
-  if(search != status_table.end()){
-    status_table[id] = status;
-    return true;
-  }
-
+       for(auto &it:status_table){
+                       if(strcmp(it.first.c_str(), id.c_str())==0) {
+                               it.second = status;
+                               return true;
+                       }
+               }
   return false;
-  
+
 };
 
 
-int const SubscriptionHandler::get_request_status(transaction_identifier id){
-  auto search = status_table.find(id);
-  if (search == status_table.end()){
-    return -1;
-  }
-  
-  return search->second;
+int SubscriptionHandler::get_request_status(transaction_identifier id){
+
+       for(auto it:status_table){
+               if(strcmp(it.first.c_str(), id.c_str())==0) {
+                       return it.second;
+               }
+       }
+
+
+  return -1;
 }
                                   
 
 
 bool SubscriptionHandler::is_request_entry(transaction_identifier id){
-  auto search = status_table.find(id);
-  if (search != status_table.end())
-    return true;
-  else
+       for(auto it:status_table){
+                       if(strcmp(it.first.c_str(), id.c_str())==0) {
+                               return true;
+                       }
+               }
     return false;
 }
 
+
+
+
 // Handles subscription responses
 void SubscriptionHandler::manage_subscription_response(int message_type, transaction_identifier id){
+       // Make This Thread sleep for 1 Second
+  std::this_thread::sleep_for(std::chrono::milliseconds(1000));
+  {
+         std::unique_lock<std::mutex> _local_lock(*(_data_lock.get()));
+         mdclog_write(MDCLOG_INFO,"Subscription Handler: Status for me id %s WAS: %d",id.c_str(),this->get_request_status(id));
 
-  bool res;
-  std::cout << "In Manage subscription" << std::endl;
+         //from the message type we can know if its a success/failure etc.
+         if(message_type==RIC_SUB_RESP)
+         this->set_request_status(id, request_success);
 
-  // wake up all waiting users ...
-  if(is_request_entry(id)){
-         std::cout << "In Manage subscription" << std::endl;
-         set_request_status(id, request_success);
-     _cv.get()->notify_all();
-  }
+         if(message_type==RIC_SUB_FAILURE)
+         this->set_request_status(id,request_failed);
+
+         mdclog_write(MDCLOG_INFO,"Subscription Handler: Status for me id %s IS: %d",id.c_str(),this->get_request_status(id));
+
+         //this->print_subscription_status();
+   }
+  //_cv.get()->notify_all();
 
 }