merged in publish handlers.
This commit is contained in:
commit
d8eb3d7bb2
3
.gitignore
vendored
3
.gitignore
vendored
@ -9,3 +9,6 @@ docs/latex/
|
|||||||
docs/html
|
docs/html
|
||||||
*/*.ipch
|
*/*.ipch
|
||||||
*/mmap_address.bin
|
*/mmap_address.bin
|
||||||
|
.history/*
|
||||||
|
html
|
||||||
|
latex
|
@ -1,100 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core {
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, SubscriptionHandler *handler) {
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
handlers.
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(std::string name, SubscriptionHandler &handler) {
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session) {
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for(auto [key, subscription] : subscriptions) {
|
|
||||||
if(temp != "") {
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if(subscription->owner == &session) {
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(temp != "") {
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session) {
|
|
||||||
if(request[0].equals("publish")) {
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
return 1;
|
|
||||||
} else if(request[0].equals("catalog")) {
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for(auto const& [key, subscription] : subscriptions) {
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if(request[1].equals(subscription->id)) {
|
|
||||||
if(request[0].equals("unpublish")) {
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
} else if(request[0].equals("subscribe")) {
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
} else if(request[0].equals("unsubscribe")) {
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
} else if(request[0].equals("event")) {
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if(subscription->mode == "*ANYONE") {
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
} else if(subscription->mode == "*SUBSCRIBERS") {
|
|
||||||
if(subscription->ifSubscriber(session)) {
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
} else if(subscription->mode == "*AUTHOR") {
|
|
||||||
if(subscription->owner == &session) {
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,127 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, SubscriptionHandler *handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
handlers.lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(std::string name, SubscriptionHandler &handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,127 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, SubscriptionHandler *handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
handler.lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(SubscriptionHandler &handler, std::string name)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,128 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, SubscriptionHandler *handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
|
|
||||||
handler.lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(SubscriptionHandler &handler, std::string name)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,128 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, SubscriptionHandler *handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
|
|
||||||
handlers.lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(SubscriptionHandler &handler, std::string name)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,128 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, SubscriptionHandler *handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(SubscriptionHandler &handler, std::string name)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,128 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, SubscriptionHandler *handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(std::string name, SubscriptionHandler &handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,127 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, SubscriptionHandler *handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(std::string name, SubscriptionHandler &handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,141 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, std::string handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
if (handler)
|
|
||||||
subscription.setHandler = handler[handler];
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(SubscriptionHandler &handler, std::string name)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
if (request.getList().size() > 2)
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
else
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str(), request[3].str());
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,141 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, std::string handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
if (handler)
|
|
||||||
subscription->setHandler = handler[handler];
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(SubscriptionHandler &handler, std::string name)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
if (request.getList().size() > 2)
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
else
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str(), request[3].str());
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,141 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, std::string handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
if (handlers)
|
|
||||||
subscription->setHandler = handler[handler];
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(SubscriptionHandler &handler, std::string name)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
if (request.getList().size() > 2)
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
else
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str(), request[3].str());
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,141 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, std::string handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
if (handler)
|
|
||||||
subscription->setHandler = handler[handler];
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(SubscriptionHandler &handler, std::string name)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
if (request.getList().size() > 2)
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
else
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str(), request[3].str());
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,141 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, std::string handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
if (handler)
|
|
||||||
subscription->setHandler = handlers[handler];
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(SubscriptionHandler &handler, std::string name)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
if (request.getList().size() > 2)
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
else
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str(), request[3].str());
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,141 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, std::string handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
if (handler)
|
|
||||||
subscription->setHandler(handlers[handler]);
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(SubscriptionHandler &handler, std::string name)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
if (request.getList().size() > 2)
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
else
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str(), request[3].str());
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,141 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, std::string handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
if (handler)
|
|
||||||
subscription->setHandler(*handlers[handler]);
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(SubscriptionHandler &handler, std::string name)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
if (request.getList().size() > 2)
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
else
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str(), request[3].str());
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,141 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, std::string handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
if (handler)
|
|
||||||
subscription->setHandler(handlers[handler]);
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(SubscriptionHandler &handler, std::string name)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
if (request.getList().size() > 2)
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
else
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str(), request[3].str());
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,141 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, std::string handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
if (handler != NULL)
|
|
||||||
subscription->setHandler(handlers[handler]);
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(SubscriptionHandler &handler, std::string name)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
if (request.getList().size() > 2)
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
else
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str(), request[3].str());
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,141 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, std::string handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
if (handler == NULL)
|
|
||||||
subscription->setHandler(handlers[handler]);
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(SubscriptionHandler &handler, std::string name)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
if (request.getList().size() > 2)
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
else
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str(), request[3].str());
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,141 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, std::string handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
if (handler = !NULL)
|
|
||||||
subscription->setHandler(handlers[handler]);
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(SubscriptionHandler &handler, std::string name)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
if (request.getList().size() > 2)
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
else
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str(), request[3].str());
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,141 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, std::string handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
if (handler)
|
|
||||||
subscription->setHandler(handlers[handler]);
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(SubscriptionHandler &handler, std::string name)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
if (request.getList().size() > 2)
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
else
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str(), request[3].str());
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,142 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, std::string handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
if (handler)
|
|
||||||
subscription.setHandler(handlers[handler]);
|
|
||||||
subscription->setHandler();
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(SubscriptionHandler &handler, std::string name)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
if (request.getList().size() > 2)
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
else
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str(), request[3].str());
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,142 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, std::string handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
if (handler)
|
|
||||||
subscription.setHandler(handlers[handler]);
|
|
||||||
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(std::string name, SubscriptionHandler &handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
if (request.getList().size() > 2)
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
else
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str(), request[3].str());
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,142 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, std::string handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
if (handlers != NULL)
|
|
||||||
subscription.setHandler(handlers[handler]);
|
|
||||||
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(std::string name, SubscriptionHandler &handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
if (request.getList().size() > 2)
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
else
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str(), request[3].str());
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,142 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, std::string handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
if (handlers = NULL)
|
|
||||||
subscription.setHandler(handlers[handler]);
|
|
||||||
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(std::string name, SubscriptionHandler &handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
if (request.getList().size() > 2)
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
else
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str(), request[3].str());
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,142 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, std::string handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
if (handlers == NULL)
|
|
||||||
subscription.setHandler(handlers[handler]);
|
|
||||||
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(std::string name, SubscriptionHandler &handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
if (request.getList().size() > 2)
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
else
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str(), request[3].str());
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,142 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, std::string handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
if (handlers)
|
|
||||||
subscription.setHandler(handlers[handler]);
|
|
||||||
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(std::string name, SubscriptionHandler &handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
if (request.getList().size() > 2)
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
else
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str(), request[3].str());
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,142 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, std::string handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
if (*handlers)
|
|
||||||
subscription.setHandler(handlers[handler]);
|
|
||||||
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(std::string name, SubscriptionHandler &handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
if (request.getList().size() > 2)
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
else
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str(), request[3].str());
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,142 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, std::string handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
if (handlers)
|
|
||||||
subscription.setHandler(handlers[handler]);
|
|
||||||
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(std::string name, SubscriptionHandler &handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
if (request.getList().size() > 2)
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
else
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str(), request[3].str());
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,142 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, std::string handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
if (handlers.empty())
|
|
||||||
subscription.setHandler(handlers[handler]);
|
|
||||||
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(std::string name, SubscriptionHandler &handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
if (request.getList().size() > 2)
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
else
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str(), request[3].str());
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,142 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, std::string handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
if (handlers.find(handler))
|
|
||||||
subscription.setHandler(handlers[handler]);
|
|
||||||
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(std::string name, SubscriptionHandler &handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
if (request.getList().size() > 2)
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
else
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str(), request[3].str());
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,142 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, std::string handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
if (handlers.find(handler) == handlers.end())
|
|
||||||
subscription.setHandler(handlers[handler]);
|
|
||||||
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(std::string name, SubscriptionHandler &handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
if (request.getList().size() > 2)
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
else
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str(), request[3].str());
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,141 +0,0 @@
|
|||||||
#include "Log.h"
|
|
||||||
#include "SubscriptionManager.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, std::string handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
subscription.setHandler(handlers[handler]);
|
|
||||||
lock.unlock();
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(std::string name, SubscriptionHandler &handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
if (request.getList().size() > 2)
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
else
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str(), request[3].str());
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,146 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, std::string handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
if (handlers.find(handler) == handlers.end())
|
|
||||||
{
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
subscription.setHandler(handlers[handler]);
|
|
||||||
lock.unlock();
|
|
||||||
}
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(std::string name, SubscriptionHandler &handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
if (request.getList().size() > 2)
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
else
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str(), request[3].str());
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,146 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, std::string handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
if (handlers.find(handler) == handlers.end())
|
|
||||||
{
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
subscription.setHandler(handlers[handler]);
|
|
||||||
lock.unlock();
|
|
||||||
}
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(std::string name, SubscriptionHandler &handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
if (request.getList().size() > 2)
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
else
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str(), request[3].str());
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,146 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, std::string handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
if (handlers.find(handler) == handlers.end())
|
|
||||||
{
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
subscription.setHandler(handlers[handler]);
|
|
||||||
lock.unlock();
|
|
||||||
}
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(std::string name, SubscriptionHandler &handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
if (request.getList().size() > 2)
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
else
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str(), request[3].str());
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,146 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, std::string handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
if (handlers.find(handler) == handlers.end())
|
|
||||||
{
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
subscription.setHandler(handlers[handler]);
|
|
||||||
lock.unlock();
|
|
||||||
}
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(std::string name, SubscriptionHandler &handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
if (request.getList().size() > 2)
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
else
|
|
||||||
Subscription *newSubscriptions = new Subscription(request[1].str(), session, request[2].str(), request[3].str());
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,146 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, std::string handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
if (handlers.find(handler) == handlers.end())
|
|
||||||
{
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
subscription.setHandler(handlers[handler]);
|
|
||||||
lock.unlock();
|
|
||||||
}
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(std::string name, SubscriptionHandler &handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
if (request.getList().size() > 2)
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
else
|
|
||||||
Subscription *newSubscriptions = new Subscription(request[1].str(), session, request[2].str(), request[3].str());
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscriptions));
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,146 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, std::string handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
if (handlers.find(handler) == handlers.end())
|
|
||||||
{
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
subscription.setHandler(handlers[handler]);
|
|
||||||
lock.unlock();
|
|
||||||
}
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(std::string name, SubscriptionHandler &handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
if (request.getList().size() > 2)
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
else
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str(), request[3].str());
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,142 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, std::string handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
if (handler)
|
|
||||||
subscription.setHandler(handlers[handler]);
|
|
||||||
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(std::string name, SubscriptionHandler &handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
if (request.getList().size() > 2)
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
else
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str(), request[3].str());
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,142 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, std::string handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
if (handler)
|
|
||||||
subscription.setHandler = handlers[handler];
|
|
||||||
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(std::string name, SubscriptionHandler &handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
if (request.getList().size() > 2)
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
else
|
|
||||||
Subscription *newSubscription = new Subscription(request[1].str(), session, request[2].str(), request[3].str());
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,142 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include "Subscription.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, std::string handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
subscription.setHandler(handlers[handler]);
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(std::string name, SubscriptionHandler &handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
Subscription *newSubscription;
|
|
||||||
if (request.getList().size() > 2)
|
|
||||||
newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
else
|
|
||||||
newSubscription = new Subscription(request[1].str(), session, request[2].str(), request[3].str());
|
|
||||||
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,142 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include "Subscription.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, std::string handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
subscription.setHandler(handlers[handler]);
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(std::string name, SubscriptionHandler &handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
Subscription *newSubscription;
|
|
||||||
// if (request.getList().size() > 2)
|
|
||||||
// newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
// else
|
|
||||||
newSubscription = new Subscription(request[1].str(), session, request[2].str(), request[3].str());
|
|
||||||
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,146 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include "Subscription.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, std::string handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
subscription.setHandler(handlers[handler]);
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(std::string name, SubscriptionHandler &handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
Subscription *newSubscription;
|
|
||||||
if (request.getList().size() > 2)
|
|
||||||
{
|
|
||||||
newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
newSubscription = new Subscription(request[1].str(), session, request[2].str(), request[3].str());
|
|
||||||
}
|
|
||||||
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,146 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include "Subscription.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, std::string handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
subscription.setHandler(handlers[handler]);
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(std::string name, SubscriptionHandler &handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
Subscription *newSubscription;
|
|
||||||
if (request.getList().size() > 3)
|
|
||||||
{
|
|
||||||
newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
newSubscription = new Subscription(request[1].str(), session, request[2].str(), request[3].str());
|
|
||||||
}
|
|
||||||
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,146 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include "Subscription.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, std::string handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
subscription.setHandler(handlers[handler]);
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(std::string name, SubscriptionHandler &handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
Subscription *newSubscription;
|
|
||||||
if (request.getList().size() > 2)
|
|
||||||
{
|
|
||||||
newSubscription = new Subscription(request[1].str(), session, request[2].str(), request[3].str());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
}
|
|
||||||
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,146 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include "Subscription.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, std::string handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
subscription.setHandler(handlers[handler]);
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(std::string name, SubscriptionHandler &handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
|
|
||||||
if (request.getList().size() > 2)
|
|
||||||
{
|
|
||||||
newSubscription = new Subscription(request[1].str(), session, request[2].str(), request[3].str());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
}
|
|
||||||
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,146 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include "Subscription.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, std::string handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
subscription.setHandler(handlers[handler]);
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(std::string name, SubscriptionHandler &handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
|
|
||||||
if (request.str().getList().size() > 2)
|
|
||||||
{
|
|
||||||
newSubscription = new Subscription(request[1].str(), session, request[2].str(), request[3].str());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
}
|
|
||||||
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,146 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include "Subscription.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, std::string handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
subscription.setHandler(handlers[handler]);
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(std::string name, SubscriptionHandler &handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
|
|
||||||
if (request.getLength.size() > 2)
|
|
||||||
{
|
|
||||||
newSubscription = new Subscription(request[1].str(), session, request[2].str(), request[3].str());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
}
|
|
||||||
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,146 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include "Subscription.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, std::string handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
subscription.setHandler(handlers[handler]);
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(std::string name, SubscriptionHandler &handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
|
|
||||||
if (request.getList().size() > 2)
|
|
||||||
{
|
|
||||||
newSubscription = new Subscription(request[1].str(), session, request[2].str(), request[3].str());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
}
|
|
||||||
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,146 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include "Subscription.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, std::string handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
subscription.setHandler(handlers[handler]);
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(std::string name, SubscriptionHandler &handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
|
|
||||||
if (request.getList().size() > 2)
|
|
||||||
{
|
|
||||||
newSubscription = new Subscription(request[1].str(), session, request[2].str(), request[3].str());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
}
|
|
||||||
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,146 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include "Subscription.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, std::string handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
subscription.setHandler(handlers[handler]);
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(std::string name, SubscriptionHandler &handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
|
|
||||||
if (request.getList().size() > 2)
|
|
||||||
{
|
|
||||||
// newSubscription = new Subscription(request[1].str(), session, request[2].str(), request[3].str());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
}
|
|
||||||
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,146 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include "Subscription.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, std::string handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
subscription.setHandler(handlers[handler]);
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(std::string name, SubscriptionHandler &handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
|
|
||||||
if (request.getList().size() > 2)
|
|
||||||
{
|
|
||||||
newSubscription = new Subscription(request[1].str(), session, request[2].str(), request[3].str());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
}
|
|
||||||
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,146 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include "Subscription.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, std::string handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
subscription.setHandler(handlers[handler]);
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(std::string name, SubscriptionHandler &handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
|
|
||||||
if (request.getList().size() > 2)
|
|
||||||
{
|
|
||||||
newSubscription = new Subscription(request[1].str(), session, request[2].str(), request[3].str());
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,147 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include "Subscription.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, std::string handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
subscription.setHandler(handlers[handler]);
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(std::string name, SubscriptionHandler &handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
|
|
||||||
if (request.getList().size() > 2)
|
|
||||||
{
|
|
||||||
newSubscription = new Subscription(request[1].str(), session, request[2].str(), request[3].str());
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,146 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include "Subscription.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, std::string handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
subscription.setHandler(handlers[handler]);
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(std::string name, SubscriptionHandler &handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
|
|
||||||
if (request.getList().size() > 2)
|
|
||||||
{
|
|
||||||
|
|
||||||
newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
newSubscription = new Subscription(request[1].str(), session, request[2].str(), request[3].str());
|
|
||||||
}
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,146 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include "Subscription.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, std::string handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
subscription.setHandler(handlers[handler]);
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(std::string name, SubscriptionHandler &handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
|
|
||||||
if (request.getList().size() > 3)
|
|
||||||
{
|
|
||||||
|
|
||||||
newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
newSubscription = new Subscription(request[1].str(), session, request[2].str(), request[3].str());
|
|
||||||
}
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,146 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include "Subscription.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, std::string handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
subscription.setHandler(handlers[handler]);
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(std::string name, SubscriptionHandler &handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
|
|
||||||
if (request.getList().size() >= 2)
|
|
||||||
{
|
|
||||||
|
|
||||||
newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
newSubscription = new Subscription(request[1].str(), session, request[2].str(), request[3].str());
|
|
||||||
}
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,146 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include "Subscription.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, std::string handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
subscription.setHandler(handlers[handler]);
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(std::string name, SubscriptionHandler &handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
|
|
||||||
if (request.getList().size() > 2)
|
|
||||||
{
|
|
||||||
|
|
||||||
newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
newSubscription = new Subscription(request[1].str(), session, request[2].str(), request[3].str());
|
|
||||||
}
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,143 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include "Subscription.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, std::string handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
subscription.setHandler(handlers[handler]);
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(std::string name, SubscriptionHandler &handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
|
|
||||||
if (request.getList().size() > 2)
|
|
||||||
|
|
||||||
newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
else
|
|
||||||
newSubscription = new Subscription(request[1].str(), session, request[2].str(), request[3].str());
|
|
||||||
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,143 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include "Subscription.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, std::string handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
subscription.setHandler(handlers[handler]);
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(std::string name, SubscriptionHandler &handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
|
|
||||||
if (request.getList().size() >= 2)
|
|
||||||
|
|
||||||
newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
else
|
|
||||||
newSubscription = new Subscription(request[1].str(), session, request[2].str(), request[3].str());
|
|
||||||
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,144 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include "Subscription.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, std::string handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
subscription.setHandler(handlers[handler]);
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(std::string name, SubscriptionHandler &handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
|
|
||||||
if (request.getList().size() >= 2)
|
|
||||||
{
|
|
||||||
newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
newSubscription = new Subscription(request[1].str(), session, request[2].str(), request[3].str());
|
|
||||||
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,146 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include "Subscription.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, std::string handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
subscription.setHandler(handlers[handler]);
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(std::string name, SubscriptionHandler &handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
|
|
||||||
if (request.getList().size() >= 2)
|
|
||||||
{
|
|
||||||
newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
newSubscription = new Subscription(request[1].str(), session, request[2].str(), request[3].str());
|
|
||||||
}
|
|
||||||
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,146 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include "Subscription.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, std::string handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
subscription.setHandler(handlers[handler]);
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(std::string name, SubscriptionHandler &handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
|
|
||||||
if (request.getList().size() > 2)
|
|
||||||
{
|
|
||||||
newSubscription = new Subscription(request[1].str(), session, request[2].str(), request[3].str());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
}
|
|
||||||
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,147 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include "Subscription.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, std::string handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
subscription.setHandler(handlers[handler]);
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(std::string name, SubscriptionHandler &handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
subscription.setHandler(handlers[handler]);
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
|
|
||||||
if (request.getList().size() > 2)
|
|
||||||
{
|
|
||||||
newSubscription = new Subscription(request[1].str(), session, request[2].str(), request[3].str());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
}
|
|
||||||
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,147 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include "Subscription.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, std::string handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
subscription.setHandler(handlers[handler]);
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(std::string name, SubscriptionHandler &handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
|
|
||||||
if (request.getList().size() > 2)
|
|
||||||
{
|
|
||||||
newSubscription = new Subscription(request[1].str(), session, request[2].str(), request[3].str());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
}
|
|
||||||
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,147 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include "Subscription.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, std::string handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
subscription.setHandler(handlers[handler]);
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(std::string name, SubscriptionHandler &handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
subscription.setHandler(handlers["handler"]);
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
|
|
||||||
if (request.getList().size() > 2)
|
|
||||||
{
|
|
||||||
newSubscription = new Subscription(request[1].str(), session, request[2].str(), request[3].str());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
}
|
|
||||||
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,147 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include "Subscription.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, std::string handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
subscription.setHandler(handlers[handler]);
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(std::string name, SubscriptionHandler &handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
|
|
||||||
if (request.getList().size() > 2)
|
|
||||||
{
|
|
||||||
newSubscription = new Subscription(request[1].str(), session, request[2].str(), request[3].str());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
}
|
|
||||||
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,147 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include "Subscription.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, std::string handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
subscription.setHandler(handlers[handler]);
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(std::string name, SubscriptionHandler &handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
|
|
||||||
if (request.getList().size() > 2)
|
|
||||||
{
|
|
||||||
newSubscription = new Subscription(request[1].str(), session, request[2].str(), request[3].str());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
}
|
|
||||||
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,147 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include "Subscription.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, std::string handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
subscription.setHandler(handlers[handler]);
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(std::string name, SubscriptionHandler &handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
subscription->setHandler(handlers[name]);
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
|
|
||||||
if (request.getList().size() > 2)
|
|
||||||
{
|
|
||||||
newSubscription = new Subscription(request[1].str(), session, request[2].str(), request[3].str());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
}
|
|
||||||
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,147 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include "Subscription.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, std::string handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
subscription.setHandler(handlers[handler]);
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(std::string name, SubscriptionHandler &handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
subscription->setHandler(handlers[name]);
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
|
|
||||||
if (request.getList().size() > 2)
|
|
||||||
{
|
|
||||||
newSubscription = new Subscription(request[1].str(), session, request[2].str(), request[3].str());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
}
|
|
||||||
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,148 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include "Subscription.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, std::string handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
subscription.setHandler(handlers[handler]);
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(std::string name, SubscriptionHandler &handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_1) << "Adding handler to SubscriptionManager for " << name;
|
|
||||||
subscription->setHandler(handler);
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
|
|
||||||
if (request.getList().size() > 2)
|
|
||||||
{
|
|
||||||
newSubscription = new Subscription(request[1].str(), session, request[2].str(), request[3].str());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
}
|
|
||||||
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,148 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include "Subscription.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, std::string handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
subscription.setHandler(handlers[handler]);
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(std::string name, SubscriptionHandler &handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_1) << "Adding handler to SubscriptionManager for " << name;
|
|
||||||
subscription->setHandler(&handler);
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
|
|
||||||
if (request.getList().size() > 2)
|
|
||||||
{
|
|
||||||
newSubscription = new Subscription(request[1].str(), session, request[2].str(), request[3].str());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
}
|
|
||||||
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,148 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include "Subscription.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, std::string handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
subscription.setHandler(handlers[handler]);
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(std::string name, SubscriptionHandler &handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, &handler));
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_1) << "Adding handler to SubscriptionManager for " << name;
|
|
||||||
subscription->setHandler(handlers[name]);
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
|
|
||||||
if (request.getList().size() > 2)
|
|
||||||
{
|
|
||||||
newSubscription = new Subscription(request[1].str(), session, request[2].str(), request[3].str());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
}
|
|
||||||
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,148 +0,0 @@
|
|||||||
#include "SubscriptionManager.h"
|
|
||||||
#include "Log.h"
|
|
||||||
#include "Subscription.h"
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
SubscriptionManager::SubscriptionManager() {}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::add(Subscription &subscription, std::string handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
subscriptions.insert(std::make_pair(subscription.id, &subscription));
|
|
||||||
subscription.setHandler(handlers[handler]);
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::addHandler(std::string name, SubscriptionHandler *handler)
|
|
||||||
{
|
|
||||||
lock.lock();
|
|
||||||
handlers.insert(std::make_pair(name, handler));
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_1) << "Adding handler to SubscriptionManager for " << name;
|
|
||||||
subscription->setHandler(handlers[name]);
|
|
||||||
lock.unlock();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::removeSessionSubscriptions(TCPSession &session)
|
|
||||||
{
|
|
||||||
int countSubscribed = 0;
|
|
||||||
int countPublished = 0;
|
|
||||||
|
|
||||||
lock.lock();
|
|
||||||
std::string temp = "";
|
|
||||||
for (auto [key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
countSubscribed += subscription->unsubscribe(session);
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
temp = key;
|
|
||||||
delete subscription;
|
|
||||||
++countPublished;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (temp != "")
|
|
||||||
{
|
|
||||||
subscriptions.erase(temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Removed session from " << countSubscribed << " subscription(s).";
|
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Cancelled " << countPublished << " channel(s) for session.";
|
|
||||||
lock.unlock();
|
|
||||||
return countSubscribed;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SubscriptionManager::processCommand(coreutils::ZString &request, TCPSession &session)
|
|
||||||
{
|
|
||||||
if (request[0].equals("publish"))
|
|
||||||
{
|
|
||||||
|
|
||||||
if (request.getList().size() > 2)
|
|
||||||
{
|
|
||||||
newSubscription = new Subscription(request[1].str(), session, request[2].str(), request[3].str());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
newSubscription = new Subscription(request[1].str(), session, request[2].str());
|
|
||||||
}
|
|
||||||
|
|
||||||
subscriptions.insert(std::make_pair(request[1].str(), newSubscription));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (request[0].equals("catalog"))
|
|
||||||
{
|
|
||||||
session.out << ":catalog:";
|
|
||||||
for (auto const &[key, subscription] : subscriptions)
|
|
||||||
{
|
|
||||||
session.out << subscription->id << ";";
|
|
||||||
}
|
|
||||||
session.out << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto subscription = subscriptions[request[1].str()];
|
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
|
||||||
{
|
|
||||||
if (request[0].equals("unpublish"))
|
|
||||||
{
|
|
||||||
subscriptions.erase(request[1].str());
|
|
||||||
}
|
|
||||||
else if (request[0].equals("subscribe"))
|
|
||||||
{
|
|
||||||
subscription->subscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("unsubscribe"))
|
|
||||||
{
|
|
||||||
subscription->unsubscribe(session);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (request[0].equals("event"))
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
subscription->process(request, out, session);
|
|
||||||
if (subscription->mode == "*ANYONE")
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*SUBSCRIBERS")
|
|
||||||
{
|
|
||||||
if (subscription->ifSubscriber(session))
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
|
||||||
{
|
|
||||||
if (subscription->owner == &session)
|
|
||||||
{
|
|
||||||
subscription->event(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -2,18 +2,21 @@
|
|||||||
#define __SessionFilter_h__
|
#define __SessionFilter_h__
|
||||||
|
|
||||||
//#include "Session.h"
|
//#include "Session.h"
|
||||||
|
#include "Object.h"
|
||||||
|
|
||||||
namespace core {
|
namespace core
|
||||||
|
{
|
||||||
|
|
||||||
class TCPSession;
|
class TCPSession;
|
||||||
|
|
||||||
class SessionFilter : public Object {
|
class SessionFilter : public Object
|
||||||
|
{
|
||||||
|
|
||||||
public:
|
public:
|
||||||
virtual bool test(TCPSession &session) {
|
virtual bool test(TCPSession &session)
|
||||||
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
44
Socket.cpp
44
Socket.cpp
@ -1,14 +1,16 @@
|
|||||||
#include "EPoll.h"
|
|
||||||
#include "Socket.h"
|
#include "Socket.h"
|
||||||
|
#include "EPoll.h"
|
||||||
#include "Exception.h"
|
#include "Exception.h"
|
||||||
#include "ZString.h"
|
|
||||||
#include "Log.h"
|
#include "Log.h"
|
||||||
|
#include "ZString.h"
|
||||||
|
|
||||||
namespace core {
|
namespace core
|
||||||
|
{
|
||||||
|
|
||||||
void sigpipe_handler(int unused) {}
|
void sigpipe_handler(int unused) {}
|
||||||
|
|
||||||
Socket::Socket(EPoll &ePoll, std::string text) : ePoll(ePoll), text(text) {
|
Socket::Socket(EPoll &ePoll, std::string text) : ePoll(ePoll), text(text) {
|
||||||
|
coreutils::Log(coreutils::LOG_DEBUG_2) << "Socket object created [" << text << "].";
|
||||||
buffer = (char *)malloc(4096);
|
buffer = (char *)malloc(4096);
|
||||||
length = 4096;
|
length = 4096;
|
||||||
}
|
}
|
||||||
@ -17,21 +19,22 @@ namespace core {
|
|||||||
shutDown = true;
|
shutDown = true;
|
||||||
onUnregister();
|
onUnregister();
|
||||||
ePoll.unregisterSocket(this);
|
ePoll.unregisterSocket(this);
|
||||||
|
coreutils::Log(coreutils::LOG_DEBUG_4) << "Free on socket " << descriptor;
|
||||||
free(buffer);
|
free(buffer);
|
||||||
if(descriptor == -1)
|
if(descriptor == -1)
|
||||||
return;
|
return;
|
||||||
close(descriptor);
|
close(descriptor);
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_1) << text << " has ended (" << descriptor << ").";
|
coreutils::Log(coreutils::LOG_DEBUG_1) << text << " has ended (" << descriptor << ").";
|
||||||
sleep(1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Socket::setDescriptor(int descriptor) {
|
void Socket::setDescriptor(int descriptor)
|
||||||
if((descriptor == -1) && (errno == 24)) {
|
{
|
||||||
|
if ((descriptor == -1) && (errno == 24))
|
||||||
|
{
|
||||||
shutdown("Too many files open");
|
shutdown("Too many files open");
|
||||||
throw coreutils::Exception("Too many files open. Refusing connection.");
|
throw coreutils::Exception("Too many files open. Refusing connection.");
|
||||||
}
|
}
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_1) << text << " has started (" << descriptor << ").";
|
coreutils::Log(coreutils::LOG_DEBUG_1) << text << " has started (" << descriptor << ").";
|
||||||
// coreutils::Log(coreutils::LOG_DEBUG_3) << "Descriptor set to " << descriptor << " for Socket.";
|
|
||||||
if(descriptor < 3)
|
if(descriptor < 3)
|
||||||
throw coreutils::Exception("Descriptor out of range", __FILE__, __LINE__);
|
throw coreutils::Exception("Descriptor out of range", __FILE__, __LINE__);
|
||||||
this->descriptor = descriptor;
|
this->descriptor = descriptor;
|
||||||
@ -40,16 +43,19 @@ namespace core {
|
|||||||
onRegistered();
|
onRegistered();
|
||||||
}
|
}
|
||||||
|
|
||||||
int Socket::getDescriptor() {
|
int Socket::getDescriptor()
|
||||||
|
{
|
||||||
return descriptor;
|
return descriptor;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Socket::setBufferSize(int length) {
|
void Socket::setBufferSize(int length)
|
||||||
|
{
|
||||||
this->length = length;
|
this->length = length;
|
||||||
buffer = (char *)realloc(buffer, length);
|
buffer = (char *)realloc(buffer, length);
|
||||||
}
|
}
|
||||||
|
|
||||||
int Socket::getBufferSize() {
|
int Socket::getBufferSize()
|
||||||
|
{
|
||||||
return length;
|
return length;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -83,11 +89,13 @@ namespace core {
|
|||||||
return !shutDown;
|
return !shutDown;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Socket::onDataReceived(std::string data) {
|
void Socket::onDataReceived(std::string data)
|
||||||
|
{
|
||||||
throw coreutils::Exception("Need to override onDataReceived.", __FILE__, __LINE__, -1);
|
throw coreutils::Exception("Need to override onDataReceived.", __FILE__, __LINE__, -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Socket::onDataReceived(coreutils::ZString &data) {
|
void Socket::onDataReceived(coreutils::ZString &data)
|
||||||
|
{
|
||||||
onDataReceived(std::string(data.getData(), data.getLength()));
|
onDataReceived(std::string(data.getData(), data.getLength()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -102,11 +110,13 @@ namespace core {
|
|||||||
coreutils::Log(coreutils::LOG_DEBUG_1) << zbuffer;
|
coreutils::Log(coreutils::LOG_DEBUG_1) << zbuffer;
|
||||||
onDataReceived(zbuffer);
|
onDataReceived(zbuffer);
|
||||||
}
|
}
|
||||||
else {
|
else
|
||||||
|
{
|
||||||
|
|
||||||
error = errno;
|
error = errno;
|
||||||
|
|
||||||
switch (error) {
|
switch (error)
|
||||||
|
{
|
||||||
|
|
||||||
// When a listening socket receives a connection
|
// When a listening socket receives a connection
|
||||||
// request we get one of these.
|
// request we get one of these.
|
||||||
@ -145,11 +155,13 @@ namespace core {
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Socket::output(std::stringstream &out) {
|
void Socket::output(std::stringstream &out)
|
||||||
|
{
|
||||||
out << "|" << descriptor << "|";
|
out << "|" << descriptor << "|";
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Socket::needsToWrite() {
|
bool Socket::needsToWrite()
|
||||||
|
{
|
||||||
return fifo.size() > 0;
|
return fifo.size() > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -27,7 +27,7 @@ namespace core
|
|||||||
|
|
||||||
int Subscription::subscribe(TCPSession &session)
|
int Subscription::subscribe(TCPSession &session)
|
||||||
{
|
{
|
||||||
if(handler)
|
if (handler)
|
||||||
handler->onSubscribe(session);
|
handler->onSubscribe(session);
|
||||||
else
|
else
|
||||||
onSubscribe(session);
|
onSubscribe(session);
|
||||||
@ -76,10 +76,16 @@ namespace core
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// void Subscription::setHandler(SubscriptionHandler *handlers)
|
bool Subscription::subInvite(TCPSession &session)
|
||||||
// {
|
{
|
||||||
// handler = handlers;
|
|
||||||
|
|
||||||
// coreutils::Log(coreutils::LOG_DEBUG_1) << "Test Test";
|
return 0;
|
||||||
// }
|
}
|
||||||
|
|
||||||
|
// void Subscription::setHandler(SubscriptionHandler *handlers)
|
||||||
|
// {
|
||||||
|
// handler = handlers;
|
||||||
|
|
||||||
|
// coreutils::Log(coreutils::LOG_DEBUG_1) << "Test Test";
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
@ -31,7 +31,9 @@ namespace core
|
|||||||
|
|
||||||
bool ifSubscriber(TCPSession &session);
|
bool ifSubscriber(TCPSession &session);
|
||||||
|
|
||||||
// void setHandler(SubscriptionHandler *handlers);
|
bool subInvite(TCPSession &session);
|
||||||
|
|
||||||
|
// void setHandler(SubscriptionHandler *handlers);
|
||||||
|
|
||||||
// int processCommand(coreutils::ZString &request, TCPSession &session) override;
|
// int processCommand(coreutils::ZString &request, TCPSession &session) override;
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
#include "SubscriptionManager.h"
|
#include "SubscriptionManager.h"
|
||||||
#include "Log.h"
|
#include "Log.h"
|
||||||
#include "Subscription.h"
|
#include "Subscription.h"
|
||||||
|
#include "TCPServer.h"
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
||||||
namespace core
|
namespace core
|
||||||
@ -77,7 +78,19 @@ namespace core
|
|||||||
session.out << std::endl;
|
session.out << std::endl;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
else if (request[0].equals("invite"))
|
||||||
|
{
|
||||||
|
std::stringstream out;
|
||||||
|
coreutils::Log(coreutils::LOG_DEBUG_1) << request[2];
|
||||||
|
std::string invitee = request[2].str();
|
||||||
|
TCPSession *tempSession = session.server.getSessionByAlias(&invitee);
|
||||||
|
std::stringstream temp;
|
||||||
|
// We need to utilize invite for different ways, group with people,and to generally invite into anything pertaining interaction////
|
||||||
|
/// with another player//
|
||||||
|
temp << "invite:" << request[1] << ":" << *(std::string *)session.alias;
|
||||||
|
tempSession->write(temp.str());
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
auto subscription = subscriptions[request[1].str()];
|
auto subscription = subscriptions[request[1].str()];
|
||||||
|
|
||||||
if (request[1].equals(subscription->id))
|
if (request[1].equals(subscription->id))
|
||||||
@ -96,6 +109,7 @@ namespace core
|
|||||||
subscription->unsubscribe(session);
|
subscription->unsubscribe(session);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (request[0].equals("event"))
|
else if (request[0].equals("event"))
|
||||||
{
|
{
|
||||||
std::stringstream out;
|
std::stringstream out;
|
||||||
@ -113,6 +127,7 @@ namespace core
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (subscription->mode == "*AUTHOR")
|
else if (subscription->mode == "*AUTHOR")
|
||||||
{
|
{
|
||||||
if (subscription->owner == &session)
|
if (subscription->owner == &session)
|
||||||
|
@ -1,12 +1,14 @@
|
|||||||
#include "TCPServer.h"
|
#include "TCPServer.h"
|
||||||
#include "EPoll.h"
|
#include "EPoll.h"
|
||||||
#include "TCPSession.h"
|
|
||||||
#include "Exception.h"
|
#include "Exception.h"
|
||||||
#include "Log.h"
|
#include "Log.h"
|
||||||
|
#include "TCPSession.h"
|
||||||
|
|
||||||
namespace core {
|
namespace core
|
||||||
|
{
|
||||||
|
|
||||||
TCPServer::TCPServer(EPoll &ePoll, IPAddress address, std::string delimiter, int depth, std::string text)
|
TCPServer::TCPServer(EPoll &ePoll, IPAddress address, std::string delimiter, int depth, std::string text)
|
||||||
|
<<<<<<< HEAD
|
||||||
: TCPSocket(ePoll, text), commands(delimiter, depth) {
|
: TCPSocket(ePoll, text), commands(delimiter, depth) {
|
||||||
|
|
||||||
commands.add(subscriptions, "publish");
|
commands.add(subscriptions, "publish");
|
||||||
@ -27,8 +29,32 @@ namespace core {
|
|||||||
throw coreutils::Exception("Error on listen to socket");
|
throw coreutils::Exception("Error on listen to socket");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
=======
|
||||||
|
: TCPSocket(ePoll, text), commands(delimiter, depth)
|
||||||
|
{
|
||||||
|
>>>>>>> subscription
|
||||||
|
|
||||||
TCPServer::~TCPServer() {
|
commands.add(subscriptions, "publish");
|
||||||
|
commands.add(subscriptions, "unpublish");
|
||||||
|
commands.add(subscriptions, "subscribe");
|
||||||
|
commands.add(subscriptions, "unsubscribe");
|
||||||
|
commands.add(subscriptions, "catalog");
|
||||||
|
commands.add(subscriptions, "event");
|
||||||
|
commands.add(subscriptions, "invite");
|
||||||
|
|
||||||
|
setDescriptor(socket(AF_INET, SOCK_STREAM, 0));
|
||||||
|
int yes = 1;
|
||||||
|
setsockopt(getDescriptor(), SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int));
|
||||||
|
|
||||||
|
if (bind(getDescriptor(), address.getPointer(), address.addressLength) < 0)
|
||||||
|
throw coreutils::Exception("Error on bind to socket: " + std::to_string(errno));
|
||||||
|
|
||||||
|
if (listen(getDescriptor(), 20) < 0)
|
||||||
|
throw coreutils::Exception("Error on listen to socket");
|
||||||
|
}
|
||||||
|
|
||||||
|
TCPServer::~TCPServer()
|
||||||
|
{
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_2) << "Closing server socket " << getDescriptor() << ".";
|
coreutils::Log(coreutils::LOG_DEBUG_2) << "Closing server socket " << getDescriptor() << ".";
|
||||||
close(getDescriptor());
|
close(getDescriptor());
|
||||||
}
|
}
|
||||||
@ -36,7 +62,7 @@ namespace core {
|
|||||||
void TCPServer::onDataReceived(std::string data) {
|
void TCPServer::onDataReceived(std::string data) {
|
||||||
lock.lock();
|
lock.lock();
|
||||||
TCPSession *session = accept();
|
TCPSession *session = accept();
|
||||||
if(session)
|
if (session)
|
||||||
sessions.push_back(session);
|
sessions.push_back(session);
|
||||||
lock.unlock();
|
lock.unlock();
|
||||||
}
|
}
|
||||||
@ -59,10 +85,12 @@ namespace core {
|
|||||||
// }
|
// }
|
||||||
return session;
|
return session;
|
||||||
}
|
}
|
||||||
catch(coreutils::Exception e) {
|
catch (coreutils::Exception e)
|
||||||
|
{
|
||||||
coreutils::Log(coreutils::LOG_EXCEPT) << "Major error on session initialization. Error is '" << e.text << "'.";
|
coreutils::Log(coreutils::LOG_EXCEPT) << "Major error on session initialization. Error is '" << e.text << "'.";
|
||||||
}
|
}
|
||||||
catch(...) {
|
catch (...)
|
||||||
|
{
|
||||||
coreutils::Log(coreutils::LOG_EXCEPT) << "Unnspecified error on session initialization.";
|
coreutils::Log(coreutils::LOG_EXCEPT) << "Unnspecified error on session initialization.";
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -93,7 +121,8 @@ namespace core {
|
|||||||
|
|
||||||
int TCPServer::processCommand(coreutils::ZString &request, TCPSession &session) {
|
int TCPServer::processCommand(coreutils::ZString &request, TCPSession &session) {
|
||||||
int sequence = 0;
|
int sequence = 0;
|
||||||
for(auto *sessionx : sessions) {
|
for (auto *sessionx : sessions)
|
||||||
|
{
|
||||||
session.out << "|" << ++sequence;
|
session.out << "|" << ++sequence;
|
||||||
sessionx->output(session.out);
|
sessionx->output(session.out);
|
||||||
session.out << "|" << std::endl;
|
session.out << "|" << std::endl;
|
||||||
@ -101,25 +130,41 @@ namespace core {
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TCPServer::sendToAll(std::stringstream &data) {
|
void TCPServer::sendToAll(std::stringstream &data)
|
||||||
for(auto session : sessions)
|
{
|
||||||
session->write(data.str(), NULL);
|
for (auto session : sessions)
|
||||||
|
session->write(data.str());
|
||||||
data.str("");
|
data.str("");
|
||||||
}
|
}
|
||||||
|
|
||||||
void TCPServer::sendToAll(std::stringstream &data, TCPSession &sender) {
|
void TCPServer::sendToAll(std::stringstream &data, TCPSession &sender)
|
||||||
for(auto session : sessions)
|
{
|
||||||
if(session != &sender)
|
for (auto session : sessions)
|
||||||
session->write(data.str(), &sender);
|
if (session != &sender)
|
||||||
|
session->write(data.str());
|
||||||
data.str("");
|
data.str("");
|
||||||
}
|
}
|
||||||
|
|
||||||
void TCPServer::sendToAll(std::stringstream &data, TCPSession &sender, SessionFilter filter) {
|
void TCPServer::sendToAll(std::stringstream &data, TCPSession &sender, SessionFilter filter)
|
||||||
for(auto session : sessions)
|
{
|
||||||
if(filter.test(*session))
|
for (auto session : sessions)
|
||||||
if(session != &sender)
|
if (filter.test(*session))
|
||||||
session->write(data.str(), &sender);
|
if (session != &sender)
|
||||||
|
session->write(data.str());
|
||||||
data.str("");
|
data.str("");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TCPSession *TCPServer::getSessionByAlias(void *alias)
|
||||||
|
{
|
||||||
|
coreutils::Log(coreutils::LOG_DEBUG_1) << alias;
|
||||||
|
for (auto session : sessions)
|
||||||
|
if (compareAlias(session->alias, alias))
|
||||||
|
return session;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TCPServer::compareAlias(void *alias, void *compare)
|
||||||
|
{
|
||||||
|
return alias == compare;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
33
TCPServer.h
33
TCPServer.h
@ -1,14 +1,16 @@
|
|||||||
#ifndef __TCPServer_h__
|
#ifndef __TCPServer_h__
|
||||||
#define __TCPServer_h__
|
#define __TCPServer_h__
|
||||||
|
|
||||||
#include "Socket.h"
|
|
||||||
#include "TCPSocket.h"
|
|
||||||
#include "IPAddressList.h"
|
|
||||||
#include "Command.h"
|
#include "Command.h"
|
||||||
#include "CommandList.h"
|
#include "CommandList.h"
|
||||||
|
#include "IPAddressList.h"
|
||||||
|
#include "Socket.h"
|
||||||
#include "SubscriptionManager.h"
|
#include "SubscriptionManager.h"
|
||||||
|
#include "TCPSession.h"
|
||||||
|
#include "TCPSocket.h"
|
||||||
|
|
||||||
namespace core {
|
namespace core
|
||||||
|
{
|
||||||
|
|
||||||
///
|
///
|
||||||
/// TCPServer
|
/// TCPServer
|
||||||
@ -22,10 +24,10 @@ namespace core {
|
|||||||
/// process commands to display status information.
|
/// process commands to display status information.
|
||||||
///
|
///
|
||||||
|
|
||||||
class TCPServer : public TCPSocket, public Command {
|
class TCPServer : public TCPSocket, public Command
|
||||||
|
{
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
///
|
///
|
||||||
/// The constructor for the TCPServer object.
|
/// The constructor for the TCPServer object.
|
||||||
///
|
///
|
||||||
@ -44,7 +46,7 @@ namespace core {
|
|||||||
virtual ~TCPServer();
|
virtual ~TCPServer();
|
||||||
|
|
||||||
virtual void sessionErrorHandler(std::string errorString, std::stringstream &out);
|
virtual void sessionErrorHandler(std::string errorString, std::stringstream &out);
|
||||||
|
virtual bool compareAlias(void *alias, void *compare);
|
||||||
///
|
///
|
||||||
/// getSocketAccept is designed to allow a polymorphic extension of this object to
|
/// getSocketAccept is designed to allow a polymorphic extension of this object to
|
||||||
/// return a type of object that extends the definition of the server socket.
|
/// return a type of object that extends the definition of the server socket.
|
||||||
@ -53,7 +55,7 @@ namespace core {
|
|||||||
/// service.
|
/// service.
|
||||||
///
|
///
|
||||||
|
|
||||||
virtual TCPSession * getSocketAccept(EPoll &epoll);
|
virtual TCPSession *getSocketAccept(EPoll &epoll);
|
||||||
|
|
||||||
///
|
///
|
||||||
/// The list of sessions that are currently open and being maintained by this object.
|
/// The list of sessions that are currently open and being maintained by this object.
|
||||||
@ -86,7 +88,7 @@ namespace core {
|
|||||||
|
|
||||||
void removeFromSessionList(TCPSession *session);
|
void removeFromSessionList(TCPSession *session);
|
||||||
|
|
||||||
void output(std::stringstream &out); ///<Output the consoles array to the console.
|
void output(std::stringstream &out); ///< Output the consoles array to the console.
|
||||||
|
|
||||||
///
|
///
|
||||||
///
|
///
|
||||||
@ -115,8 +117,14 @@ namespace core {
|
|||||||
|
|
||||||
SubscriptionManager subscriptions;
|
SubscriptionManager subscriptions;
|
||||||
|
|
||||||
protected:
|
///
|
||||||
|
/// Use the getSessionByAlias to retrieve a session pointer by the value
|
||||||
|
/// of the alias pointer.
|
||||||
|
///
|
||||||
|
|
||||||
|
TCPSession *getSessionByAlias(void *alias);
|
||||||
|
|
||||||
|
protected:
|
||||||
///
|
///
|
||||||
/// Override the virtual dataReceived since for the server these
|
/// Override the virtual dataReceived since for the server these
|
||||||
/// are requests to accept the new connection socket.
|
/// are requests to accept the new connection socket.
|
||||||
@ -139,11 +147,10 @@ namespace core {
|
|||||||
int processCommand(coreutils::ZString &request, TCPSession &session) override;
|
int processCommand(coreutils::ZString &request, TCPSession &session) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
TCPSession *accept();
|
||||||
TCPSession * accept();
|
|
||||||
std::mutex lock;
|
std::mutex lock;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
/// This method is called when you compare an alias of the character
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,62 +1,86 @@
|
|||||||
#include "TCPSession.h"
|
#include "TCPSession.h"
|
||||||
#include "TCPServer.h"
|
|
||||||
#include "Exception.h"
|
#include "Exception.h"
|
||||||
#include "Log.h"
|
#include "Log.h"
|
||||||
|
#include "TCPServer.h"
|
||||||
|
#include "uuid/uuid.h"
|
||||||
|
|
||||||
namespace core {
|
namespace core
|
||||||
|
{
|
||||||
|
|
||||||
TCPSession::TCPSession(EPoll &ePoll, TCPServer &server, std::string text) : TCPSocket(ePoll, text), server(server) {}
|
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 = (void *)uuidObject;
|
||||||
|
}
|
||||||
|
|
||||||
TCPSession::~TCPSession() {
|
TCPSession::~TCPSession()
|
||||||
|
{
|
||||||
server.removeFromSessionList(this);
|
server.removeFromSessionList(this);
|
||||||
server.subscriptions.removeSessionSubscriptions(*this);
|
server.subscriptions.removeSessionSubscriptions(*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TCPSession::output(std::stringstream &data) {
|
void TCPSession::output(std::stringstream &data)
|
||||||
|
{
|
||||||
data << "|" << ipAddress.getClientAddressAndPort();
|
data << "|" << ipAddress.getClientAddressAndPort();
|
||||||
}
|
}
|
||||||
|
|
||||||
void TCPSession::protocol(coreutils::ZString &data) {
|
void TCPSession::protocol(coreutils::ZString &data)
|
||||||
if(server.commands.processRequest(data, *this) == 0)
|
{
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_1) << "Received data could not be parsed: " << getDescriptor() << " [" << data.str() << "]";
|
if (data.getLength() != 0)
|
||||||
|
{
|
||||||
|
if (!server.commands.processRequest(data, *this))
|
||||||
|
{
|
||||||
|
coreutils::Log(coreutils::LOG_DEBUG_1) << "Received data could not be parsed: " << data.str();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void TCPSession::onRegistered() {
|
void TCPSession::onRegistered()
|
||||||
|
{
|
||||||
onConnected();
|
onConnected();
|
||||||
// coreutils::ZString blank("");
|
// coreutils::ZString blank("");
|
||||||
// protocol(blank);
|
// protocol(blank);
|
||||||
send();
|
send();
|
||||||
if(term)
|
if (term)
|
||||||
shutdown("termination requested");
|
shutdown("termination requested");
|
||||||
}
|
}
|
||||||
|
|
||||||
void TCPSession::onConnected() {}
|
void TCPSession::onConnected() {}
|
||||||
|
|
||||||
void TCPSession::onDataReceived(coreutils::ZString &data) {
|
void TCPSession::onDataReceived(coreutils::ZString &data)
|
||||||
if(data.getLength() > 0) {
|
{
|
||||||
|
if (data.getLength() > 0)
|
||||||
|
{
|
||||||
lineBuffer = (char *)realloc(lineBuffer, lineBufferSize + data.getLength());
|
lineBuffer = (char *)realloc(lineBuffer, lineBufferSize + data.getLength());
|
||||||
memcpy(lineBuffer + lineBufferSize, data.getData(), data.getLength());
|
memcpy(lineBuffer + lineBufferSize, data.getData(), data.getLength());
|
||||||
lineBufferSize += data.getLength();
|
lineBufferSize += data.getLength();
|
||||||
while(lineBufferSize > 0) {
|
while (lineBufferSize > 0)
|
||||||
if(blockSize == 0) {
|
{
|
||||||
|
if (blockSize == 0)
|
||||||
|
{
|
||||||
lineLength = strcspn(lineBuffer, "\r\n");
|
lineLength = strcspn(lineBuffer, "\r\n");
|
||||||
if(lineLength == lineBufferSize)
|
if (lineLength == lineBufferSize)
|
||||||
break;
|
break;
|
||||||
coreutils::ZString zLine(lineBuffer, lineLength);
|
coreutils::ZString zLine(lineBuffer, lineLength);
|
||||||
onLineReceived(zLine);
|
onLineReceived(zLine);
|
||||||
if(lineBuffer[lineLength] == '\r')
|
if (lineBuffer[lineLength] == '\r')
|
||||||
++lineLength;
|
++lineLength;
|
||||||
if(lineBuffer[lineLength] == '\n')
|
if (lineBuffer[lineLength] == '\n')
|
||||||
++lineLength;
|
++lineLength;
|
||||||
lineBufferSize -= lineLength;
|
lineBufferSize -= lineLength;
|
||||||
if(lineBufferSize > 0)
|
if (lineBufferSize > 0)
|
||||||
memmove(lineBuffer, lineBuffer + lineLength, lineBufferSize);
|
memmove(lineBuffer, lineBuffer + lineLength, lineBufferSize);
|
||||||
lineBuffer = (char *)realloc(lineBuffer, lineBufferSize);
|
lineBuffer = (char *)realloc(lineBuffer, lineBufferSize);
|
||||||
} else if(lineBufferSize >= blockLength) {
|
}
|
||||||
|
else if (lineBufferSize >= blockLength)
|
||||||
|
{
|
||||||
coreutils::ZString zBlock(lineBuffer, blockLength);
|
coreutils::ZString zBlock(lineBuffer, blockLength);
|
||||||
onBlockReceived(zBlock);
|
onBlockReceived(zBlock);
|
||||||
lineBufferSize -= blockLength;
|
lineBufferSize -= blockLength;
|
||||||
if(lineBufferSize > 0)
|
if (lineBufferSize > 0)
|
||||||
memmove(lineBuffer, lineBuffer + blockLength, lineBufferSize);
|
memmove(lineBuffer, lineBuffer + blockLength, lineBufferSize);
|
||||||
lineBuffer = (char *)realloc(lineBuffer, lineBufferSize);
|
lineBuffer = (char *)realloc(lineBuffer, lineBufferSize);
|
||||||
}
|
}
|
||||||
@ -64,20 +88,23 @@ namespace core {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void TCPSession::setBlockSize(int blockSize) {
|
void TCPSession::setBlockSize(int blockSize)
|
||||||
|
{
|
||||||
this->blockSize = blockSize;
|
this->blockSize = blockSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TCPSession::onLineReceived(coreutils::ZString &line) {
|
void TCPSession::onLineReceived(coreutils::ZString &line)
|
||||||
|
{
|
||||||
protocol(line);
|
protocol(line);
|
||||||
send();
|
send();
|
||||||
if(term)
|
if (term)
|
||||||
shutdown("termination requested");
|
shutdown("termination requested");
|
||||||
}
|
}
|
||||||
|
|
||||||
void TCPSession::onBlockReceived(coreutils::ZString &block) {
|
void TCPSession::onBlockReceived(coreutils::ZString &block)
|
||||||
|
{
|
||||||
coreutils::Log(coreutils::LOG_DEBUG_3) << "[" << block.getLength() << "]";
|
coreutils::Log(coreutils::LOG_DEBUG_3) << "[" << block.getLength() << "]";
|
||||||
if(term)
|
if (term)
|
||||||
shutdown("termination requested");
|
shutdown("termination requested");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -87,7 +114,8 @@ namespace core {
|
|||||||
out.str("");
|
out.str("");
|
||||||
}
|
}
|
||||||
|
|
||||||
void TCPSession::terminate() {
|
void TCPSession::terminate()
|
||||||
|
{
|
||||||
term = true;
|
term = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
17
TCPSession.h
17
TCPSession.h
@ -1,10 +1,11 @@
|
|||||||
#ifndef __Session_h__
|
#ifndef __Session_h__
|
||||||
# define __Session_h__
|
#define __Session_h__
|
||||||
|
|
||||||
#include "TCPSocket.h"
|
|
||||||
#include "SessionFilter.h"
|
#include "SessionFilter.h"
|
||||||
|
#include "TCPSocket.h"
|
||||||
|
|
||||||
namespace core {
|
namespace core
|
||||||
|
{
|
||||||
|
|
||||||
class Command;
|
class Command;
|
||||||
class TCPServer;
|
class TCPServer;
|
||||||
@ -21,10 +22,10 @@ namespace core {
|
|||||||
///
|
///
|
||||||
///
|
///
|
||||||
|
|
||||||
class TCPSession : public TCPSocket {
|
class TCPSession : public TCPSocket
|
||||||
|
{
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
///
|
///
|
||||||
///
|
///
|
||||||
///
|
///
|
||||||
@ -66,8 +67,11 @@ namespace core {
|
|||||||
|
|
||||||
std::stringstream out;
|
std::stringstream out;
|
||||||
|
|
||||||
protected:
|
char uuid[37];
|
||||||
|
|
||||||
|
void *alias;
|
||||||
|
|
||||||
|
protected:
|
||||||
///
|
///
|
||||||
///
|
///
|
||||||
///
|
///
|
||||||
@ -135,7 +139,6 @@ namespace core {
|
|||||||
std::mutex mtx;
|
std::mutex mtx;
|
||||||
bool term = false;
|
bool term = false;
|
||||||
int blockSize = 0;
|
int blockSize = 0;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -119,7 +119,7 @@ $(function() {
|
|||||||
<div class="ttc" id="aclasscore_1_1CommandList_html_abcfb26e37e1ee6ff5655ebc3d33b1818"><div class="ttname"><a href="classcore_1_1CommandList.html#abcfb26e37e1ee6ff5655ebc3d33b1818">core::CommandList::processRequest</a></div><div class="ttdeci">int processRequest(coreutils::ZString &request, TCPSession &session)</div><div class="ttdef"><b>Definition:</b> CommandList.cpp:14</div></div>
|
<div class="ttc" id="aclasscore_1_1CommandList_html_abcfb26e37e1ee6ff5655ebc3d33b1818"><div class="ttname"><a href="classcore_1_1CommandList.html#abcfb26e37e1ee6ff5655ebc3d33b1818">core::CommandList::processRequest</a></div><div class="ttdeci">int processRequest(coreutils::ZString &request, TCPSession &session)</div><div class="ttdef"><b>Definition:</b> CommandList.cpp:14</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1CommandList_html_ad0aedf95828fe743908d8423f171ff36"><div class="ttname"><a href="classcore_1_1CommandList.html#ad0aedf95828fe743908d8423f171ff36">core::CommandList::commands</a></div><div class="ttdeci">std::map< std::string, Command * > commands</div><div class="ttdef"><b>Definition:</b> CommandList.h:71</div></div>
|
<div class="ttc" id="aclasscore_1_1CommandList_html_ad0aedf95828fe743908d8423f171ff36"><div class="ttname"><a href="classcore_1_1CommandList.html#ad0aedf95828fe743908d8423f171ff36">core::CommandList::commands</a></div><div class="ttdeci">std::map< std::string, Command * > commands</div><div class="ttdef"><b>Definition:</b> CommandList.h:71</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1Command_html"><div class="ttname"><a href="classcore_1_1Command.html">core::Command</a></div><div class="ttdef"><b>Definition:</b> Command.h:22</div></div>
|
<div class="ttc" id="aclasscore_1_1Command_html"><div class="ttname"><a href="classcore_1_1Command.html">core::Command</a></div><div class="ttdef"><b>Definition:</b> Command.h:22</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1TCPSession_html"><div class="ttname"><a href="classcore_1_1TCPSession.html">core::TCPSession</a></div><div class="ttdef"><b>Definition:</b> TCPSession.h:24</div></div>
|
<div class="ttc" id="aclasscore_1_1TCPSession_html"><div class="ttname"><a href="classcore_1_1TCPSession.html">core::TCPSession</a></div><div class="ttdef"><b>Definition:</b> TCPSession.h:26</div></div>
|
||||||
</div><!-- fragment --></div><!-- contents -->
|
</div><!-- fragment --></div><!-- contents -->
|
||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<hr class="footer"/><address class="footer"><small>
|
<hr class="footer"/><address class="footer"><small>
|
||||||
|
@ -98,7 +98,7 @@ $(function() {
|
|||||||
<div class="ttc" id="aclasscore_1_1Command_html"><div class="ttname"><a href="classcore_1_1Command.html">core::Command</a></div><div class="ttdef"><b>Definition:</b> Command.h:22</div></div>
|
<div class="ttc" id="aclasscore_1_1Command_html"><div class="ttname"><a href="classcore_1_1Command.html">core::Command</a></div><div class="ttdef"><b>Definition:</b> Command.h:22</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1Command_html_a95176f2532c38ee14e3fee40ee28b1bd"><div class="ttname"><a href="classcore_1_1Command.html#a95176f2532c38ee14e3fee40ee28b1bd">core::Command::processCommand</a></div><div class="ttdeci">virtual int processCommand(coreutils::ZString &request, TCPSession &session)</div><div class="ttdef"><b>Definition:</b> Command.cpp:7</div></div>
|
<div class="ttc" id="aclasscore_1_1Command_html_a95176f2532c38ee14e3fee40ee28b1bd"><div class="ttname"><a href="classcore_1_1Command.html#a95176f2532c38ee14e3fee40ee28b1bd">core::Command::processCommand</a></div><div class="ttdeci">virtual int processCommand(coreutils::ZString &request, TCPSession &session)</div><div class="ttdef"><b>Definition:</b> Command.cpp:7</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1Command_html_ab6352ce5650e70a5c76c3d6e4eefd292"><div class="ttname"><a href="classcore_1_1Command.html#ab6352ce5650e70a5c76c3d6e4eefd292">core::Command::output</a></div><div class="ttdeci">virtual void output(std::stringstream &out)</div><div class="ttdef"><b>Definition:</b> Command.cpp:11</div></div>
|
<div class="ttc" id="aclasscore_1_1Command_html_ab6352ce5650e70a5c76c3d6e4eefd292"><div class="ttname"><a href="classcore_1_1Command.html#ab6352ce5650e70a5c76c3d6e4eefd292">core::Command::output</a></div><div class="ttdeci">virtual void output(std::stringstream &out)</div><div class="ttdef"><b>Definition:</b> Command.cpp:11</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1TCPSession_html"><div class="ttname"><a href="classcore_1_1TCPSession.html">core::TCPSession</a></div><div class="ttdef"><b>Definition:</b> TCPSession.h:24</div></div>
|
<div class="ttc" id="aclasscore_1_1TCPSession_html"><div class="ttname"><a href="classcore_1_1TCPSession.html">core::TCPSession</a></div><div class="ttdef"><b>Definition:</b> TCPSession.h:26</div></div>
|
||||||
</div><!-- fragment --></div><!-- contents -->
|
</div><!-- fragment --></div><!-- contents -->
|
||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<hr class="footer"/><address class="footer"><small>
|
<hr class="footer"/><address class="footer"><small>
|
||||||
|
@ -107,8 +107,8 @@ $(function() {
|
|||||||
<div class="ttc" id="aclasscore_1_1ConsoleServer_html_a80d9ea7f3fc5e07c50d5b9e0d4943ca8"><div class="ttname"><a href="classcore_1_1ConsoleServer.html#a80d9ea7f3fc5e07c50d5b9e0d4943ca8">core::ConsoleServer::getSocketAccept</a></div><div class="ttdeci">TCPSession * getSocketAccept(EPoll &ePoll) override</div><div class="ttdef"><b>Definition:</b> ConsoleServer.cpp:17</div></div>
|
<div class="ttc" id="aclasscore_1_1ConsoleServer_html_a80d9ea7f3fc5e07c50d5b9e0d4943ca8"><div class="ttname"><a href="classcore_1_1ConsoleServer.html#a80d9ea7f3fc5e07c50d5b9e0d4943ca8">core::ConsoleServer::getSocketAccept</a></div><div class="ttdeci">TCPSession * getSocketAccept(EPoll &ePoll) override</div><div class="ttdef"><b>Definition:</b> ConsoleServer.cpp:17</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1EPoll_html"><div class="ttname"><a href="classcore_1_1EPoll.html">core::EPoll</a></div><div class="ttdef"><b>Definition:</b> EPoll.h:31</div></div>
|
<div class="ttc" id="aclasscore_1_1EPoll_html"><div class="ttname"><a href="classcore_1_1EPoll.html">core::EPoll</a></div><div class="ttdef"><b>Definition:</b> EPoll.h:31</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1IPAddress_html"><div class="ttname"><a href="classcore_1_1IPAddress.html">core::IPAddress</a></div><div class="ttdef"><b>Definition:</b> IPAddress.h:9</div></div>
|
<div class="ttc" id="aclasscore_1_1IPAddress_html"><div class="ttname"><a href="classcore_1_1IPAddress.html">core::IPAddress</a></div><div class="ttdef"><b>Definition:</b> IPAddress.h:9</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1TCPServer_html"><div class="ttname"><a href="classcore_1_1TCPServer.html">core::TCPServer</a></div><div class="ttdef"><b>Definition:</b> TCPServer.h:25</div></div>
|
<div class="ttc" id="aclasscore_1_1TCPServer_html"><div class="ttname"><a href="classcore_1_1TCPServer.html">core::TCPServer</a></div><div class="ttdef"><b>Definition:</b> TCPServer.h:28</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1TCPSession_html"><div class="ttname"><a href="classcore_1_1TCPSession.html">core::TCPSession</a></div><div class="ttdef"><b>Definition:</b> TCPSession.h:24</div></div>
|
<div class="ttc" id="aclasscore_1_1TCPSession_html"><div class="ttname"><a href="classcore_1_1TCPSession.html">core::TCPSession</a></div><div class="ttdef"><b>Definition:</b> TCPSession.h:26</div></div>
|
||||||
</div><!-- fragment --></div><!-- contents -->
|
</div><!-- fragment --></div><!-- contents -->
|
||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<hr class="footer"/><address class="footer"><small>
|
<hr class="footer"/><address class="footer"><small>
|
||||||
|
@ -102,7 +102,7 @@ $(function() {
|
|||||||
<div class="ttc" id="aclasscore_1_1ConsoleSession_html"><div class="ttname"><a href="classcore_1_1ConsoleSession.html">core::ConsoleSession</a></div><div class="ttdef"><b>Definition:</b> ConsoleSession.h:20</div></div>
|
<div class="ttc" id="aclasscore_1_1ConsoleSession_html"><div class="ttname"><a href="classcore_1_1ConsoleSession.html">core::ConsoleSession</a></div><div class="ttdef"><b>Definition:</b> ConsoleSession.h:20</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1ConsoleSession_html_aa1818efcd33a4152d2089aa545f08833"><div class="ttname"><a href="classcore_1_1ConsoleSession.html#aa1818efcd33a4152d2089aa545f08833">core::ConsoleSession::protocol</a></div><div class="ttdeci">void protocol(coreutils::ZString &data) override</div><div class="ttdef"><b>Definition:</b> ConsoleSession.cpp:11</div></div>
|
<div class="ttc" id="aclasscore_1_1ConsoleSession_html_aa1818efcd33a4152d2089aa545f08833"><div class="ttname"><a href="classcore_1_1ConsoleSession.html#aa1818efcd33a4152d2089aa545f08833">core::ConsoleSession::protocol</a></div><div class="ttdeci">void protocol(coreutils::ZString &data) override</div><div class="ttdef"><b>Definition:</b> ConsoleSession.cpp:11</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1EPoll_html"><div class="ttname"><a href="classcore_1_1EPoll.html">core::EPoll</a></div><div class="ttdef"><b>Definition:</b> EPoll.h:31</div></div>
|
<div class="ttc" id="aclasscore_1_1EPoll_html"><div class="ttname"><a href="classcore_1_1EPoll.html">core::EPoll</a></div><div class="ttdef"><b>Definition:</b> EPoll.h:31</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1TCPServer_html"><div class="ttname"><a href="classcore_1_1TCPServer.html">core::TCPServer</a></div><div class="ttdef"><b>Definition:</b> TCPServer.h:25</div></div>
|
<div class="ttc" id="aclasscore_1_1TCPServer_html"><div class="ttname"><a href="classcore_1_1TCPServer.html">core::TCPServer</a></div><div class="ttdef"><b>Definition:</b> TCPServer.h:28</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1TerminalSession_html"><div class="ttname"><a href="classcore_1_1TerminalSession.html">core::TerminalSession</a></div><div class="ttdef"><b>Definition:</b> TerminalSession.h:30</div></div>
|
<div class="ttc" id="aclasscore_1_1TerminalSession_html"><div class="ttname"><a href="classcore_1_1TerminalSession.html">core::TerminalSession</a></div><div class="ttdef"><b>Definition:</b> TerminalSession.h:30</div></div>
|
||||||
</div><!-- fragment --></div><!-- contents -->
|
</div><!-- fragment --></div><!-- contents -->
|
||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
|
@ -147,7 +147,7 @@ $(function() {
|
|||||||
<div class="ttc" id="aclasscore_1_1EPoll_html_aaefe2caef75eb538af90cb34682d277b"><div class="ttname"><a href="classcore_1_1EPoll.html#aaefe2caef75eb538af90cb34682d277b">core::EPoll::start</a></div><div class="ttdeci">bool start(int numberOfThreads, int maxSockets)</div><div class="ttdoc">Start the BMAEPoll processing.</div><div class="ttdef"><b>Definition:</b> EPoll.cpp:20</div></div>
|
<div class="ttc" id="aclasscore_1_1EPoll_html_aaefe2caef75eb538af90cb34682d277b"><div class="ttname"><a href="classcore_1_1EPoll.html#aaefe2caef75eb538af90cb34682d277b">core::EPoll::start</a></div><div class="ttdeci">bool start(int numberOfThreads, int maxSockets)</div><div class="ttdoc">Start the BMAEPoll processing.</div><div class="ttdef"><b>Definition:</b> EPoll.cpp:20</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1EPoll_html_acfcef2513d94f7b9a191fed3dc744d90"><div class="ttname"><a href="classcore_1_1EPoll.html#acfcef2513d94f7b9a191fed3dc744d90">core::EPoll::maxSockets</a></div><div class="ttdeci">int maxSockets</div><div class="ttdoc">The maximum number of socket allowed.</div><div class="ttdef"><b>Definition:</b> EPoll.h:100</div></div>
|
<div class="ttc" id="aclasscore_1_1EPoll_html_acfcef2513d94f7b9a191fed3dc744d90"><div class="ttname"><a href="classcore_1_1EPoll.html#acfcef2513d94f7b9a191fed3dc744d90">core::EPoll::maxSockets</a></div><div class="ttdeci">int maxSockets</div><div class="ttdoc">The maximum number of socket allowed.</div><div class="ttdef"><b>Definition:</b> EPoll.h:100</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1Socket_html"><div class="ttname"><a href="classcore_1_1Socket.html">core::Socket</a></div><div class="ttdef"><b>Definition:</b> Socket.h:34</div></div>
|
<div class="ttc" id="aclasscore_1_1Socket_html"><div class="ttname"><a href="classcore_1_1Socket.html">core::Socket</a></div><div class="ttdef"><b>Definition:</b> Socket.h:34</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1TCPSession_html"><div class="ttname"><a href="classcore_1_1TCPSession.html">core::TCPSession</a></div><div class="ttdef"><b>Definition:</b> TCPSession.h:24</div></div>
|
<div class="ttc" id="aclasscore_1_1TCPSession_html"><div class="ttname"><a href="classcore_1_1TCPSession.html">core::TCPSession</a></div><div class="ttdef"><b>Definition:</b> TCPSession.h:26</div></div>
|
||||||
</div><!-- fragment --></div><!-- contents -->
|
</div><!-- fragment --></div><!-- contents -->
|
||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<hr class="footer"/><address class="footer"><small>
|
<hr class="footer"/><address class="footer"><small>
|
||||||
|
@ -69,26 +69,29 @@ $(function() {
|
|||||||
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="preprocessor">#define __SessionFilter_h__</span></div>
|
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="preprocessor">#define __SessionFilter_h__</span></div>
|
||||||
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>  </div>
|
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>  </div>
|
||||||
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">//#include "Session.h"</span></div>
|
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">//#include "Session.h"</span></div>
|
||||||
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>  </div>
|
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="preprocessor">#include "Object.h"</span></div>
|
||||||
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="keyword">namespace </span>core {</div>
|
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>  </div>
|
||||||
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>  </div>
|
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="keyword">namespace </span>core</div>
|
||||||
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>  <span class="keyword">class </span>TCPSession;</div>
|
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> {</div>
|
||||||
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>  </div>
|
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>  </div>
|
||||||
<div class="line"><a name="l00010"></a><span class="lineno"><a class="line" href="classcore_1_1SessionFilter.html"> 10</a></span>  <span class="keyword">class </span><a class="code" href="classcore_1_1SessionFilter.html">SessionFilter</a> : <span class="keyword">public</span> <a class="code" href="classcore_1_1Object.html">Object</a> {</div>
|
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>  <span class="keyword">class </span>TCPSession;</div>
|
||||||
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>  </div>
|
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>  </div>
|
||||||
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>  <span class="keyword">public</span>:</div>
|
<div class="line"><a name="l00012"></a><span class="lineno"><a class="line" href="classcore_1_1SessionFilter.html"> 12</a></span>  <span class="keyword">class </span><a class="code" href="classcore_1_1SessionFilter.html">SessionFilter</a> : <span class="keyword">public</span> <a class="code" href="classcore_1_1Object.html">Object</a></div>
|
||||||
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> test(<a class="code" href="classcore_1_1TCPSession.html">TCPSession</a> &session) {</div>
|
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>  {</div>
|
||||||
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
|
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>  </div>
|
||||||
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>  }</div>
|
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>  <span class="keyword">public</span>:</div>
|
||||||
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>  </div>
|
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> test(<a class="code" href="classcore_1_1TCPSession.html">TCPSession</a> &session)</div>
|
||||||
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>  };</div>
|
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>  {</div>
|
||||||
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>  </div>
|
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
|
||||||
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> }</div>
|
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  }</div>
|
||||||
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  </div>
|
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  };</div>
|
||||||
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#endif</span></div>
|
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  </div>
|
||||||
|
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> }</div>
|
||||||
|
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  </div>
|
||||||
|
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#endif</span></div>
|
||||||
<div class="ttc" id="aclasscore_1_1Object_html"><div class="ttname"><a href="classcore_1_1Object.html">core::Object</a></div><div class="ttdef"><b>Definition:</b> Object.h:8</div></div>
|
<div class="ttc" id="aclasscore_1_1Object_html"><div class="ttname"><a href="classcore_1_1Object.html">core::Object</a></div><div class="ttdef"><b>Definition:</b> Object.h:8</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1SessionFilter_html"><div class="ttname"><a href="classcore_1_1SessionFilter.html">core::SessionFilter</a></div><div class="ttdef"><b>Definition:</b> SessionFilter.h:10</div></div>
|
<div class="ttc" id="aclasscore_1_1SessionFilter_html"><div class="ttname"><a href="classcore_1_1SessionFilter.html">core::SessionFilter</a></div><div class="ttdef"><b>Definition:</b> SessionFilter.h:13</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1TCPSession_html"><div class="ttname"><a href="classcore_1_1TCPSession.html">core::TCPSession</a></div><div class="ttdef"><b>Definition:</b> TCPSession.h:24</div></div>
|
<div class="ttc" id="aclasscore_1_1TCPSession_html"><div class="ttname"><a href="classcore_1_1TCPSession.html">core::TCPSession</a></div><div class="ttdef"><b>Definition:</b> TCPSession.h:26</div></div>
|
||||||
</div><!-- fragment --></div><!-- contents -->
|
</div><!-- fragment --></div><!-- contents -->
|
||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<hr class="footer"/><address class="footer"><small>
|
<hr class="footer"/><address class="footer"><small>
|
||||||
|
@ -178,6 +178,7 @@ $(function() {
|
|||||||
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  </div>
|
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  </div>
|
||||||
<div class="ttc" id="aclasscore_1_1EPoll_html"><div class="ttname"><a href="classcore_1_1EPoll.html">core::EPoll</a></div><div class="ttdef"><b>Definition:</b> EPoll.h:31</div></div>
|
<div class="ttc" id="aclasscore_1_1EPoll_html"><div class="ttname"><a href="classcore_1_1EPoll.html">core::EPoll</a></div><div class="ttdef"><b>Definition:</b> EPoll.h:31</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1Socket_html"><div class="ttname"><a href="classcore_1_1Socket.html">core::Socket</a></div><div class="ttdef"><b>Definition:</b> Socket.h:34</div></div>
|
<div class="ttc" id="aclasscore_1_1Socket_html"><div class="ttname"><a href="classcore_1_1Socket.html">core::Socket</a></div><div class="ttdef"><b>Definition:</b> Socket.h:34</div></div>
|
||||||
|
<<<<<<< HEAD
|
||||||
<div class="ttc" id="aclasscore_1_1Socket_html_a06ba54744530439d4131e6aba4623d08"><div class="ttname"><a href="classcore_1_1Socket.html#a06ba54744530439d4131e6aba4623d08">core::Socket::getDescriptor</a></div><div class="ttdeci">int getDescriptor()</div><div class="ttdoc">Get the descriptor for the socket.</div><div class="ttdef"><b>Definition:</b> Socket.cpp:43</div></div>
|
<div class="ttc" id="aclasscore_1_1Socket_html_a06ba54744530439d4131e6aba4623d08"><div class="ttname"><a href="classcore_1_1Socket.html#a06ba54744530439d4131e6aba4623d08">core::Socket::getDescriptor</a></div><div class="ttdeci">int getDescriptor()</div><div class="ttdoc">Get the descriptor for the socket.</div><div class="ttdef"><b>Definition:</b> Socket.cpp:43</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1Socket_html_a1a045e15fb5851d666a21be05ac4c5d7"><div class="ttname"><a href="classcore_1_1Socket.html#a1a045e15fb5851d666a21be05ac4c5d7">core::Socket::eventReceived</a></div><div class="ttdeci">bool eventReceived(struct epoll_event event, long long eventId)</div><div class="ttdoc">Parse epoll event and call specified callbacks.</div><div class="ttdef"><b>Definition:</b> Socket.cpp:64</div></div>
|
<div class="ttc" id="aclasscore_1_1Socket_html_a1a045e15fb5851d666a21be05ac4c5d7"><div class="ttname"><a href="classcore_1_1Socket.html#a1a045e15fb5851d666a21be05ac4c5d7">core::Socket::eventReceived</a></div><div class="ttdeci">bool eventReceived(struct epoll_event event, long long eventId)</div><div class="ttdoc">Parse epoll event and call specified callbacks.</div><div class="ttdef"><b>Definition:</b> Socket.cpp:64</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1Socket_html_a23b9824653bbe4652a716acb828665b1"><div class="ttname"><a href="classcore_1_1Socket.html#a23b9824653bbe4652a716acb828665b1">core::Socket::onRegistered</a></div><div class="ttdeci">virtual void onRegistered()</div><div class="ttdoc">Called after the socket has been registered with epoll processing.</div><div class="ttdef"><b>Definition:</b> Socket.cpp:58</div></div>
|
<div class="ttc" id="aclasscore_1_1Socket_html_a23b9824653bbe4652a716acb828665b1"><div class="ttname"><a href="classcore_1_1Socket.html#a23b9824653bbe4652a716acb828665b1">core::Socket::onRegistered</a></div><div class="ttdeci">virtual void onRegistered()</div><div class="ttdoc">Called after the socket has been registered with epoll processing.</div><div class="ttdef"><b>Definition:</b> Socket.cpp:58</div></div>
|
||||||
@ -190,6 +191,20 @@ $(function() {
|
|||||||
<div class="ttc" id="aclasscore_1_1Socket_html_ac8d6a2c54696eb6fc2024cf6bcf6b4e5"><div class="ttname"><a href="classcore_1_1Socket.html#ac8d6a2c54696eb6fc2024cf6bcf6b4e5">core::Socket::onDataReceived</a></div><div class="ttdeci">virtual void onDataReceived(std::string data)</div><div class="ttdoc">Called when data is received from the socket.</div><div class="ttdef"><b>Definition:</b> Socket.cpp:86</div></div>
|
<div class="ttc" id="aclasscore_1_1Socket_html_ac8d6a2c54696eb6fc2024cf6bcf6b4e5"><div class="ttname"><a href="classcore_1_1Socket.html#ac8d6a2c54696eb6fc2024cf6bcf6b4e5">core::Socket::onDataReceived</a></div><div class="ttdeci">virtual void onDataReceived(std::string data)</div><div class="ttdoc">Called when data is received from the socket.</div><div class="ttdef"><b>Definition:</b> Socket.cpp:86</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1Socket_html_ae9be59697c2b2e5efb19aaae3ba943d2"><div class="ttname"><a href="classcore_1_1Socket.html#ae9be59697c2b2e5efb19aaae3ba943d2">core::Socket::onUnregistered</a></div><div class="ttdeci">virtual void onUnregistered()</div><div class="ttdoc">Called when the socket has finished unregistering for the epoll processing.</div><div class="ttdef"><b>Definition:</b> Socket.cpp:62</div></div>
|
<div class="ttc" id="aclasscore_1_1Socket_html_ae9be59697c2b2e5efb19aaae3ba943d2"><div class="ttname"><a href="classcore_1_1Socket.html#ae9be59697c2b2e5efb19aaae3ba943d2">core::Socket::onUnregistered</a></div><div class="ttdeci">virtual void onUnregistered()</div><div class="ttdoc">Called when the socket has finished unregistering for the epoll processing.</div><div class="ttdef"><b>Definition:</b> Socket.cpp:62</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1Socket_html_af2d1b6de7a64a9d446b0305b6ec47b31"><div class="ttname"><a href="classcore_1_1Socket.html#af2d1b6de7a64a9d446b0305b6ec47b31">core::Socket::shutdown</a></div><div class="ttdeci">void shutdown(std::string text="unknown")</div><div class="ttdef"><b>Definition:</b> Socket.cpp:156</div></div>
|
<div class="ttc" id="aclasscore_1_1Socket_html_af2d1b6de7a64a9d446b0305b6ec47b31"><div class="ttname"><a href="classcore_1_1Socket.html#af2d1b6de7a64a9d446b0305b6ec47b31">core::Socket::shutdown</a></div><div class="ttdeci">void shutdown(std::string text="unknown")</div><div class="ttdef"><b>Definition:</b> Socket.cpp:156</div></div>
|
||||||
|
=======
|
||||||
|
<div class="ttc" id="aclasscore_1_1Socket_html_a06ba54744530439d4131e6aba4623d08"><div class="ttname"><a href="classcore_1_1Socket.html#a06ba54744530439d4131e6aba4623d08">core::Socket::getDescriptor</a></div><div class="ttdeci">int getDescriptor()</div><div class="ttdoc">Get the descriptor for the socket.</div><div class="ttdef"><b>Definition:</b> Socket.cpp:46</div></div>
|
||||||
|
<div class="ttc" id="aclasscore_1_1Socket_html_a1413c826307ef0f29d7457770af675e3"><div class="ttname"><a href="classcore_1_1Socket.html#a1413c826307ef0f29d7457770af675e3">core::Socket::write</a></div><div class="ttdeci">int write(std::string data)</div><div class="ttdef"><b>Definition:</b> Socket.cpp:146</div></div>
|
||||||
|
<div class="ttc" id="aclasscore_1_1Socket_html_a1a045e15fb5851d666a21be05ac4c5d7"><div class="ttname"><a href="classcore_1_1Socket.html#a1a045e15fb5851d666a21be05ac4c5d7">core::Socket::eventReceived</a></div><div class="ttdeci">bool eventReceived(struct epoll_event event, long long eventId)</div><div class="ttdoc">Parse epoll event and call specified callbacks.</div><div class="ttdef"><b>Definition:</b> Socket.cpp:70</div></div>
|
||||||
|
<div class="ttc" id="aclasscore_1_1Socket_html_a23b9824653bbe4652a716acb828665b1"><div class="ttname"><a href="classcore_1_1Socket.html#a23b9824653bbe4652a716acb828665b1">core::Socket::onRegistered</a></div><div class="ttdeci">virtual void onRegistered()</div><div class="ttdoc">Called after the socket has been registered with epoll processing.</div><div class="ttdef"><b>Definition:</b> Socket.cpp:64</div></div>
|
||||||
|
<div class="ttc" id="aclasscore_1_1Socket_html_a46ed2e240852d3fa949979ebbc4ac875"><div class="ttname"><a href="classcore_1_1Socket.html#a46ed2e240852d3fa949979ebbc4ac875">core::Socket::receiveData</a></div><div class="ttdeci">virtual void receiveData(coreutils::ZString &buffer)</div><div class="ttdef"><b>Definition:</b> Socket.cpp:101</div></div>
|
||||||
|
<div class="ttc" id="aclasscore_1_1Socket_html_a4c3f87fd1de3c9eab4bf5efbb30ce87d"><div class="ttname"><a href="classcore_1_1Socket.html#a4c3f87fd1de3c9eab4bf5efbb30ce87d">core::Socket::Socket</a></div><div class="ttdeci">Socket(EPoll &ePoll, std::string text="")</div><div class="ttdef"><b>Definition:</b> Socket.cpp:12</div></div>
|
||||||
|
<div class="ttc" id="aclasscore_1_1Socket_html_a81e5ee3e17834166d97c6e8b7dfe0da0"><div class="ttname"><a href="classcore_1_1Socket.html#a81e5ee3e17834166d97c6e8b7dfe0da0">core::Socket::onRegister</a></div><div class="ttdeci">virtual void onRegister()</div><div class="ttdoc">Called before the socket has registered with the epoll processing.</div><div class="ttdef"><b>Definition:</b> Socket.cpp:62</div></div>
|
||||||
|
<div class="ttc" id="aclasscore_1_1Socket_html_aa5003845f8ae464ad2fa206176381be0"><div class="ttname"><a href="classcore_1_1Socket.html#aa5003845f8ae464ad2fa206176381be0">core::Socket::~Socket</a></div><div class="ttdeci">virtual ~Socket()</div><div class="ttdef"><b>Definition:</b> Socket.cpp:18</div></div>
|
||||||
|
<div class="ttc" id="aclasscore_1_1Socket_html_ac44f6ae3196a8a3e09a6a85fcf495762"><div class="ttname"><a href="classcore_1_1Socket.html#ac44f6ae3196a8a3e09a6a85fcf495762">core::Socket::setDescriptor</a></div><div class="ttdeci">void setDescriptor(int descriptor)</div><div class="ttdoc">Set the descriptor for the socket.</div><div class="ttdef"><b>Definition:</b> Socket.cpp:30</div></div>
|
||||||
|
<div class="ttc" id="aclasscore_1_1Socket_html_ac8d6a2c54696eb6fc2024cf6bcf6b4e5"><div class="ttname"><a href="classcore_1_1Socket.html#ac8d6a2c54696eb6fc2024cf6bcf6b4e5">core::Socket::onDataReceived</a></div><div class="ttdeci">virtual void onDataReceived(std::string data)</div><div class="ttdoc">Called when data is received from the socket.</div><div class="ttdef"><b>Definition:</b> Socket.cpp:91</div></div>
|
||||||
|
<div class="ttc" id="aclasscore_1_1Socket_html_ae9be59697c2b2e5efb19aaae3ba943d2"><div class="ttname"><a href="classcore_1_1Socket.html#ae9be59697c2b2e5efb19aaae3ba943d2">core::Socket::onUnregistered</a></div><div class="ttdeci">virtual void onUnregistered()</div><div class="ttdoc">Called when the socket has finished unregistering for the epoll processing.</div><div class="ttdef"><b>Definition:</b> Socket.cpp:68</div></div>
|
||||||
|
<div class="ttc" id="aclasscore_1_1Socket_html_af2d1b6de7a64a9d446b0305b6ec47b31"><div class="ttname"><a href="classcore_1_1Socket.html#af2d1b6de7a64a9d446b0305b6ec47b31">core::Socket::shutdown</a></div><div class="ttdeci">void shutdown(std::string text="unknown")</div><div class="ttdef"><b>Definition:</b> Socket.cpp:167</div></div>
|
||||||
|
>>>>>>> subscription
|
||||||
</div><!-- fragment --></div><!-- contents -->
|
</div><!-- fragment --></div><!-- contents -->
|
||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<hr class="footer"/><address class="footer"><small>
|
<hr class="footer"/><address class="footer"><small>
|
||||||
|
@ -91,7 +91,7 @@ $(function() {
|
|||||||
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  </div>
|
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  </div>
|
||||||
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#endif</span></div>
|
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#endif</span></div>
|
||||||
<div class="ttc" id="aclasscore_1_1SubscriptionHandler_html"><div class="ttname"><a href="classcore_1_1SubscriptionHandler.html">core::SubscriptionHandler</a></div><div class="ttdef"><b>Definition:</b> SubscriptionHandler.h:15</div></div>
|
<div class="ttc" id="aclasscore_1_1SubscriptionHandler_html"><div class="ttname"><a href="classcore_1_1SubscriptionHandler.html">core::SubscriptionHandler</a></div><div class="ttdef"><b>Definition:</b> SubscriptionHandler.h:15</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1TCPSession_html"><div class="ttname"><a href="classcore_1_1TCPSession.html">core::TCPSession</a></div><div class="ttdef"><b>Definition:</b> TCPSession.h:24</div></div>
|
<div class="ttc" id="aclasscore_1_1TCPSession_html"><div class="ttname"><a href="classcore_1_1TCPSession.html">core::TCPSession</a></div><div class="ttdef"><b>Definition:</b> TCPSession.h:26</div></div>
|
||||||
</div><!-- fragment --></div><!-- contents -->
|
</div><!-- fragment --></div><!-- contents -->
|
||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<hr class="footer"/><address class="footer"><small>
|
<hr class="footer"/><address class="footer"><small>
|
||||||
|
@ -104,9 +104,9 @@ $(function() {
|
|||||||
<div class="ttc" id="aclasscore_1_1Command_html"><div class="ttname"><a href="classcore_1_1Command.html">core::Command</a></div><div class="ttdef"><b>Definition:</b> Command.h:22</div></div>
|
<div class="ttc" id="aclasscore_1_1Command_html"><div class="ttname"><a href="classcore_1_1Command.html">core::Command</a></div><div class="ttdef"><b>Definition:</b> Command.h:22</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1SubscriptionHandler_html"><div class="ttname"><a href="classcore_1_1SubscriptionHandler.html">core::SubscriptionHandler</a></div><div class="ttdef"><b>Definition:</b> SubscriptionHandler.h:15</div></div>
|
<div class="ttc" id="aclasscore_1_1SubscriptionHandler_html"><div class="ttname"><a href="classcore_1_1SubscriptionHandler.html">core::SubscriptionHandler</a></div><div class="ttdef"><b>Definition:</b> SubscriptionHandler.h:15</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1SubscriptionManager_html"><div class="ttname"><a href="classcore_1_1SubscriptionManager.html">core::SubscriptionManager</a></div><div class="ttdef"><b>Definition:</b> SubscriptionManager.h:14</div></div>
|
<div class="ttc" id="aclasscore_1_1SubscriptionManager_html"><div class="ttname"><a href="classcore_1_1SubscriptionManager.html">core::SubscriptionManager</a></div><div class="ttdef"><b>Definition:</b> SubscriptionManager.h:14</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1SubscriptionManager_html_aaa30bf772ad72b3f319a790662e4f8ae"><div class="ttname"><a href="classcore_1_1SubscriptionManager.html#aaa30bf772ad72b3f319a790662e4f8ae">core::SubscriptionManager::processCommand</a></div><div class="ttdeci">int processCommand(coreutils::ZString &request, TCPSession &session) override</div><div class="ttdef"><b>Definition:</b> SubscriptionManager.cpp:59</div></div>
|
<div class="ttc" id="aclasscore_1_1SubscriptionManager_html_aaa30bf772ad72b3f319a790662e4f8ae"><div class="ttname"><a href="classcore_1_1SubscriptionManager.html#aaa30bf772ad72b3f319a790662e4f8ae">core::SubscriptionManager::processCommand</a></div><div class="ttdeci">int processCommand(coreutils::ZString &request, TCPSession &session) override</div><div class="ttdef"><b>Definition:</b> SubscriptionManager.cpp:60</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1Subscription_html"><div class="ttname"><a href="classcore_1_1Subscription.html">core::Subscription</a></div><div class="ttdef"><b>Definition:</b> Subscription.h:15</div></div>
|
<div class="ttc" id="aclasscore_1_1Subscription_html"><div class="ttname"><a href="classcore_1_1Subscription.html">core::Subscription</a></div><div class="ttdef"><b>Definition:</b> Subscription.h:15</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1TCPSession_html"><div class="ttname"><a href="classcore_1_1TCPSession.html">core::TCPSession</a></div><div class="ttdef"><b>Definition:</b> TCPSession.h:24</div></div>
|
<div class="ttc" id="aclasscore_1_1TCPSession_html"><div class="ttname"><a href="classcore_1_1TCPSession.html">core::TCPSession</a></div><div class="ttdef"><b>Definition:</b> TCPSession.h:26</div></div>
|
||||||
</div><!-- fragment --></div><!-- contents -->
|
</div><!-- fragment --></div><!-- contents -->
|
||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<hr class="footer"/><address class="footer"><small>
|
<hr class="footer"/><address class="footer"><small>
|
||||||
|
@ -98,24 +98,26 @@ $(function() {
|
|||||||
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  </div>
|
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  </div>
|
||||||
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <span class="keywordtype">bool</span> ifSubscriber(<a class="code" href="classcore_1_1TCPSession.html">TCPSession</a> &session);</div>
|
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <span class="keywordtype">bool</span> ifSubscriber(<a class="code" href="classcore_1_1TCPSession.html">TCPSession</a> &session);</div>
|
||||||
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  </div>
|
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  </div>
|
||||||
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="comment">// void setHandler(SubscriptionHandler *handlers);</span></div>
|
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <span class="keywordtype">bool</span> subInvite(<a class="code" href="classcore_1_1TCPSession.html">TCPSession</a> &session);</div>
|
||||||
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  </div>
|
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  </div>
|
||||||
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="comment">// int processCommand(coreutils::ZString &request, TCPSession &session) override;</span></div>
|
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="comment">// void setHandler(SubscriptionHandler *handlers);</span></div>
|
||||||
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  </div>
|
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  </div>
|
||||||
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  std::string id;</div>
|
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="comment">// int processCommand(coreutils::ZString &request, TCPSession &session) override;</span></div>
|
||||||
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  std::string mode;</div>
|
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  </div>
|
||||||
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <a class="code" href="classcore_1_1TCPSession.html">TCPSession</a> *owner;</div>
|
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  std::string id;</div>
|
||||||
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  </div>
|
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  std::string mode;</div>
|
||||||
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <a class="code" href="classcore_1_1SubscriptionHandler.html">SubscriptionHandler</a> *handler;</div>
|
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <a class="code" href="classcore_1_1TCPSession.html">TCPSession</a> *owner;</div>
|
||||||
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  </div>
|
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  </div>
|
||||||
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  std::vector<TCPSession *> subscribers;</div>
|
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <a class="code" href="classcore_1_1SubscriptionHandler.html">SubscriptionHandler</a> *handler;</div>
|
||||||
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  };</div>
|
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  </div>
|
||||||
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> }</div>
|
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  std::vector<TCPSession *> subscribers;</div>
|
||||||
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  </div>
|
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  };</div>
|
||||||
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="preprocessor">#endif</span></div>
|
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> }</div>
|
||||||
|
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  </div>
|
||||||
|
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="preprocessor">#endif</span></div>
|
||||||
<div class="ttc" id="aclasscore_1_1SubscriptionHandler_html"><div class="ttname"><a href="classcore_1_1SubscriptionHandler.html">core::SubscriptionHandler</a></div><div class="ttdef"><b>Definition:</b> SubscriptionHandler.h:15</div></div>
|
<div class="ttc" id="aclasscore_1_1SubscriptionHandler_html"><div class="ttname"><a href="classcore_1_1SubscriptionHandler.html">core::SubscriptionHandler</a></div><div class="ttdef"><b>Definition:</b> SubscriptionHandler.h:15</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1Subscription_html"><div class="ttname"><a href="classcore_1_1Subscription.html">core::Subscription</a></div><div class="ttdef"><b>Definition:</b> Subscription.h:15</div></div>
|
<div class="ttc" id="aclasscore_1_1Subscription_html"><div class="ttname"><a href="classcore_1_1Subscription.html">core::Subscription</a></div><div class="ttdef"><b>Definition:</b> Subscription.h:15</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1TCPSession_html"><div class="ttname"><a href="classcore_1_1TCPSession.html">core::TCPSession</a></div><div class="ttdef"><b>Definition:</b> TCPSession.h:24</div></div>
|
<div class="ttc" id="aclasscore_1_1TCPSession_html"><div class="ttname"><a href="classcore_1_1TCPSession.html">core::TCPSession</a></div><div class="ttdef"><b>Definition:</b> TCPSession.h:26</div></div>
|
||||||
</div><!-- fragment --></div><!-- contents -->
|
</div><!-- fragment --></div><!-- contents -->
|
||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<hr class="footer"/><address class="footer"><small>
|
<hr class="footer"/><address class="footer"><small>
|
||||||
|
@ -68,97 +68,100 @@ $(function() {
|
|||||||
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="preprocessor">#ifndef __TCPServer_h__</span></div>
|
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="preprocessor">#ifndef __TCPServer_h__</span></div>
|
||||||
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="preprocessor">#define __TCPServer_h__</span></div>
|
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="preprocessor">#define __TCPServer_h__</span></div>
|
||||||
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>  </div>
|
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>  </div>
|
||||||
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#include "Socket.h"</span></div>
|
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#include "Command.h"</span></div>
|
||||||
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="preprocessor">#include "TCPSocket.h"</span></div>
|
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="preprocessor">#include "CommandList.h"</span></div>
|
||||||
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="preprocessor">#include "IPAddressList.h"</span></div>
|
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="preprocessor">#include "IPAddressList.h"</span></div>
|
||||||
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="preprocessor">#include "Command.h"</span></div>
|
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="preprocessor">#include "Socket.h"</span></div>
|
||||||
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="preprocessor">#include "CommandList.h"</span></div>
|
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="preprocessor">#include "SubscriptionManager.h"</span></div>
|
||||||
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor">#include "SubscriptionManager.h"</span></div>
|
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor">#include "TCPSession.h"</span></div>
|
||||||
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>  </div>
|
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="preprocessor">#include "TCPSocket.h"</span></div>
|
||||||
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="keyword">namespace </span>core {</div>
|
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>  </div>
|
||||||
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>  </div>
|
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="keyword">namespace </span>core</div>
|
||||||
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  </div>
|
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> {</div>
|
||||||
<div class="line"><a name="l00025"></a><span class="lineno"><a class="line" href="classcore_1_1TCPServer.html"> 25</a></span>  <span class="keyword">class </span><a class="code" href="classcore_1_1TCPServer.html">TCPServer</a> : <span class="keyword">public</span> <a class="code" href="classcore_1_1TCPSocket.html">TCPSocket</a>, <span class="keyword">public</span> <a class="code" href="classcore_1_1Command.html">Command</a> {</div>
|
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>  </div>
|
||||||
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  </div>
|
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  </div>
|
||||||
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <span class="keyword">public</span>:</div>
|
<div class="line"><a name="l00027"></a><span class="lineno"><a class="line" href="classcore_1_1TCPServer.html"> 27</a></span>  <span class="keyword">class </span><a class="code" href="classcore_1_1TCPServer.html">TCPServer</a> : <span class="keyword">public</span> <a class="code" href="classcore_1_1TCPSocket.html">TCPSocket</a>, <span class="keyword">public</span> <a class="code" href="classcore_1_1Command.html">Command</a></div>
|
||||||
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  </div>
|
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  {</div>
|
||||||
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  </div>
|
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  </div>
|
||||||
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <a class="code" href="classcore_1_1TCPServer.html#abaecb97c336b757d1029d45277f9fc5b">TCPServer</a>(<a class="code" href="classcore_1_1EPoll.html">EPoll</a> &ePoll, <a class="code" href="classcore_1_1IPAddress.html">IPAddress</a> address, std::string delimiter = <span class="stringliteral">" "</span>, <span class="keywordtype">int</span> depth = 10, std::string text = <span class="stringliteral">""</span>);</div>
|
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <span class="keyword">public</span>:</div>
|
||||||
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  </div>
|
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  </div>
|
||||||
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  </div>
|
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <a class="code" href="classcore_1_1TCPServer.html#abaecb97c336b757d1029d45277f9fc5b">TCPServer</a>(<a class="code" href="classcore_1_1EPoll.html">EPoll</a> &ePoll, <a class="code" href="classcore_1_1IPAddress.html">IPAddress</a> address, std::string delimiter = <span class="stringliteral">" "</span>, <span class="keywordtype">int</span> depth = 10, std::string text = <span class="stringliteral">""</span>);</div>
|
||||||
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keyword">virtual</span> <a class="code" href="classcore_1_1TCPServer.html#a7ccdc057c9eee8504fce796301f82088">~TCPServer</a>();</div>
|
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  </div>
|
||||||
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  </div>
|
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  </div>
|
||||||
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> sessionErrorHandler(std::string errorString, std::stringstream &out);</div>
|
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keyword">virtual</span> <a class="code" href="classcore_1_1TCPServer.html#a7ccdc057c9eee8504fce796301f82088">~TCPServer</a>();</div>
|
||||||
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  </div>
|
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  </div>
|
||||||
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  </div>
|
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> sessionErrorHandler(std::string errorString, std::stringstream &out);</div>
|
||||||
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <span class="keyword">virtual</span> <a class="code" href="classcore_1_1TCPSession.html">TCPSession</a> * <a class="code" href="classcore_1_1TCPServer.html#a841f02799ad8529aad7cea132f4de8a9">getSocketAccept</a>(<a class="code" href="classcore_1_1EPoll.html">EPoll</a> &epoll);</div>
|
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> compareAlias(<span class="keywordtype">void</span> *alias, <span class="keywordtype">void</span> *compare);</div>
|
||||||
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  </div>
|
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  </div>
|
||||||
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  </div>
|
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="keyword">virtual</span> <a class="code" href="classcore_1_1TCPSession.html">TCPSession</a> *<a class="code" href="classcore_1_1TCPServer.html#a841f02799ad8529aad7cea132f4de8a9">getSocketAccept</a>(<a class="code" href="classcore_1_1EPoll.html">EPoll</a> &epoll);</div>
|
||||||
<div class="line"><a name="l00062"></a><span class="lineno"><a class="line" href="classcore_1_1TCPServer.html#aeed1bc55d099667ccda51cd682bfc633"> 62</a></span>  std::vector<TCPSession *> <a class="code" href="classcore_1_1TCPServer.html#aeed1bc55d099667ccda51cd682bfc633">sessions</a>;</div>
|
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  </div>
|
||||||
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  </div>
|
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  </div>
|
||||||
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  </div>
|
<div class="line"><a name="l00064"></a><span class="lineno"><a class="line" href="classcore_1_1TCPServer.html#aeed1bc55d099667ccda51cd682bfc633"> 64</a></span>  std::vector<TCPSession *> <a class="code" href="classcore_1_1TCPServer.html#aeed1bc55d099667ccda51cd682bfc633">sessions</a>;</div>
|
||||||
<div class="line"><a name="l00069"></a><span class="lineno"><a class="line" href="classcore_1_1TCPServer.html#afcc44802b988e2f4292504e804dccf8b"> 69</a></span>  <a class="code" href="classcore_1_1CommandList.html">CommandList</a> <a class="code" href="classcore_1_1TCPServer.html#afcc44802b988e2f4292504e804dccf8b">commands</a>;</div>
|
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  </div>
|
||||||
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  </div>
|
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  </div>
|
||||||
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  </div>
|
<div class="line"><a name="l00071"></a><span class="lineno"><a class="line" href="classcore_1_1TCPServer.html#afcc44802b988e2f4292504e804dccf8b"> 71</a></span>  <a class="code" href="classcore_1_1CommandList.html">CommandList</a> <a class="code" href="classcore_1_1TCPServer.html#afcc44802b988e2f4292504e804dccf8b">commands</a>;</div>
|
||||||
<div class="line"><a name="l00077"></a><span class="lineno"><a class="line" href="classcore_1_1TCPServer.html#a82f6bf16e4ab20d8b30da09e034fffff"> 77</a></span>  <a class="code" href="classcore_1_1IPAddressList.html">IPAddressList</a> *<a class="code" href="classcore_1_1TCPServer.html#a82f6bf16e4ab20d8b30da09e034fffff">blackList</a>;</div>
|
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  </div>
|
||||||
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  </div>
|
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  </div>
|
||||||
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  </div>
|
<div class="line"><a name="l00079"></a><span class="lineno"><a class="line" href="classcore_1_1TCPServer.html#a82f6bf16e4ab20d8b30da09e034fffff"> 79</a></span>  <a class="code" href="classcore_1_1IPAddressList.html">IPAddressList</a> *<a class="code" href="classcore_1_1TCPServer.html#a82f6bf16e4ab20d8b30da09e034fffff">blackList</a>;</div>
|
||||||
<div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="classcore_1_1TCPServer.html#abad6300b6234ca8b69cef9128755342e"> 85</a></span>  <a class="code" href="classcore_1_1IPAddressList.html">IPAddressList</a> *<a class="code" href="classcore_1_1TCPServer.html#abad6300b6234ca8b69cef9128755342e">whiteList</a>;</div>
|
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  </div>
|
||||||
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  </div>
|
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  </div>
|
||||||
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <span class="keywordtype">void</span> removeFromSessionList(<a class="code" href="classcore_1_1TCPSession.html">TCPSession</a> *session);</div>
|
<div class="line"><a name="l00087"></a><span class="lineno"><a class="line" href="classcore_1_1TCPServer.html#abad6300b6234ca8b69cef9128755342e"> 87</a></span>  <a class="code" href="classcore_1_1IPAddressList.html">IPAddressList</a> *<a class="code" href="classcore_1_1TCPServer.html#abad6300b6234ca8b69cef9128755342e">whiteList</a>;</div>
|
||||||
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  </div>
|
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  </div>
|
||||||
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="keywordtype">void</span> <a class="code" href="classcore_1_1TCPServer.html#a49e3ead1bf4e7830685780e73c4db5db">output</a>(std::stringstream &out); </div>
|
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="keywordtype">void</span> removeFromSessionList(<a class="code" href="classcore_1_1TCPSession.html">TCPSession</a> *session);</div>
|
||||||
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  </div>
|
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  </div>
|
||||||
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  </div>
|
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <span class="keywordtype">void</span> <a class="code" href="classcore_1_1TCPServer.html#a49e3ead1bf4e7830685780e73c4db5db">output</a>(std::stringstream &out); </div>
|
||||||
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <span class="keywordtype">void</span> sendToAll(std::stringstream &out);</div>
|
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  </div>
|
||||||
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  </div>
|
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  </div>
|
||||||
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  </div>
|
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <span class="keywordtype">void</span> sendToAll(std::stringstream &out);</div>
|
||||||
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  <span class="keywordtype">void</span> sendToAll(std::stringstream &out, <a class="code" href="classcore_1_1TCPSession.html">TCPSession</a> &sender, <a class="code" href="classcore_1_1SessionFilter.html">SessionFilter</a> filter);</div>
|
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  </div>
|
||||||
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  </div>
|
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  </div>
|
||||||
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  </div>
|
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <span class="keywordtype">void</span> sendToAll(std::stringstream &out, <a class="code" href="classcore_1_1TCPSession.html">TCPSession</a> &sender, <a class="code" href="classcore_1_1SessionFilter.html">SessionFilter</a> filter);</div>
|
||||||
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <span class="keywordtype">void</span> sendToAll(std::stringstream &out, <a class="code" href="classcore_1_1TCPSession.html">TCPSession</a> &sender);</div>
|
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  </div>
|
||||||
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  </div>
|
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  </div>
|
||||||
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  </div>
|
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <span class="keywordtype">void</span> sendToAll(std::stringstream &out, <a class="code" href="classcore_1_1TCPSession.html">TCPSession</a> &sender);</div>
|
||||||
<div class="line"><a name="l00116"></a><span class="lineno"><a class="line" href="classcore_1_1TCPServer.html#a28302dd844cfc971ee41de2000d24aa0"> 116</a></span>  <a class="code" href="classcore_1_1SubscriptionManager.html">SubscriptionManager</a> <a class="code" href="classcore_1_1TCPServer.html#a28302dd844cfc971ee41de2000d24aa0">subscriptions</a>;</div>
|
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  </div>
|
||||||
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  </div>
|
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  </div>
|
||||||
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <span class="keyword">protected</span>:</div>
|
<div class="line"><a name="l00118"></a><span class="lineno"><a class="line" href="classcore_1_1TCPServer.html#a28302dd844cfc971ee41de2000d24aa0"> 118</a></span>  <a class="code" href="classcore_1_1SubscriptionManager.html">SubscriptionManager</a> <a class="code" href="classcore_1_1TCPServer.html#a28302dd844cfc971ee41de2000d24aa0">subscriptions</a>;</div>
|
||||||
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  </div>
|
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  </div>
|
||||||
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  </div>
|
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  </div>
|
||||||
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  <span class="keywordtype">void</span> <a class="code" href="classcore_1_1TCPServer.html#a276ccbc8cb9b4380ebd78807b97f0159">onDataReceived</a>(std::string data) <span class="keyword">override</span>;</div>
|
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <a class="code" href="classcore_1_1TCPSession.html">TCPSession</a> *<a class="code" href="classcore_1_1TCPServer.html#a9042281193e227a6cd8dab3ff8b46a40">getSessionByAlias</a>(<span class="keywordtype">void</span> *alias);</div>
|
||||||
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  </div>
|
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  </div>
|
||||||
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  </div>
|
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <span class="keyword">protected</span>:</div>
|
||||||
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  <span class="keywordtype">int</span> <a class="code" href="classcore_1_1TCPServer.html#a6b7a7e1ac4132942fcaf418ed41c1437">processCommand</a>(coreutils::ZString &request, <a class="code" href="classcore_1_1TCPSession.html">TCPSession</a> &session) <span class="keyword">override</span>;</div>
|
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  </div>
|
||||||
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  </div>
|
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <span class="keywordtype">void</span> <a class="code" href="classcore_1_1TCPServer.html#a276ccbc8cb9b4380ebd78807b97f0159">onDataReceived</a>(std::string data) <span class="keyword">override</span>;</div>
|
||||||
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  <span class="keyword">private</span>:</div>
|
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  </div>
|
||||||
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  </div>
|
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  </div>
|
||||||
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <a class="code" href="classcore_1_1TCPSession.html">TCPSession</a> * accept();</div>
|
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <span class="keywordtype">int</span> <a class="code" href="classcore_1_1TCPServer.html#a6b7a7e1ac4132942fcaf418ed41c1437">processCommand</a>(coreutils::ZString &request, <a class="code" href="classcore_1_1TCPSession.html">TCPSession</a> &session) <span class="keyword">override</span>;</div>
|
||||||
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  std::mutex lock;</div>
|
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  </div>
|
||||||
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  </div>
|
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  <span class="keyword">private</span>:</div>
|
||||||
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  };</div>
|
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <a class="code" href="classcore_1_1TCPSession.html">TCPSession</a> *accept();</div>
|
||||||
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  </div>
|
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  std::mutex lock;</div>
|
||||||
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> }</div>
|
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  };</div>
|
||||||
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  </div>
|
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  </div>
|
||||||
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <span class="preprocessor">#endif</span></div>
|
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> }</div>
|
||||||
|
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  </div>
|
||||||
|
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="preprocessor">#endif</span></div>
|
||||||
<div class="ttc" id="aclasscore_1_1CommandList_html"><div class="ttname"><a href="classcore_1_1CommandList.html">core::CommandList</a></div><div class="ttdef"><b>Definition:</b> CommandList.h:18</div></div>
|
<div class="ttc" id="aclasscore_1_1CommandList_html"><div class="ttname"><a href="classcore_1_1CommandList.html">core::CommandList</a></div><div class="ttdef"><b>Definition:</b> CommandList.h:18</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1Command_html"><div class="ttname"><a href="classcore_1_1Command.html">core::Command</a></div><div class="ttdef"><b>Definition:</b> Command.h:22</div></div>
|
<div class="ttc" id="aclasscore_1_1Command_html"><div class="ttname"><a href="classcore_1_1Command.html">core::Command</a></div><div class="ttdef"><b>Definition:</b> Command.h:22</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1EPoll_html"><div class="ttname"><a href="classcore_1_1EPoll.html">core::EPoll</a></div><div class="ttdef"><b>Definition:</b> EPoll.h:31</div></div>
|
<div class="ttc" id="aclasscore_1_1EPoll_html"><div class="ttname"><a href="classcore_1_1EPoll.html">core::EPoll</a></div><div class="ttdef"><b>Definition:</b> EPoll.h:31</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1IPAddressList_html"><div class="ttname"><a href="classcore_1_1IPAddressList.html">core::IPAddressList</a></div><div class="ttdef"><b>Definition:</b> IPAddressList.h:9</div></div>
|
<div class="ttc" id="aclasscore_1_1IPAddressList_html"><div class="ttname"><a href="classcore_1_1IPAddressList.html">core::IPAddressList</a></div><div class="ttdef"><b>Definition:</b> IPAddressList.h:9</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1IPAddress_html"><div class="ttname"><a href="classcore_1_1IPAddress.html">core::IPAddress</a></div><div class="ttdef"><b>Definition:</b> IPAddress.h:9</div></div>
|
<div class="ttc" id="aclasscore_1_1IPAddress_html"><div class="ttname"><a href="classcore_1_1IPAddress.html">core::IPAddress</a></div><div class="ttdef"><b>Definition:</b> IPAddress.h:9</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1SessionFilter_html"><div class="ttname"><a href="classcore_1_1SessionFilter.html">core::SessionFilter</a></div><div class="ttdef"><b>Definition:</b> SessionFilter.h:10</div></div>
|
<div class="ttc" id="aclasscore_1_1SessionFilter_html"><div class="ttname"><a href="classcore_1_1SessionFilter.html">core::SessionFilter</a></div><div class="ttdef"><b>Definition:</b> SessionFilter.h:13</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1SubscriptionManager_html"><div class="ttname"><a href="classcore_1_1SubscriptionManager.html">core::SubscriptionManager</a></div><div class="ttdef"><b>Definition:</b> SubscriptionManager.h:14</div></div>
|
<div class="ttc" id="aclasscore_1_1SubscriptionManager_html"><div class="ttname"><a href="classcore_1_1SubscriptionManager.html">core::SubscriptionManager</a></div><div class="ttdef"><b>Definition:</b> SubscriptionManager.h:14</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1TCPServer_html"><div class="ttname"><a href="classcore_1_1TCPServer.html">core::TCPServer</a></div><div class="ttdef"><b>Definition:</b> TCPServer.h:25</div></div>
|
<div class="ttc" id="aclasscore_1_1TCPServer_html"><div class="ttname"><a href="classcore_1_1TCPServer.html">core::TCPServer</a></div><div class="ttdef"><b>Definition:</b> TCPServer.h:28</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1TCPServer_html_a276ccbc8cb9b4380ebd78807b97f0159"><div class="ttname"><a href="classcore_1_1TCPServer.html#a276ccbc8cb9b4380ebd78807b97f0159">core::TCPServer::onDataReceived</a></div><div class="ttdeci">void onDataReceived(std::string data) override</div><div class="ttdef"><b>Definition:</b> TCPServer.cpp:36</div></div>
|
<div class="ttc" id="aclasscore_1_1TCPServer_html_a276ccbc8cb9b4380ebd78807b97f0159"><div class="ttname"><a href="classcore_1_1TCPServer.html#a276ccbc8cb9b4380ebd78807b97f0159">core::TCPServer::onDataReceived</a></div><div class="ttdeci">void onDataReceived(std::string data) override</div><div class="ttdef"><b>Definition:</b> TCPServer.cpp:39</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1TCPServer_html_a28302dd844cfc971ee41de2000d24aa0"><div class="ttname"><a href="classcore_1_1TCPServer.html#a28302dd844cfc971ee41de2000d24aa0">core::TCPServer::subscriptions</a></div><div class="ttdeci">SubscriptionManager subscriptions</div><div class="ttdef"><b>Definition:</b> TCPServer.h:116</div></div>
|
<div class="ttc" id="aclasscore_1_1TCPServer_html_a28302dd844cfc971ee41de2000d24aa0"><div class="ttname"><a href="classcore_1_1TCPServer.html#a28302dd844cfc971ee41de2000d24aa0">core::TCPServer::subscriptions</a></div><div class="ttdeci">SubscriptionManager subscriptions</div><div class="ttdef"><b>Definition:</b> TCPServer.h:118</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1TCPServer_html_a49e3ead1bf4e7830685780e73c4db5db"><div class="ttname"><a href="classcore_1_1TCPServer.html#a49e3ead1bf4e7830685780e73c4db5db">core::TCPServer::output</a></div><div class="ttdeci">void output(std::stringstream &out)</div><div class="ttdoc">Output the consoles array to the console.</div><div class="ttdef"><b>Definition:</b> TCPServer.cpp:90</div></div>
|
<div class="ttc" id="aclasscore_1_1TCPServer_html_a49e3ead1bf4e7830685780e73c4db5db"><div class="ttname"><a href="classcore_1_1TCPServer.html#a49e3ead1bf4e7830685780e73c4db5db">core::TCPServer::output</a></div><div class="ttdeci">void output(std::stringstream &out)</div><div class="ttdoc">Output the consoles array to the console.</div><div class="ttdef"><b>Definition:</b> TCPServer.cpp:99</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1TCPServer_html_a6b7a7e1ac4132942fcaf418ed41c1437"><div class="ttname"><a href="classcore_1_1TCPServer.html#a6b7a7e1ac4132942fcaf418ed41c1437">core::TCPServer::processCommand</a></div><div class="ttdeci">int processCommand(coreutils::ZString &request, TCPSession &session) override</div><div class="ttdef"><b>Definition:</b> TCPServer.cpp:94</div></div>
|
<div class="ttc" id="aclasscore_1_1TCPServer_html_a6b7a7e1ac4132942fcaf418ed41c1437"><div class="ttname"><a href="classcore_1_1TCPServer.html#a6b7a7e1ac4132942fcaf418ed41c1437">core::TCPServer::processCommand</a></div><div class="ttdeci">int processCommand(coreutils::ZString &request, TCPSession &session) override</div><div class="ttdef"><b>Definition:</b> TCPServer.cpp:104</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1TCPServer_html_a7ccdc057c9eee8504fce796301f82088"><div class="ttname"><a href="classcore_1_1TCPServer.html#a7ccdc057c9eee8504fce796301f82088">core::TCPServer::~TCPServer</a></div><div class="ttdeci">virtual ~TCPServer()</div><div class="ttdef"><b>Definition:</b> TCPServer.cpp:31</div></div>
|
<div class="ttc" id="aclasscore_1_1TCPServer_html_a7ccdc057c9eee8504fce796301f82088"><div class="ttname"><a href="classcore_1_1TCPServer.html#a7ccdc057c9eee8504fce796301f82088">core::TCPServer::~TCPServer</a></div><div class="ttdeci">virtual ~TCPServer()</div><div class="ttdef"><b>Definition:</b> TCPServer.cpp:33</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1TCPServer_html_a82f6bf16e4ab20d8b30da09e034fffff"><div class="ttname"><a href="classcore_1_1TCPServer.html#a82f6bf16e4ab20d8b30da09e034fffff">core::TCPServer::blackList</a></div><div class="ttdeci">IPAddressList * blackList</div><div class="ttdef"><b>Definition:</b> TCPServer.h:77</div></div>
|
<div class="ttc" id="aclasscore_1_1TCPServer_html_a82f6bf16e4ab20d8b30da09e034fffff"><div class="ttname"><a href="classcore_1_1TCPServer.html#a82f6bf16e4ab20d8b30da09e034fffff">core::TCPServer::blackList</a></div><div class="ttdeci">IPAddressList * blackList</div><div class="ttdef"><b>Definition:</b> TCPServer.h:79</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1TCPServer_html_a841f02799ad8529aad7cea132f4de8a9"><div class="ttname"><a href="classcore_1_1TCPServer.html#a841f02799ad8529aad7cea132f4de8a9">core::TCPServer::getSocketAccept</a></div><div class="ttdeci">virtual TCPSession * getSocketAccept(EPoll &epoll)</div><div class="ttdef"><b>Definition:</b> TCPServer.cpp:86</div></div>
|
<div class="ttc" id="aclasscore_1_1TCPServer_html_a841f02799ad8529aad7cea132f4de8a9"><div class="ttname"><a href="classcore_1_1TCPServer.html#a841f02799ad8529aad7cea132f4de8a9">core::TCPServer::getSocketAccept</a></div><div class="ttdeci">virtual TCPSession * getSocketAccept(EPoll &epoll)</div><div class="ttdef"><b>Definition:</b> TCPServer.cpp:94</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1TCPServer_html_abad6300b6234ca8b69cef9128755342e"><div class="ttname"><a href="classcore_1_1TCPServer.html#abad6300b6234ca8b69cef9128755342e">core::TCPServer::whiteList</a></div><div class="ttdeci">IPAddressList * whiteList</div><div class="ttdef"><b>Definition:</b> TCPServer.h:85</div></div>
|
<div class="ttc" id="aclasscore_1_1TCPServer_html_a9042281193e227a6cd8dab3ff8b46a40"><div class="ttname"><a href="classcore_1_1TCPServer.html#a9042281193e227a6cd8dab3ff8b46a40">core::TCPServer::getSessionByAlias</a></div><div class="ttdeci">TCPSession * getSessionByAlias(void *alias)</div><div class="ttdef"><b>Definition:</b> TCPServer.cpp:140</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1TCPServer_html_abaecb97c336b757d1029d45277f9fc5b"><div class="ttname"><a href="classcore_1_1TCPServer.html#abaecb97c336b757d1029d45277f9fc5b">core::TCPServer::TCPServer</a></div><div class="ttdeci">TCPServer(EPoll &ePoll, IPAddress address, std::string delimiter=" ", int depth=10, std::string text="")</div><div class="ttdef"><b>Definition:</b> TCPServer.cpp:9</div></div>
|
<div class="ttc" id="aclasscore_1_1TCPServer_html_abad6300b6234ca8b69cef9128755342e"><div class="ttname"><a href="classcore_1_1TCPServer.html#abad6300b6234ca8b69cef9128755342e">core::TCPServer::whiteList</a></div><div class="ttdeci">IPAddressList * whiteList</div><div class="ttdef"><b>Definition:</b> TCPServer.h:87</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1TCPServer_html_aeed1bc55d099667ccda51cd682bfc633"><div class="ttname"><a href="classcore_1_1TCPServer.html#aeed1bc55d099667ccda51cd682bfc633">core::TCPServer::sessions</a></div><div class="ttdeci">std::vector< TCPSession * > sessions</div><div class="ttdef"><b>Definition:</b> TCPServer.h:62</div></div>
|
<div class="ttc" id="aclasscore_1_1TCPServer_html_abaecb97c336b757d1029d45277f9fc5b"><div class="ttname"><a href="classcore_1_1TCPServer.html#abaecb97c336b757d1029d45277f9fc5b">core::TCPServer::TCPServer</a></div><div class="ttdeci">TCPServer(EPoll &ePoll, IPAddress address, std::string delimiter=" ", int depth=10, std::string text="")</div><div class="ttdef"><b>Definition:</b> TCPServer.cpp:10</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1TCPServer_html_afcc44802b988e2f4292504e804dccf8b"><div class="ttname"><a href="classcore_1_1TCPServer.html#afcc44802b988e2f4292504e804dccf8b">core::TCPServer::commands</a></div><div class="ttdeci">CommandList commands</div><div class="ttdef"><b>Definition:</b> TCPServer.h:69</div></div>
|
<div class="ttc" id="aclasscore_1_1TCPServer_html_aeed1bc55d099667ccda51cd682bfc633"><div class="ttname"><a href="classcore_1_1TCPServer.html#aeed1bc55d099667ccda51cd682bfc633">core::TCPServer::sessions</a></div><div class="ttdeci">std::vector< TCPSession * > sessions</div><div class="ttdef"><b>Definition:</b> TCPServer.h:64</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1TCPSession_html"><div class="ttname"><a href="classcore_1_1TCPSession.html">core::TCPSession</a></div><div class="ttdef"><b>Definition:</b> TCPSession.h:24</div></div>
|
<div class="ttc" id="aclasscore_1_1TCPServer_html_afcc44802b988e2f4292504e804dccf8b"><div class="ttname"><a href="classcore_1_1TCPServer.html#afcc44802b988e2f4292504e804dccf8b">core::TCPServer::commands</a></div><div class="ttdeci">CommandList commands</div><div class="ttdef"><b>Definition:</b> TCPServer.h:71</div></div>
|
||||||
|
<div class="ttc" id="aclasscore_1_1TCPSession_html"><div class="ttname"><a href="classcore_1_1TCPSession.html">core::TCPSession</a></div><div class="ttdef"><b>Definition:</b> TCPSession.h:26</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1TCPSocket_html"><div class="ttname"><a href="classcore_1_1TCPSocket.html">core::TCPSocket</a></div><div class="ttdef"><b>Definition:</b> TCPSocket.h:20</div></div>
|
<div class="ttc" id="aclasscore_1_1TCPSocket_html"><div class="ttname"><a href="classcore_1_1TCPSocket.html">core::TCPSocket</a></div><div class="ttdef"><b>Definition:</b> TCPSocket.h:20</div></div>
|
||||||
</div><!-- fragment --></div><!-- contents -->
|
</div><!-- fragment --></div><!-- contents -->
|
||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
|
@ -66,94 +66,97 @@ $(function() {
|
|||||||
</div><!--header-->
|
</div><!--header-->
|
||||||
<div class="contents">
|
<div class="contents">
|
||||||
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="preprocessor">#ifndef __Session_h__</span></div>
|
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="preprocessor">#ifndef __Session_h__</span></div>
|
||||||
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="preprocessor"># define __Session_h__</span></div>
|
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="preprocessor">#define __Session_h__</span></div>
|
||||||
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>  </div>
|
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>  </div>
|
||||||
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#include "TCPSocket.h"</span></div>
|
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#include "SessionFilter.h"</span></div>
|
||||||
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="preprocessor">#include "SessionFilter.h"</span></div>
|
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="preprocessor">#include "TCPSocket.h"</span></div>
|
||||||
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>  </div>
|
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>  </div>
|
||||||
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="keyword">namespace </span>core {</div>
|
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="keyword">namespace </span>core</div>
|
||||||
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>  </div>
|
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> {</div>
|
||||||
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>  <span class="keyword">class </span>Command;</div>
|
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>  </div>
|
||||||
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>  <span class="keyword">class </span>TCPServer;</div>
|
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>  <span class="keyword">class </span>Command;</div>
|
||||||
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>  </div>
|
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>  <span class="keyword">class </span>TCPServer;</div>
|
||||||
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  </div>
|
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>  </div>
|
||||||
<div class="line"><a name="l00024"></a><span class="lineno"><a class="line" href="classcore_1_1TCPSession.html"> 24</a></span>  <span class="keyword">class </span><a class="code" href="classcore_1_1TCPSession.html">TCPSession</a> : <span class="keyword">public</span> <a class="code" href="classcore_1_1TCPSocket.html">TCPSocket</a> {</div>
|
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  </div>
|
||||||
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  </div>
|
<div class="line"><a name="l00025"></a><span class="lineno"><a class="line" href="classcore_1_1TCPSession.html"> 25</a></span>  <span class="keyword">class </span><a class="code" href="classcore_1_1TCPSession.html">TCPSession</a> : <span class="keyword">public</span> <a class="code" href="classcore_1_1TCPSocket.html">TCPSocket</a></div>
|
||||||
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <span class="keyword">public</span>:</div>
|
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  {</div>
|
||||||
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  </div>
|
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  </div>
|
||||||
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  </div>
|
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <span class="keyword">public</span>:</div>
|
||||||
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <a class="code" href="classcore_1_1TCPSession.html">TCPSession</a>(<a class="code" href="classcore_1_1EPoll.html">EPoll</a> &ePoll, <a class="code" href="classcore_1_1TCPServer.html">TCPServer</a> &server, std::string text = <span class="stringliteral">""</span>);</div>
|
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  </div>
|
||||||
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  </div>
|
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <a class="code" href="classcore_1_1TCPSession.html">TCPSession</a>(<a class="code" href="classcore_1_1EPoll.html">EPoll</a> &ePoll, <a class="code" href="classcore_1_1TCPServer.html">TCPServer</a> &server, std::string text = <span class="stringliteral">""</span>);</div>
|
||||||
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  </div>
|
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  </div>
|
||||||
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keyword">virtual</span> ~<a class="code" href="classcore_1_1TCPSession.html">TCPSession</a>();</div>
|
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  </div>
|
||||||
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  </div>
|
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keyword">virtual</span> ~<a class="code" href="classcore_1_1TCPSession.html">TCPSession</a>();</div>
|
||||||
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <a class="code" href="classcore_1_1Command.html">Command</a> *grab = NULL;</div>
|
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  </div>
|
||||||
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  </div>
|
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <a class="code" href="classcore_1_1Command.html">Command</a> *grab = NULL;</div>
|
||||||
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classcore_1_1TCPSession.html#a50037cbfc515650e04054e5481785981">output</a>(std::stringstream &data);</div>
|
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  </div>
|
||||||
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  </div>
|
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classcore_1_1TCPSession.html#a50037cbfc515650e04054e5481785981">output</a>(std::stringstream &data);</div>
|
||||||
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  </div>
|
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  </div>
|
||||||
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keywordtype">void</span> <a class="code" href="classcore_1_1TCPSession.html#a2b09eeafef5e44009a77d9da43e3b889">send</a>();</div>
|
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  </div>
|
||||||
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  </div>
|
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keywordtype">void</span> <a class="code" href="classcore_1_1TCPSession.html#a2b09eeafef5e44009a77d9da43e3b889">send</a>();</div>
|
||||||
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  </div>
|
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  </div>
|
||||||
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="keywordtype">void</span> <a class="code" href="classcore_1_1TCPSession.html#a34936745e8d7669d5400e78d353a56d3">terminate</a>();</div>
|
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  </div>
|
||||||
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  </div>
|
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <span class="keywordtype">void</span> <a class="code" href="classcore_1_1TCPSession.html#a34936745e8d7669d5400e78d353a56d3">terminate</a>();</div>
|
||||||
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  </div>
|
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  </div>
|
||||||
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <a class="code" href="classcore_1_1TCPServer.html">TCPServer</a> &server;</div>
|
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  </div>
|
||||||
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  </div>
|
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <a class="code" href="classcore_1_1TCPServer.html">TCPServer</a> &server;</div>
|
||||||
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  </div>
|
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  </div>
|
||||||
<div class="line"><a name="l00067"></a><span class="lineno"><a class="line" href="classcore_1_1TCPSession.html#abb302bbb3d7e7bc75490c736364f0d4d"> 67</a></span>  std::stringstream <a class="code" href="classcore_1_1TCPSession.html#abb302bbb3d7e7bc75490c736364f0d4d">out</a>;</div>
|
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  </div>
|
||||||
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  </div>
|
<div class="line"><a name="l00068"></a><span class="lineno"><a class="line" href="classcore_1_1TCPSession.html#abb302bbb3d7e7bc75490c736364f0d4d"> 68</a></span>  std::stringstream <a class="code" href="classcore_1_1TCPSession.html#abb302bbb3d7e7bc75490c736364f0d4d">out</a>;</div>
|
||||||
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="keyword">protected</span>:</div>
|
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  </div>
|
||||||
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  </div>
|
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keywordtype">char</span> uuid[37];</div>
|
||||||
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  </div>
|
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  </div>
|
||||||
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classcore_1_1TCPSession.html#aed4ed499b978bcea57a8efefe929fc98">onRegistered</a>() <span class="keyword">override</span>;</div>
|
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="keywordtype">void</span> *alias;</div>
|
||||||
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  </div>
|
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  </div>
|
||||||
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classcore_1_1TCPSession.html#afc2d2a92bc65e1e5122a93d120253a1d">onDataReceived</a>(coreutils::ZString &data) <span class="keyword">override</span>;</div>
|
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="keyword">protected</span>:</div>
|
||||||
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  </div>
|
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  </div>
|
||||||
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  </div>
|
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classcore_1_1TCPSession.html#aed4ed499b978bcea57a8efefe929fc98">onRegistered</a>() <span class="keyword">override</span>;</div>
|
||||||
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classcore_1_1TCPSession.html#a3d9e0f14e7d24357fd1950b3f9b4eaff">onLineReceived</a>(coreutils::ZString &line);</div>
|
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  </div>
|
||||||
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  </div>
|
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classcore_1_1TCPSession.html#afc2d2a92bc65e1e5122a93d120253a1d">onDataReceived</a>(coreutils::ZString &data) <span class="keyword">override</span>;</div>
|
||||||
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  </div>
|
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  </div>
|
||||||
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classcore_1_1TCPSession.html#a9c996cbbfa2e592c23cf67ed8b15a32a">onBlockReceived</a>(coreutils::ZString &block);</div>
|
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  </div>
|
||||||
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  </div>
|
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classcore_1_1TCPSession.html#a3d9e0f14e7d24357fd1950b3f9b4eaff">onLineReceived</a>(coreutils::ZString &line);</div>
|
||||||
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  </div>
|
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  </div>
|
||||||
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classcore_1_1TCPSession.html#a8719952f7bb00bf7239ec40aa2868626">onConnected</a>();</div>
|
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  </div>
|
||||||
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  </div>
|
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classcore_1_1TCPSession.html#a9c996cbbfa2e592c23cf67ed8b15a32a">onBlockReceived</a>(coreutils::ZString &block);</div>
|
||||||
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  </div>
|
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  </div>
|
||||||
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classcore_1_1TCPSession.html#a98a65da2346b79bee659fca6902e94c7">protocol</a>(coreutils::ZString &data);</div>
|
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  </div>
|
||||||
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  </div>
|
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classcore_1_1TCPSession.html#a8719952f7bb00bf7239ec40aa2868626">onConnected</a>();</div>
|
||||||
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  </div>
|
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  </div>
|
||||||
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <span class="keywordtype">void</span> <a class="code" href="classcore_1_1TCPSession.html#a836fb3fd5ee543ebc93262a980ae88b5">setBlockSize</a>(<span class="keywordtype">int</span> size = 0);</div>
|
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  </div>
|
||||||
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  </div>
|
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classcore_1_1TCPSession.html#a98a65da2346b79bee659fca6902e94c7">protocol</a>(coreutils::ZString &data);</div>
|
||||||
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  <span class="keyword">private</span>:</div>
|
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  </div>
|
||||||
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <span class="keywordtype">char</span> *lineBuffer = NULL;</div>
|
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  </div>
|
||||||
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <span class="keywordtype">int</span> lineBufferSize = 0;</div>
|
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <span class="keywordtype">void</span> <a class="code" href="classcore_1_1TCPSession.html#a836fb3fd5ee543ebc93262a980ae88b5">setBlockSize</a>(<span class="keywordtype">int</span> size = 0);</div>
|
||||||
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <span class="keywordtype">int</span> lineLength = 0;</div>
|
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  </div>
|
||||||
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  <span class="keywordtype">int</span> blockLength = 0;</div>
|
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  <span class="keyword">private</span>:</div>
|
||||||
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  std::mutex mtx;</div>
|
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  <span class="keywordtype">char</span> *lineBuffer = NULL;</div>
|
||||||
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <span class="keywordtype">bool</span> term = <span class="keyword">false</span>;</div>
|
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <span class="keywordtype">int</span> lineBufferSize = 0;</div>
|
||||||
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <span class="keywordtype">int</span> blockSize = 0;</div>
|
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <span class="keywordtype">int</span> lineLength = 0;</div>
|
||||||
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  </div>
|
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <span class="keywordtype">int</span> blockLength = 0;</div>
|
||||||
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  };</div>
|
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  std::mutex mtx;</div>
|
||||||
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  </div>
|
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <span class="keywordtype">bool</span> term = <span class="keyword">false</span>;</div>
|
||||||
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> }</div>
|
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  <span class="keywordtype">int</span> blockSize = 0;</div>
|
||||||
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  </div>
|
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  };</div>
|
||||||
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="preprocessor">#endif</span></div>
|
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  </div>
|
||||||
|
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> }</div>
|
||||||
|
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  </div>
|
||||||
|
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> <span class="preprocessor">#endif</span></div>
|
||||||
<div class="ttc" id="aclasscore_1_1Command_html"><div class="ttname"><a href="classcore_1_1Command.html">core::Command</a></div><div class="ttdef"><b>Definition:</b> Command.h:22</div></div>
|
<div class="ttc" id="aclasscore_1_1Command_html"><div class="ttname"><a href="classcore_1_1Command.html">core::Command</a></div><div class="ttdef"><b>Definition:</b> Command.h:22</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1EPoll_html"><div class="ttname"><a href="classcore_1_1EPoll.html">core::EPoll</a></div><div class="ttdef"><b>Definition:</b> EPoll.h:31</div></div>
|
<div class="ttc" id="aclasscore_1_1EPoll_html"><div class="ttname"><a href="classcore_1_1EPoll.html">core::EPoll</a></div><div class="ttdef"><b>Definition:</b> EPoll.h:31</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1TCPServer_html"><div class="ttname"><a href="classcore_1_1TCPServer.html">core::TCPServer</a></div><div class="ttdef"><b>Definition:</b> TCPServer.h:25</div></div>
|
<div class="ttc" id="aclasscore_1_1TCPServer_html"><div class="ttname"><a href="classcore_1_1TCPServer.html">core::TCPServer</a></div><div class="ttdef"><b>Definition:</b> TCPServer.h:28</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1TCPSession_html"><div class="ttname"><a href="classcore_1_1TCPSession.html">core::TCPSession</a></div><div class="ttdef"><b>Definition:</b> TCPSession.h:24</div></div>
|
<div class="ttc" id="aclasscore_1_1TCPSession_html"><div class="ttname"><a href="classcore_1_1TCPSession.html">core::TCPSession</a></div><div class="ttdef"><b>Definition:</b> TCPSession.h:26</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1TCPSession_html_a2b09eeafef5e44009a77d9da43e3b889"><div class="ttname"><a href="classcore_1_1TCPSession.html#a2b09eeafef5e44009a77d9da43e3b889">core::TCPSession::send</a></div><div class="ttdeci">void send()</div><div class="ttdef"><b>Definition:</b> TCPSession.cpp:84</div></div>
|
<div class="ttc" id="aclasscore_1_1TCPSession_html_a2b09eeafef5e44009a77d9da43e3b889"><div class="ttname"><a href="classcore_1_1TCPSession.html#a2b09eeafef5e44009a77d9da43e3b889">core::TCPSession::send</a></div><div class="ttdeci">void send()</div><div class="ttdef"><b>Definition:</b> TCPSession.cpp:111</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1TCPSession_html_a34936745e8d7669d5400e78d353a56d3"><div class="ttname"><a href="classcore_1_1TCPSession.html#a34936745e8d7669d5400e78d353a56d3">core::TCPSession::terminate</a></div><div class="ttdeci">void terminate()</div><div class="ttdef"><b>Definition:</b> TCPSession.cpp:90</div></div>
|
<div class="ttc" id="aclasscore_1_1TCPSession_html_a34936745e8d7669d5400e78d353a56d3"><div class="ttname"><a href="classcore_1_1TCPSession.html#a34936745e8d7669d5400e78d353a56d3">core::TCPSession::terminate</a></div><div class="ttdeci">void terminate()</div><div class="ttdef"><b>Definition:</b> TCPSession.cpp:118</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1TCPSession_html_a3d9e0f14e7d24357fd1950b3f9b4eaff"><div class="ttname"><a href="classcore_1_1TCPSession.html#a3d9e0f14e7d24357fd1950b3f9b4eaff">core::TCPSession::onLineReceived</a></div><div class="ttdeci">virtual void onLineReceived(coreutils::ZString &line)</div><div class="ttdef"><b>Definition:</b> TCPSession.cpp:71</div></div>
|
<div class="ttc" id="aclasscore_1_1TCPSession_html_a3d9e0f14e7d24357fd1950b3f9b4eaff"><div class="ttname"><a href="classcore_1_1TCPSession.html#a3d9e0f14e7d24357fd1950b3f9b4eaff">core::TCPSession::onLineReceived</a></div><div class="ttdeci">virtual void onLineReceived(coreutils::ZString &line)</div><div class="ttdef"><b>Definition:</b> TCPSession.cpp:96</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1TCPSession_html_a50037cbfc515650e04054e5481785981"><div class="ttname"><a href="classcore_1_1TCPSession.html#a50037cbfc515650e04054e5481785981">core::TCPSession::output</a></div><div class="ttdeci">virtual void output(std::stringstream &data)</div><div class="ttdef"><b>Definition:</b> TCPSession.cpp:15</div></div>
|
<div class="ttc" id="aclasscore_1_1TCPSession_html_a50037cbfc515650e04054e5481785981"><div class="ttname"><a href="classcore_1_1TCPSession.html#a50037cbfc515650e04054e5481785981">core::TCPSession::output</a></div><div class="ttdeci">virtual void output(std::stringstream &data)</div><div class="ttdef"><b>Definition:</b> TCPSession.cpp:25</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1TCPSession_html_a836fb3fd5ee543ebc93262a980ae88b5"><div class="ttname"><a href="classcore_1_1TCPSession.html#a836fb3fd5ee543ebc93262a980ae88b5">core::TCPSession::setBlockSize</a></div><div class="ttdeci">void setBlockSize(int size=0)</div><div class="ttdef"><b>Definition:</b> TCPSession.cpp:67</div></div>
|
<div class="ttc" id="aclasscore_1_1TCPSession_html_a836fb3fd5ee543ebc93262a980ae88b5"><div class="ttname"><a href="classcore_1_1TCPSession.html#a836fb3fd5ee543ebc93262a980ae88b5">core::TCPSession::setBlockSize</a></div><div class="ttdeci">void setBlockSize(int size=0)</div><div class="ttdef"><b>Definition:</b> TCPSession.cpp:91</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1TCPSession_html_a8719952f7bb00bf7239ec40aa2868626"><div class="ttname"><a href="classcore_1_1TCPSession.html#a8719952f7bb00bf7239ec40aa2868626">core::TCPSession::onConnected</a></div><div class="ttdeci">virtual void onConnected()</div><div class="ttdef"><b>Definition:</b> TCPSession.cpp:33</div></div>
|
<div class="ttc" id="aclasscore_1_1TCPSession_html_a8719952f7bb00bf7239ec40aa2868626"><div class="ttname"><a href="classcore_1_1TCPSession.html#a8719952f7bb00bf7239ec40aa2868626">core::TCPSession::onConnected</a></div><div class="ttdeci">virtual void onConnected()</div><div class="ttdef"><b>Definition:</b> TCPSession.cpp:51</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1TCPSession_html_a98a65da2346b79bee659fca6902e94c7"><div class="ttname"><a href="classcore_1_1TCPSession.html#a98a65da2346b79bee659fca6902e94c7">core::TCPSession::protocol</a></div><div class="ttdeci">virtual void protocol(coreutils::ZString &data)</div><div class="ttdef"><b>Definition:</b> TCPSession.cpp:19</div></div>
|
<div class="ttc" id="aclasscore_1_1TCPSession_html_a98a65da2346b79bee659fca6902e94c7"><div class="ttname"><a href="classcore_1_1TCPSession.html#a98a65da2346b79bee659fca6902e94c7">core::TCPSession::protocol</a></div><div class="ttdeci">virtual void protocol(coreutils::ZString &data)</div><div class="ttdef"><b>Definition:</b> TCPSession.cpp:30</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1TCPSession_html_a9c996cbbfa2e592c23cf67ed8b15a32a"><div class="ttname"><a href="classcore_1_1TCPSession.html#a9c996cbbfa2e592c23cf67ed8b15a32a">core::TCPSession::onBlockReceived</a></div><div class="ttdeci">virtual void onBlockReceived(coreutils::ZString &block)</div><div class="ttdef"><b>Definition:</b> TCPSession.cpp:78</div></div>
|
<div class="ttc" id="aclasscore_1_1TCPSession_html_a9c996cbbfa2e592c23cf67ed8b15a32a"><div class="ttname"><a href="classcore_1_1TCPSession.html#a9c996cbbfa2e592c23cf67ed8b15a32a">core::TCPSession::onBlockReceived</a></div><div class="ttdeci">virtual void onBlockReceived(coreutils::ZString &block)</div><div class="ttdef"><b>Definition:</b> TCPSession.cpp:104</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1TCPSession_html_abb302bbb3d7e7bc75490c736364f0d4d"><div class="ttname"><a href="classcore_1_1TCPSession.html#abb302bbb3d7e7bc75490c736364f0d4d">core::TCPSession::out</a></div><div class="ttdeci">std::stringstream out</div><div class="ttdef"><b>Definition:</b> TCPSession.h:67</div></div>
|
<div class="ttc" id="aclasscore_1_1TCPSession_html_abb302bbb3d7e7bc75490c736364f0d4d"><div class="ttname"><a href="classcore_1_1TCPSession.html#abb302bbb3d7e7bc75490c736364f0d4d">core::TCPSession::out</a></div><div class="ttdeci">std::stringstream out</div><div class="ttdef"><b>Definition:</b> TCPSession.h:68</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1TCPSession_html_aed4ed499b978bcea57a8efefe929fc98"><div class="ttname"><a href="classcore_1_1TCPSession.html#aed4ed499b978bcea57a8efefe929fc98">core::TCPSession::onRegistered</a></div><div class="ttdeci">virtual void onRegistered() override</div><div class="ttdoc">Called after the socket has been registered with epoll processing.</div><div class="ttdef"><b>Definition:</b> TCPSession.cpp:24</div></div>
|
<div class="ttc" id="aclasscore_1_1TCPSession_html_aed4ed499b978bcea57a8efefe929fc98"><div class="ttname"><a href="classcore_1_1TCPSession.html#aed4ed499b978bcea57a8efefe929fc98">core::TCPSession::onRegistered</a></div><div class="ttdeci">virtual void onRegistered() override</div><div class="ttdoc">Called after the socket has been registered with epoll processing.</div><div class="ttdef"><b>Definition:</b> TCPSession.cpp:41</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1TCPSession_html_afc2d2a92bc65e1e5122a93d120253a1d"><div class="ttname"><a href="classcore_1_1TCPSession.html#afc2d2a92bc65e1e5122a93d120253a1d">core::TCPSession::onDataReceived</a></div><div class="ttdeci">virtual void onDataReceived(coreutils::ZString &data) override</div><div class="ttdef"><b>Definition:</b> TCPSession.cpp:35</div></div>
|
<div class="ttc" id="aclasscore_1_1TCPSession_html_afc2d2a92bc65e1e5122a93d120253a1d"><div class="ttname"><a href="classcore_1_1TCPSession.html#afc2d2a92bc65e1e5122a93d120253a1d">core::TCPSession::onDataReceived</a></div><div class="ttdeci">virtual void onDataReceived(coreutils::ZString &data) override</div><div class="ttdef"><b>Definition:</b> TCPSession.cpp:53</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1TCPSocket_html"><div class="ttname"><a href="classcore_1_1TCPSocket.html">core::TCPSocket</a></div><div class="ttdef"><b>Definition:</b> TCPSocket.h:20</div></div>
|
<div class="ttc" id="aclasscore_1_1TCPSocket_html"><div class="ttname"><a href="classcore_1_1TCPSocket.html">core::TCPSocket</a></div><div class="ttdef"><b>Definition:</b> TCPSocket.h:20</div></div>
|
||||||
</div><!-- fragment --></div><!-- contents -->
|
</div><!-- fragment --></div><!-- contents -->
|
||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
|
@ -104,8 +104,8 @@ $(function() {
|
|||||||
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="preprocessor">#endif</span></div>
|
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="preprocessor">#endif</span></div>
|
||||||
<div class="ttc" id="aclasscore_1_1EPoll_html"><div class="ttname"><a href="classcore_1_1EPoll.html">core::EPoll</a></div><div class="ttdef"><b>Definition:</b> EPoll.h:31</div></div>
|
<div class="ttc" id="aclasscore_1_1EPoll_html"><div class="ttname"><a href="classcore_1_1EPoll.html">core::EPoll</a></div><div class="ttdef"><b>Definition:</b> EPoll.h:31</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1IPAddress_html"><div class="ttname"><a href="classcore_1_1IPAddress.html">core::IPAddress</a></div><div class="ttdef"><b>Definition:</b> IPAddress.h:9</div></div>
|
<div class="ttc" id="aclasscore_1_1IPAddress_html"><div class="ttname"><a href="classcore_1_1IPAddress.html">core::IPAddress</a></div><div class="ttdef"><b>Definition:</b> IPAddress.h:9</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1TCPServer_html"><div class="ttname"><a href="classcore_1_1TCPServer.html">core::TCPServer</a></div><div class="ttdef"><b>Definition:</b> TCPServer.h:25</div></div>
|
<div class="ttc" id="aclasscore_1_1TCPServer_html"><div class="ttname"><a href="classcore_1_1TCPServer.html">core::TCPServer</a></div><div class="ttdef"><b>Definition:</b> TCPServer.h:28</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1TCPSession_html"><div class="ttname"><a href="classcore_1_1TCPSession.html">core::TCPSession</a></div><div class="ttdef"><b>Definition:</b> TCPSession.h:24</div></div>
|
<div class="ttc" id="aclasscore_1_1TCPSession_html"><div class="ttname"><a href="classcore_1_1TCPSession.html">core::TCPSession</a></div><div class="ttdef"><b>Definition:</b> TCPSession.h:26</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1TLSServer_html"><div class="ttname"><a href="classcore_1_1TLSServer.html">core::TLSServer</a></div><div class="ttdef"><b>Definition:</b> TLSServer.h:19</div></div>
|
<div class="ttc" id="aclasscore_1_1TLSServer_html"><div class="ttname"><a href="classcore_1_1TLSServer.html">core::TLSServer</a></div><div class="ttdef"><b>Definition:</b> TLSServer.h:19</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1TLSServer_html_a6460f9872936015efdfd0b8de04aa2fe"><div class="ttname"><a href="classcore_1_1TLSServer.html#a6460f9872936015efdfd0b8de04aa2fe">core::TLSServer::TLSServer</a></div><div class="ttdeci">TLSServer(EPoll &ePoll, IPAddress address)</div><div class="ttdef"><b>Definition:</b> TLSServer.cpp:22</div></div>
|
<div class="ttc" id="aclasscore_1_1TLSServer_html_a6460f9872936015efdfd0b8de04aa2fe"><div class="ttname"><a href="classcore_1_1TLSServer.html#a6460f9872936015efdfd0b8de04aa2fe">core::TLSServer::TLSServer</a></div><div class="ttdeci">TLSServer(EPoll &ePoll, IPAddress address)</div><div class="ttdef"><b>Definition:</b> TLSServer.cpp:22</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1TLSServer_html_ac71db77c796a1bf65357409cb96054c7"><div class="ttname"><a href="classcore_1_1TLSServer.html#ac71db77c796a1bf65357409cb96054c7">core::TLSServer::~TLSServer</a></div><div class="ttdeci">~TLSServer()</div><div class="ttdef"><b>Definition:</b> TLSServer.cpp:58</div></div>
|
<div class="ttc" id="aclasscore_1_1TLSServer_html_ac71db77c796a1bf65357409cb96054c7"><div class="ttname"><a href="classcore_1_1TLSServer.html#ac71db77c796a1bf65357409cb96054c7">core::TLSServer::~TLSServer</a></div><div class="ttdeci">~TLSServer()</div><div class="ttdef"><b>Definition:</b> TLSServer.cpp:58</div></div>
|
||||||
|
@ -104,9 +104,9 @@ $(function() {
|
|||||||
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  </div>
|
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  </div>
|
||||||
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="preprocessor">#endif</span></div>
|
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="preprocessor">#endif</span></div>
|
||||||
<div class="ttc" id="aclasscore_1_1EPoll_html"><div class="ttname"><a href="classcore_1_1EPoll.html">core::EPoll</a></div><div class="ttdef"><b>Definition:</b> EPoll.h:31</div></div>
|
<div class="ttc" id="aclasscore_1_1EPoll_html"><div class="ttname"><a href="classcore_1_1EPoll.html">core::EPoll</a></div><div class="ttdef"><b>Definition:</b> EPoll.h:31</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1TCPServer_html"><div class="ttname"><a href="classcore_1_1TCPServer.html">core::TCPServer</a></div><div class="ttdef"><b>Definition:</b> TCPServer.h:25</div></div>
|
<div class="ttc" id="aclasscore_1_1TCPServer_html"><div class="ttname"><a href="classcore_1_1TCPServer.html">core::TCPServer</a></div><div class="ttdef"><b>Definition:</b> TCPServer.h:28</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1TCPSession_html"><div class="ttname"><a href="classcore_1_1TCPSession.html">core::TCPSession</a></div><div class="ttdef"><b>Definition:</b> TCPSession.h:24</div></div>
|
<div class="ttc" id="aclasscore_1_1TCPSession_html"><div class="ttname"><a href="classcore_1_1TCPSession.html">core::TCPSession</a></div><div class="ttdef"><b>Definition:</b> TCPSession.h:26</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1TCPSession_html_abb302bbb3d7e7bc75490c736364f0d4d"><div class="ttname"><a href="classcore_1_1TCPSession.html#abb302bbb3d7e7bc75490c736364f0d4d">core::TCPSession::out</a></div><div class="ttdeci">std::stringstream out</div><div class="ttdef"><b>Definition:</b> TCPSession.h:67</div></div>
|
<div class="ttc" id="aclasscore_1_1TCPSession_html_abb302bbb3d7e7bc75490c736364f0d4d"><div class="ttname"><a href="classcore_1_1TCPSession.html#abb302bbb3d7e7bc75490c736364f0d4d">core::TCPSession::out</a></div><div class="ttdeci">std::stringstream out</div><div class="ttdef"><b>Definition:</b> TCPSession.h:68</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1TLSSession_html"><div class="ttname"><a href="classcore_1_1TLSSession.html">core::TLSSession</a></div><div class="ttdef"><b>Definition:</b> TLSSession.h:23</div></div>
|
<div class="ttc" id="aclasscore_1_1TLSSession_html"><div class="ttname"><a href="classcore_1_1TLSSession.html">core::TLSSession</a></div><div class="ttdef"><b>Definition:</b> TLSSession.h:23</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1TLSSession_html_a208145cc1fcdc14054602aacc2c51d91"><div class="ttname"><a href="classcore_1_1TLSSession.html#a208145cc1fcdc14054602aacc2c51d91">core::TLSSession::protocol</a></div><div class="ttdeci">virtual void protocol(coreutils::ZString &data) override</div><div class="ttdef"><b>Definition:</b> TLSSession.cpp:83</div></div>
|
<div class="ttc" id="aclasscore_1_1TLSSession_html_a208145cc1fcdc14054602aacc2c51d91"><div class="ttname"><a href="classcore_1_1TLSSession.html#a208145cc1fcdc14054602aacc2c51d91">core::TLSSession::protocol</a></div><div class="ttdeci">virtual void protocol(coreutils::ZString &data) override</div><div class="ttdef"><b>Definition:</b> TLSSession.cpp:83</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1TLSSession_html_a76cec7cf4851eb27abe77a2339344c6d"><div class="ttname"><a href="classcore_1_1TLSSession.html#a76cec7cf4851eb27abe77a2339344c6d">core::TLSSession::onRegister</a></div><div class="ttdeci">void onRegister()</div><div class="ttdoc">Called before the socket has registered with the epoll processing.</div><div class="ttdef"><b>Definition:</b> TLSSession.cpp:36</div></div>
|
<div class="ttc" id="aclasscore_1_1TLSSession_html_a76cec7cf4851eb27abe77a2339344c6d"><div class="ttname"><a href="classcore_1_1TLSSession.html#a76cec7cf4851eb27abe77a2339344c6d">core::TLSSession::onRegister</a></div><div class="ttdeci">void onRegister()</div><div class="ttdoc">Called before the socket has registered with the epoll processing.</div><div class="ttdef"><b>Definition:</b> TLSSession.cpp:36</div></div>
|
||||||
|
@ -124,8 +124,8 @@ $(function() {
|
|||||||
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  </div>
|
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  </div>
|
||||||
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="preprocessor">#endif</span></div>
|
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="preprocessor">#endif</span></div>
|
||||||
<div class="ttc" id="aclasscore_1_1EPoll_html"><div class="ttname"><a href="classcore_1_1EPoll.html">core::EPoll</a></div><div class="ttdef"><b>Definition:</b> EPoll.h:31</div></div>
|
<div class="ttc" id="aclasscore_1_1EPoll_html"><div class="ttname"><a href="classcore_1_1EPoll.html">core::EPoll</a></div><div class="ttdef"><b>Definition:</b> EPoll.h:31</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1TCPServer_html"><div class="ttname"><a href="classcore_1_1TCPServer.html">core::TCPServer</a></div><div class="ttdef"><b>Definition:</b> TCPServer.h:25</div></div>
|
<div class="ttc" id="aclasscore_1_1TCPServer_html"><div class="ttname"><a href="classcore_1_1TCPServer.html">core::TCPServer</a></div><div class="ttdef"><b>Definition:</b> TCPServer.h:28</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1TCPSession_html"><div class="ttname"><a href="classcore_1_1TCPSession.html">core::TCPSession</a></div><div class="ttdef"><b>Definition:</b> TCPSession.h:24</div></div>
|
<div class="ttc" id="aclasscore_1_1TCPSession_html"><div class="ttname"><a href="classcore_1_1TCPSession.html">core::TCPSession</a></div><div class="ttdef"><b>Definition:</b> TCPSession.h:26</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1TerminalSession_html"><div class="ttname"><a href="classcore_1_1TerminalSession.html">core::TerminalSession</a></div><div class="ttdef"><b>Definition:</b> TerminalSession.h:30</div></div>
|
<div class="ttc" id="aclasscore_1_1TerminalSession_html"><div class="ttname"><a href="classcore_1_1TerminalSession.html">core::TerminalSession</a></div><div class="ttdef"><b>Definition:</b> TerminalSession.h:30</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1TerminalSession_html_a42bb06857891220a831da04248233935"><div class="ttname"><a href="classcore_1_1TerminalSession.html#a42bb06857891220a831da04248233935">core::TerminalSession::clear</a></div><div class="ttdeci">void clear()</div><div class="ttdef"><b>Definition:</b> TerminalSession.cpp:17</div></div>
|
<div class="ttc" id="aclasscore_1_1TerminalSession_html_a42bb06857891220a831da04248233935"><div class="ttname"><a href="classcore_1_1TerminalSession.html#a42bb06857891220a831da04248233935">core::TerminalSession::clear</a></div><div class="ttdeci">void clear()</div><div class="ttdef"><b>Definition:</b> TerminalSession.cpp:17</div></div>
|
||||||
<div class="ttc" id="aclasscore_1_1TerminalSession_html_aa660768eed03b0b996a749e8a146446c"><div class="ttname"><a href="classcore_1_1TerminalSession.html#aa660768eed03b0b996a749e8a146446c">core::TerminalSession::clearEOL</a></div><div class="ttdeci">void clearEOL()</div><div class="ttdef"><b>Definition:</b> TerminalSession.cpp:21</div></div>
|
<div class="ttc" id="aclasscore_1_1TerminalSession_html_aa660768eed03b0b996a749e8a146446c"><div class="ttname"><a href="classcore_1_1TerminalSession.html#aa660768eed03b0b996a749e8a146446c">core::TerminalSession::clearEOL</a></div><div class="ttdeci">void clearEOL()</div><div class="ttdef"><b>Definition:</b> TerminalSession.cpp:21</div></div>
|
||||||
|
@ -74,12 +74,14 @@ $(function() {
|
|||||||
<table class="directory">
|
<table class="directory">
|
||||||
<tr class="even"><td class="entry"><a class="el" href="classcore_1_1TCPServer.html#a82f6bf16e4ab20d8b30da09e034fffff">blackList</a></td><td class="entry"><a class="el" href="classcore_1_1TCPServer.html">core::TCPServer</a></td><td class="entry"></td></tr>
|
<tr class="even"><td class="entry"><a class="el" href="classcore_1_1TCPServer.html#a82f6bf16e4ab20d8b30da09e034fffff">blackList</a></td><td class="entry"><a class="el" href="classcore_1_1TCPServer.html">core::TCPServer</a></td><td class="entry"></td></tr>
|
||||||
<tr><td class="entry"><a class="el" href="classcore_1_1TCPServer.html#afcc44802b988e2f4292504e804dccf8b">commands</a></td><td class="entry"><a class="el" href="classcore_1_1TCPServer.html">core::TCPServer</a></td><td class="entry"></td></tr>
|
<tr><td class="entry"><a class="el" href="classcore_1_1TCPServer.html#afcc44802b988e2f4292504e804dccf8b">commands</a></td><td class="entry"><a class="el" href="classcore_1_1TCPServer.html">core::TCPServer</a></td><td class="entry"></td></tr>
|
||||||
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>connect</b>(IPAddress &address) (defined in <a class="el" href="classcore_1_1TCPSocket.html">core::TCPSocket</a>)</td><td class="entry"><a class="el" href="classcore_1_1TCPSocket.html">core::TCPSocket</a></td><td class="entry"></td></tr>
|
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>compareAlias</b>(void *alias, void *compare) (defined in <a class="el" href="classcore_1_1TCPServer.html">core::TCPServer</a>)</td><td class="entry"><a class="el" href="classcore_1_1TCPServer.html">core::TCPServer</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
|
||||||
<tr bgcolor="#f0f0f0"><td class="entry"><b>ConsoleServer</b>(EPoll &ePoll, IPAddress address) (defined in <a class="el" href="classcore_1_1ConsoleServer.html">core::ConsoleServer</a>)</td><td class="entry"><a class="el" href="classcore_1_1ConsoleServer.html">core::ConsoleServer</a></td><td class="entry"></td></tr>
|
<tr bgcolor="#f0f0f0"><td class="entry"><b>connect</b>(IPAddress &address) (defined in <a class="el" href="classcore_1_1TCPSocket.html">core::TCPSocket</a>)</td><td class="entry"><a class="el" href="classcore_1_1TCPSocket.html">core::TCPSocket</a></td><td class="entry"></td></tr>
|
||||||
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>ePoll</b> (defined in <a class="el" href="classcore_1_1Socket.html">core::Socket</a>)</td><td class="entry"><a class="el" href="classcore_1_1Socket.html">core::Socket</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
|
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>ConsoleServer</b>(EPoll &ePoll, IPAddress address) (defined in <a class="el" href="classcore_1_1ConsoleServer.html">core::ConsoleServer</a>)</td><td class="entry"><a class="el" href="classcore_1_1ConsoleServer.html">core::ConsoleServer</a></td><td class="entry"></td></tr>
|
||||||
<tr><td class="entry"><a class="el" href="classcore_1_1Socket.html#a1a045e15fb5851d666a21be05ac4c5d7">eventReceived</a>(struct epoll_event event, long long eventId)</td><td class="entry"><a class="el" href="classcore_1_1Socket.html">core::Socket</a></td><td class="entry"></td></tr>
|
<tr bgcolor="#f0f0f0"><td class="entry"><b>ePoll</b> (defined in <a class="el" href="classcore_1_1Socket.html">core::Socket</a>)</td><td class="entry"><a class="el" href="classcore_1_1Socket.html">core::Socket</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
|
||||||
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getBufferSize</b>() (defined in <a class="el" href="classcore_1_1Socket.html">core::Socket</a>)</td><td class="entry"><a class="el" href="classcore_1_1Socket.html">core::Socket</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
|
<tr class="even"><td class="entry"><a class="el" href="classcore_1_1Socket.html#a1a045e15fb5851d666a21be05ac4c5d7">eventReceived</a>(struct epoll_event event, long long eventId)</td><td class="entry"><a class="el" href="classcore_1_1Socket.html">core::Socket</a></td><td class="entry"></td></tr>
|
||||||
<tr><td class="entry"><a class="el" href="classcore_1_1Socket.html#a06ba54744530439d4131e6aba4623d08">getDescriptor</a>()</td><td class="entry"><a class="el" href="classcore_1_1Socket.html">core::Socket</a></td><td class="entry"></td></tr>
|
<tr bgcolor="#f0f0f0"><td class="entry"><b>getBufferSize</b>() (defined in <a class="el" href="classcore_1_1Socket.html">core::Socket</a>)</td><td class="entry"><a class="el" href="classcore_1_1Socket.html">core::Socket</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
|
||||||
|
<tr class="even"><td class="entry"><a class="el" href="classcore_1_1Socket.html#a06ba54744530439d4131e6aba4623d08">getDescriptor</a>()</td><td class="entry"><a class="el" href="classcore_1_1Socket.html">core::Socket</a></td><td class="entry"></td></tr>
|
||||||
|
<tr><td class="entry"><a class="el" href="classcore_1_1TCPServer.html#a9042281193e227a6cd8dab3ff8b46a40">getSessionByAlias</a>(void *alias)</td><td class="entry"><a class="el" href="classcore_1_1TCPServer.html">core::TCPServer</a></td><td class="entry"></td></tr>
|
||||||
<tr class="even"><td class="entry"><a class="el" href="classcore_1_1ConsoleServer.html#a80d9ea7f3fc5e07c50d5b9e0d4943ca8">getSocketAccept</a>(EPoll &ePoll) override</td><td class="entry"><a class="el" href="classcore_1_1ConsoleServer.html">core::ConsoleServer</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
|
<tr class="even"><td class="entry"><a class="el" href="classcore_1_1ConsoleServer.html#a80d9ea7f3fc5e07c50d5b9e0d4943ca8">getSocketAccept</a>(EPoll &ePoll) override</td><td class="entry"><a class="el" href="classcore_1_1ConsoleServer.html">core::ConsoleServer</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
|
||||||
<tr bgcolor="#f0f0f0"><td class="entry"><b>ipAddress</b> (defined in <a class="el" href="classcore_1_1TCPSocket.html">core::TCPSocket</a>)</td><td class="entry"><a class="el" href="classcore_1_1TCPSocket.html">core::TCPSocket</a></td><td class="entry"></td></tr>
|
<tr bgcolor="#f0f0f0"><td class="entry"><b>ipAddress</b> (defined in <a class="el" href="classcore_1_1TCPSocket.html">core::TCPSocket</a>)</td><td class="entry"><a class="el" href="classcore_1_1TCPSocket.html">core::TCPSocket</a></td><td class="entry"></td></tr>
|
||||||
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>logSend</b>(std::string out) override (defined in <a class="el" href="classcore_1_1ConsoleServer.html">core::ConsoleServer</a>)</td><td class="entry"><a class="el" href="classcore_1_1ConsoleServer.html">core::ConsoleServer</a></td><td class="entry"></td></tr>
|
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>logSend</b>(std::string out) override (defined in <a class="el" href="classcore_1_1ConsoleServer.html">core::ConsoleServer</a>)</td><td class="entry"><a class="el" href="classcore_1_1ConsoleServer.html">core::ConsoleServer</a></td><td class="entry"></td></tr>
|
||||||
@ -102,8 +104,8 @@ $(function() {
|
|||||||
<tr><td class="entry"><a class="el" href="classcore_1_1TCPServer.html#aeed1bc55d099667ccda51cd682bfc633">sessions</a></td><td class="entry"><a class="el" href="classcore_1_1TCPServer.html">core::TCPServer</a></td><td class="entry"></td></tr>
|
<tr><td class="entry"><a class="el" href="classcore_1_1TCPServer.html#aeed1bc55d099667ccda51cd682bfc633">sessions</a></td><td class="entry"><a class="el" href="classcore_1_1TCPServer.html">core::TCPServer</a></td><td class="entry"></td></tr>
|
||||||
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setBufferSize</b>(int length) (defined in <a class="el" href="classcore_1_1Socket.html">core::Socket</a>)</td><td class="entry"><a class="el" href="classcore_1_1Socket.html">core::Socket</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
|
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setBufferSize</b>(int length) (defined in <a class="el" href="classcore_1_1Socket.html">core::Socket</a>)</td><td class="entry"><a class="el" href="classcore_1_1Socket.html">core::Socket</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
|
||||||
<tr><td class="entry"><a class="el" href="classcore_1_1Socket.html#ac44f6ae3196a8a3e09a6a85fcf495762">setDescriptor</a>(int descriptor)</td><td class="entry"><a class="el" href="classcore_1_1Socket.html">core::Socket</a></td><td class="entry"></td></tr>
|
<tr><td class="entry"><a class="el" href="classcore_1_1Socket.html#ac44f6ae3196a8a3e09a6a85fcf495762">setDescriptor</a>(int descriptor)</td><td class="entry"><a class="el" href="classcore_1_1Socket.html">core::Socket</a></td><td class="entry"></td></tr>
|
||||||
<tr class="even"><td class="entry"><a class="el" href="classcore_1_1Socket.html#af2d1b6de7a64a9d446b0305b6ec47b31">shutdown</a>(std::string text="unknown")</td><td class="entry"><a class="el" href="classcore_1_1Socket.html">core::Socket</a></td><td class="entry"></td></tr>
|
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>shutDown</b> (defined in <a class="el" href="classcore_1_1Socket.html">core::Socket</a>)</td><td class="entry"><a class="el" href="classcore_1_1Socket.html">core::Socket</a></td><td class="entry"></td></tr>
|
||||||
<tr bgcolor="#f0f0f0"><td class="entry"><b>shutDown</b> (defined in <a class="el" href="classcore_1_1Socket.html">core::Socket</a>)</td><td class="entry"><a class="el" href="classcore_1_1Socket.html">core::Socket</a></td><td class="entry"></td></tr>
|
<tr><td class="entry"><a class="el" href="classcore_1_1Socket.html#af2d1b6de7a64a9d446b0305b6ec47b31">shutdown</a>(std::string text="unknown")</td><td class="entry"><a class="el" href="classcore_1_1Socket.html">core::Socket</a></td><td class="entry"></td></tr>
|
||||||
<tr class="even"><td class="entry"><a class="el" href="classcore_1_1Socket.html#a4c3f87fd1de3c9eab4bf5efbb30ce87d">Socket</a>(EPoll &ePoll, std::string text="")</td><td class="entry"><a class="el" href="classcore_1_1Socket.html">core::Socket</a></td><td class="entry"></td></tr>
|
<tr class="even"><td class="entry"><a class="el" href="classcore_1_1Socket.html#a4c3f87fd1de3c9eab4bf5efbb30ce87d">Socket</a>(EPoll &ePoll, std::string text="")</td><td class="entry"><a class="el" href="classcore_1_1Socket.html">core::Socket</a></td><td class="entry"></td></tr>
|
||||||
<tr><td class="entry"><a class="el" href="classcore_1_1TCPServer.html#a28302dd844cfc971ee41de2000d24aa0">subscriptions</a></td><td class="entry"><a class="el" href="classcore_1_1TCPServer.html">core::TCPServer</a></td><td class="entry"></td></tr>
|
<tr><td class="entry"><a class="el" href="classcore_1_1TCPServer.html#a28302dd844cfc971ee41de2000d24aa0">subscriptions</a></td><td class="entry"><a class="el" href="classcore_1_1TCPServer.html">core::TCPServer</a></td><td class="entry"></td></tr>
|
||||||
<tr class="even"><td class="entry"><a class="el" href="classcore_1_1TCPServer.html#abaecb97c336b757d1029d45277f9fc5b">TCPServer</a>(EPoll &ePoll, IPAddress address, std::string delimiter=" ", int depth=10, std::string text="")</td><td class="entry"><a class="el" href="classcore_1_1TCPServer.html">core::TCPServer</a></td><td class="entry"></td></tr>
|
<tr class="even"><td class="entry"><a class="el" href="classcore_1_1TCPServer.html#abaecb97c336b757d1029d45277f9fc5b">TCPServer</a>(EPoll &ePoll, IPAddress address, std::string delimiter=" ", int depth=10, std::string text="")</td><td class="entry"><a class="el" href="classcore_1_1TCPServer.html">core::TCPServer</a></td><td class="entry"></td></tr>
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user