* 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>();
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;
};
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();
}