#include "Subscription.h" #include "Log.h" #include "TCPSession.h" #include namespace core { Subscription::Subscription(std::string id, std::string mode) : id(id), mode(mode), owner(NULL), handler(NULL) {} Subscription::Subscription(std::string id, TCPSession &session, std::string mode) : id(id), mode(mode), owner(&session), handler(NULL) {} Subscription::Subscription(std::string id, TCPSession &session, std::string mode, SubscriptionHandler *handler) : id(id), mode(mode), owner(&session), handler(handler) { } Subscription::~Subscription() { std::stringstream out; out << "cancel:" << id << std::endl; for (auto subscriber : subscribers) { subscriber->write(out.str()); } } int Subscription::subscribe(TCPSession &session) { if (handler) handler->onSubscribe(session); else onSubscribe(session); subscribers.push_back(&session); return 1; } int Subscription::unsubscribe(TCPSession &session) { for (auto subscriber = subscribers.begin(); subscriber < subscribers.end(); ++subscriber) { if (*subscriber == &session) { subscribers.erase(subscriber++); return 1; } } return 0; } int Subscription::process(coreutils::ZString &request, std::stringstream &out, TCPSession &session) { // std::cout << "(" << handler << ")" << std::endl; if (handler) handler->process(request, out, session, this); else out << "event:" << request[1] << ":" << request[2] << std::endl; return 1; } int Subscription::event(std::stringstream &out) { for (auto subscriber = subscribers.begin(); subscriber < subscribers.end(); ++subscriber) (*subscriber)->write(out.str()); return 1; } bool Subscription::ifSubscriber(TCPSession &session) { return (std::find(subscribers.begin(), subscribers.end(), &session) != subscribers.end()); } int Subscription::onSubscribe(TCPSession &session) { return 0; } bool Subscription::subInvite(TCPSession &session) { return 0; } // void Subscription::setHandler(SubscriptionHandler *handlers) // { // handler = handlers; // coreutils::Log(coreutils::LOG_DEBUG_1) << "Test Test"; // } }