*NEXT/*DIE

This commit is contained in:
Brad committed 2023-06-19 23:22:46 +00:00
1 parent 48be555724
commit 9a39b6224c
14 files changed
+352 -209

No files matched your search

+65 -25
View File
@@ -1,42 +1,56 @@
#include "Subscription.h"
#include "Log.h"
#include "TCPSession.h"
#include "TCPSocket.h"
#include <algorithm>
namespace core {
namespace core
{
Subscription::Subscription(std::string id, std::string mode)
: id(id), mode(mode), owner(NULL), handler(NULL) {}
: id(id), mode(mode), owner(NULL), handler(NULL) {}
Subscription::Subscription(std::string id, TCPSession &session, std::string mode)
: id(id), mode(mode), owner(&session), handler(NULL) {}
Subscription::Subscription(std::string id, coreutils::MString *alias, std::string mode)
: id(id), mode(mode), owner(alias), handler(NULL) {}
Subscription::Subscription(std::string id, TCPSession &session, std::string mode, SubscriptionHandler *handler)
: id(id), mode(mode), owner(&session), handler(handler) {
// coreutils::Log(coreutils::LOG_DEBUG_3) << "Subscription '" << id << "' with handler '" << handler->name << "'";
}
Subscription::Subscription(std::string id, coreutils::MString *alias, std::string ownership, std::string mode, SubscriptionHandler *handler, std::string will, std::string timer)
: id(id), ownership(ownership), mode(mode), owner(alias), handler(handler), will(will), timer(timer)
{
// coreutils::Log(coreutils::LOG_DEBUG_3) << "Subscription '" << id << "' with handler '" << handler->name << "'";
}
Subscription::~Subscription()
{
Subscription::~Subscription() {
std::stringstream out;
out << "cancel:" << id << std::endl;
for (auto subscriber : subscribers) {
for (auto subscriber : subscribers)
{
subscriber->write(out.str());
}
}
int Subscription::subscribe(TCPSession &session) {
int Subscription::subscribe(TCPSession &session)
{
if (handler)
handler->onSubscribe(session, this);
handler->onSubscribe(session, this);
else
onSubscribe(session);
onSubscribe(session);
subscribers.push_back(&session);
return 1;
}
int Subscription::unsubscribe(TCPSession &session) {
for (auto subscriber = subscribers.begin(); subscriber < subscribers.end(); ++subscriber) {
if (*subscriber == &session) {
int Subscription::unsubscribe(TCPSession &session)
{
for (auto subscriber = subscribers.begin(); subscriber < subscribers.end(); ++subscriber)
{
if (*subscriber == &session)
{
subscribers.erase(subscriber++);
return 1;
}
@@ -44,7 +58,24 @@ namespace core {
return 0;
}
int Subscription::process(coreutils::ZString &request, std::stringstream &out, TCPSession &session) {
bool Subscription::subscriptionOwner(coreutils::MString *alias, std::string ownerSelection)
{
if (owner != NULL)
{
owner = alias;
will == ownerSelection;
coreutils::Log(coreutils::LOG_DEBUG_1) << "Owner of Subscription: " << *(std::string *)owner;
}
else
{
coreutils::Log(coreutils::LOG_DEBUG_1) << "There is no owner to this subscription";
}
return true;
}
int Subscription::process(coreutils::ZString &request, std::stringstream &out, TCPSession &session)
{
if (handler)
handler->process(request, out, session, this);
else
@@ -52,30 +83,39 @@ namespace core {
return 1;
}
int Subscription::event(std::stringstream &out) {
int Subscription::event(std::stringstream &out)
{
for (auto subscriber = subscribers.begin(); subscriber < subscribers.end(); ++subscriber)
{
(*subscriber)->write(out.str());
}
return 1;
}
bool Subscription::ifSubscriber(TCPSession &session) {
bool Subscription::ifSubscriber(TCPSession &session)
{
return (std::find(subscribers.begin(), subscribers.end(), &session) != subscribers.end());
}
int Subscription::onSubscribe(TCPSession &session) {
int Subscription::onSubscribe(TCPSession &session)
{
return 0;
}
bool Subscription::subInvite(TCPSession &session) {
bool Subscription::subInvite(TCPSession &session)
{
return 0;
}
void Subscription::sendToAll(std::stringstream &data, TCPSession &sender) {
void Subscription::sendToAll(std::stringstream &data, TCPSession &sender)
{
for (auto session : subscribers)
if (session != &sender)
session->write(data.str());
if (session != &sender)
session->write(data.str());
data.str("");
}
}