Module creation, message routing

This commit is contained in:
Blue 2025-03-07 23:20:06 +02:00
parent bc2dc9bf07
commit c605b3ba93
Signed by: blue
GPG key ID: 9B203B252A63EE38
14 changed files with 154 additions and 26 deletions

View file

@ -3,12 +3,13 @@
#include "actor.h"
Module::Actor::Actor():
Module()
Module::Actor::Actor(const std::shared_ptr<gloox::Client>& client):
Module(client)
{}
Module::Actor::~Actor() noexcept {}
void Module::Actor::message(const std::string& text) {
void Module::Actor::message(const std::shared_ptr<::Actor>& actor, const Module::Module::Tokens& args) {
if (args.front() == "list")
sendMessage(actor, "Me\nMyself\nI");
}

View file

@ -9,10 +9,10 @@ namespace Module {
class Actor : public Module {
public:
Actor();
Actor(const std::shared_ptr<gloox::Client>& client);
~Actor() noexcept;
virtual void message(const std::string & text) override;
virtual void message(const std::shared_ptr<::Actor>& actor, const Tokens& args) override;
};
}

View file

@ -3,7 +3,33 @@
#include "module.h"
Module::Module::Module()
#include "gloox/message.h"
Module::Module::Module(const std::shared_ptr<gloox::Client>& client):
client(client)
{}
Module::Module::~Module() noexcept {}
std::vector<std::string> Module::Module::split(const std::string& string, const std::string& delimiter) {
std::vector<std::string> result;
std::size_t last = 0;
std::size_t next = string.find(delimiter, last);
while (next != std::string::npos) {
result.emplace_back(string.substr(last, next - last));
last = next + 1;
next = string.find(delimiter, last);
}
result.emplace_back(string.substr(last));
return result;
}
void Module::Module::sendMessage(const std::shared_ptr<Actor>& actor, const std::string& body) {
client->send(gloox::Message(
gloox::Message::Chat,
actor->jid,
body
));
}

View file

@ -4,17 +4,33 @@
#pragma once
#include <string>
#include <memory>
#include <vector>
#include "gloox/client.h"
#include "component/actor.h"
namespace Module {
class Module {
protected:
Module();
public:
typedef std::vector<std::string> Tokens;
virtual void message(const std::string& text) = 0;
protected:
Module(const std::shared_ptr<gloox::Client>& client);
void sendMessage(const std::shared_ptr<Actor>& actor, const std::string& body);
public:
virtual ~Module() noexcept;
static Tokens split(const std::string& string, const std::string& delimiter = " ");
virtual void message(const std::shared_ptr<Actor>& actor, const Tokens& args) = 0;
protected:
std::shared_ptr<gloox::Client> client;
};
}