diff --git a/Subscription.cpp b/Subscription.cpp index ef2cde6..1d71e1b 100644 --- a/Subscription.cpp +++ b/Subscription.cpp @@ -1,5 +1,6 @@ #include "Subscription.h" #include "Log.h" +#include "MString.h" #include "TCPSession.h" #include "TCPSocket.h" #include @@ -8,15 +9,18 @@ namespace core { Subscription::Subscription(std::string id, std::string mode) - : id(id), mode(mode), owner(NULL), handler(NULL) {} + : id(id), mode(mode), owner(""), handler(NULL) {} - Subscription::Subscription(std::string id, coreutils::MString *alias, std::string mode) + Subscription::Subscription(std::string id, coreutils::MString alias, std::string mode) : id(id), mode(mode), owner(alias), handler(NULL) {} - Subscription::Subscription(std::string id, coreutils::MString *alias, std::string ownership, std::string mode, SubscriptionHandler *handler, std::string will, std::string timer) + Subscription::Subscription(std::string id, coreutils::MString alias, std::string ownership, std::string mode, SubscriptionHandler *handler, std::string will, std::string timer) : id(id), ownership(ownership), mode(mode), owner(alias), handler(handler), will(will), timer(timer) { - // coreutils::Log(coreutils::LOG_DEBUG_3) << "Subscription '" << id << "' with handler '" << handler->name << "'"; + + coreutils::Log(coreutils::LOG_DEBUG_3) << owner; + coreutils::Log(coreutils::LOG_DEBUG_3) << will; + subscriptionOwner(owner, will); } Subscription::~Subscription() @@ -57,19 +61,12 @@ namespace core } return 0; } - - bool Subscription::subscriptionOwner(coreutils::MString *alias, std::string ownerSelection) + bool Subscription::subscriptionOwner(coreutils::MString alias, std::string ownerSelection) { - if (owner != NULL) - { - owner = alias; - will == ownerSelection; - coreutils::Log(coreutils::LOG_DEBUG_1) << "Owner of Subscription: " << *(std::string *)owner; - } - else - { - coreutils::Log(coreutils::LOG_DEBUG_1) << "There is no owner to this subscription"; - } + subscriptionOwners = alias; + selectionOfOwnerForSubscription = ownerSelection; + coreutils::Log(coreutils::LOG_DEBUG_1) << "Owner of Subscription: " << subscriptionOwners; + coreutils::Log(coreutils::LOG_DEBUG_1) << "Will of Subscription: " << selectionOfOwnerForSubscription; return true; } diff --git a/Subscription.h b/Subscription.h index 6bfd142..4dcdc47 100644 --- a/Subscription.h +++ b/Subscription.h @@ -18,8 +18,8 @@ namespace core public: Subscription(std::string id, std::string mode = "*AUTHOR"); - Subscription(std::string id, coreutils::MString *alias, std::string mode); - Subscription(std::string id, coreutils::MString *alias, std::string ownership, std::string mode, SubscriptionHandler *handler, std::string selection, std::string time); + Subscription(std::string id, coreutils::MString alias, std::string mode); + Subscription(std::string id, coreutils::MString alias, std::string ownership, std::string mode, SubscriptionHandler *handler, std::string selection, std::string time); virtual ~Subscription(); int subscribe(TCPSession &session); @@ -30,7 +30,7 @@ namespace core virtual int onSubscribe(TCPSession &session); int event(std::stringstream &out); - bool subscriptionOwner(coreutils::MString *alias, std::string selection); + bool subscriptionOwner(coreutils::MString alias, std::string selection); bool ifSubscriber(TCPSession &session); bool subInvite(TCPSession &session); @@ -40,8 +40,9 @@ namespace core std::string id; std::string mode; - coreutils::MString *owner; - + coreutils::MString owner; + coreutils::MString subscriptionOwners; + std::string selectionOfOwnerForSubscription; std::string will; std::string ownership; std::string timer; diff --git a/SubscriptionManager.cpp b/SubscriptionManager.cpp index 1aadc67..acd8676 100644 --- a/SubscriptionManager.cpp +++ b/SubscriptionManager.cpp @@ -17,11 +17,9 @@ namespace core } bool SubscriptionManager::onClearSubscription(std::string temp, std::string key) { - temp = key; + // temp = key; temp = ""; key = ""; - // delete subscription; - return true; } @@ -41,9 +39,9 @@ namespace core temp = ""; } countSubscribed += subscription->unsubscribe(session); - if (subscription->owner == session.alias) + if (subscription->subscriptionOwners == session.alias) { - if (subscription->will == "*DIE") //--> This happens if the owner of the subscription sets it, or if not enough people in Vector -->// + if (subscription->selectionOfOwnerForSubscription == "*DIE") //--> This happens if the owner of the subscription sets it, or if not enough people in Vector -->// { onClearSubscription(temp, key); } @@ -60,11 +58,11 @@ namespace core for (auto subscribed = subscription->subscribers.begin(); subscribed < subscription->subscribers.end(); subscribed++) { - if (*subscribed == &session) + if ((*subscribed)->alias == session.alias) { subscription->subscribers.erase(subscribed++); } - subscription->subscriptionOwner((*subscribed)->alias, "*NEXT"); + subscription->subscriptionOwner(session.alias, "*NEXT"); } } } @@ -95,14 +93,16 @@ namespace core { handler = factory->getSubscriptionHandler(request[4].str()); } - coreutils::Log(coreutils::LOG_DEBUG_1) << request[1].str() << ":" << request[2].str(); + // coreutils::Log(coreutils::LOG_DEBUG_1) << request[1].str() << ":" << session.alias << ":" << request[2].str() << ":" << request[3].str() << ":" << request[4].str() << ":" << request[5].str() << ":" << request[6].str(); if (request[2].str() == "*OWNER") { + newSubscription = new Subscription(request[1].str(), session.alias, request[2].str(), request[3].str(), handler, request[5].str(), request[6].str()); subscriptions.insert(std::make_pair(request[1].str(), newSubscription)); - subscription->subscriptionOwner(session.alias, request[5].str()); + return 1; } + return 1; } else if (request[0].equals("catalog")) @@ -119,13 +119,12 @@ namespace core { std::stringstream out; coreutils::Log(coreutils::LOG_DEBUG_1) << request[2]; + invitee = (coreutils::MString *)&request[2]; - // invitee = (coreutils::MString *)&request[2]; - - // TCPSession *tempSession = session.server.getSessionByAlias(invitee); - // std::stringstream temp; - // temp << "invite:" << request[1] << ":" << invitee; - // tempSession->write(temp.str()); + TCPSession *tempSession = session.server.getSessionByAlias(invitee); + std::stringstream temp; + temp << "invite:" << request[1] << ":" << invitee; + tempSession->write(temp.str()); return 1; } diff --git a/TCPSession.cpp b/TCPSession.cpp index ea1dc7b..075f768 100644 --- a/TCPSession.cpp +++ b/TCPSession.cpp @@ -9,11 +9,9 @@ namespace core TCPSession::TCPSession(EPoll &ePoll, TCPServer &server, std::string text) : TCPSocket(ePoll, text), server(server) { - uuid_t uuidObject; - uuid_generate(uuidObject); - // std::string aaUuid = {uuidObject, uuidObject + 16}; - coreutils::Log(coreutils::LOG_DEBUG_1) << uuidObject; - alias = (coreutils::MString *)uuidObject; + uuid_t uuid; + uuid_generate(uuid); + alias = coreutils::MString((char *)uuid, 26); } TCPSession::~TCPSession() @@ -40,7 +38,7 @@ namespace core bool TCPSession::compareAlias(coreutils::MString &alias) { - return this->alias = &alias; + return this->alias == alias; } void TCPSession::onRegistered() diff --git a/TCPSession.h b/TCPSession.h index 9c9d8d5..f0c6e5f 100644 --- a/TCPSession.h +++ b/TCPSession.h @@ -76,18 +76,15 @@ namespace core char uuid[37]; /// - /// alias is a void pointer that can be set to point to any object that identifies - /// this session uniquely. Using this approach, inheriting objects can determine - /// how it knows the contacts that this server manages. + /// alias is a MString that can be set to any string of characters that identifies + /// this session uniquely. Alias's should be unique between sessions. /// - coreutils::MString *alias; + coreutils::MString alias; /// /// /// - - /// /// /// diff --git a/output/main b/output/main index af2a520..7413aef 100755 Binary files a/output/main and b/output/main differ