// SPDX-FileCopyrightText: 2024 Yury Gubich // SPDX-License-Identifier: GPL-3.0-or-later #include "jay.h" Jay::Jay(const std::string& configPath): runMutex(), config(std::make_shared(configPath)), client(), messageHandler(), connectionHandler(), loggers(), actors() {} Jay::~Jay() {} bool Jay::isConfigValid() const { return config->isValid(); } void Jay::run() { std::lock_guard lock(runMutex); initialize(); client->connect(true); } void Jay::initialize() { createClient(); if (!messageHandler) messageHandler = std::make_unique(config, client); if (!connectionHandler) connectionHandler = std::make_unique(config, client); } void Jay::createClient() { if (client) return; client = std::make_shared(config->getFullJID(), config->getPassword()); addLogger(config->getLogLevel()); gloox::Disco* disco = client->disco(); disco->setVersion("Jay", "0.0.1"); disco->setIdentity("client", "bot"); client->setTls(config->getTLSPolicy()); client->setSASLMechanisms(gloox::SaslMechAll); client->setStreamManagement(true, true); } void Jay::createActors() { for (const std::string& jid : config->getOwners()) { Actors::const_iterator act = actors.find(jid); if (act == actors.end()) actors.emplace(jid, std::make_unique()); } } void Jay::addLogger(gloox::LogLevel level) { loggers.emplace_back(std::make_unique(client->logInstance(), level)); }