?
This commit is contained in:
1 parent
fd70c79282
commit
db199eaec3
218 files changed
+15584
-295
No files matched your search
@@ -0,0 +1,75 @@
|
||||
#include "Subscription.h"
|
||||
#include "TCPSession.h"
|
||||
#include "Log.h"
|
||||
#include <algorithm>
|
||||
|
||||
namespace core
|
||||
{
|
||||
|
||||
Subscription::Subscription(std::string id, std::string mode)
|
||||
: id(id), mode(mode), owner(NULL) {}
|
||||
|
||||
Subscription::Subscription(std::string id, TCPSession &session, std::string mode)
|
||||
: id(id), mode(mode), owner(&session) {}
|
||||
|
||||
Subscription::~Subscription()
|
||||
{
|
||||
std::stringstream out;
|
||||
out << "cancel:" << id << std::endl;
|
||||
for (auto subscriber : subscribers)
|
||||
{
|
||||
subscriber->write(out.str());
|
||||
}
|
||||
}
|
||||
|
||||
int Subscription::subscribe(TCPSession &session)
|
||||
{
|
||||
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)
|
||||
{
|
||||
if(handler)
|
||||
handler->process(request, out, session);
|
||||
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;
|
||||
}
|
||||
|
||||
void setHandler(SubscriptionHandler *handler) {
|
||||
this->handler = handler;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in new issue
Block a user