Ferenc Szontágh
2024-06-27 920507bff803647c79dfce27c4c265b2caee7f8d
src/IPC.cpp
@@ -1,27 +1,47 @@
#include "IPC.h"
#include <iostream>
IPC::IPC() {}
IPC::IPC()
{
    DLOG(INFO) << "IPC ready.. queue size at init: " << messageQueue.size();
}
void IPC::registerHandler(std::shared_ptr<IPlugin> handler) {
IPC::~IPC()
{
    while (!messageQueue.empty())
    {
        messageQueue.pop();
    }
}
void IPC::registerHandler(std::shared_ptr<IPlugin> handler)
{
    handlers.push_back(handler);
}
void IPC::sendMessage(const Command& cmd) {
    {
        std::lock_guard<std::mutex> lock(queueMutex);
        messageQueue.push(cmd);
    }
void IPC::sendMessage(const Command &cmd)
{
    std::lock_guard lock(queueMutex);
    std::string val;
    tser::Serialize(cmd, val);
    messageQueue.push(std::move(val));
    queueCondVar.notify_one();
}
std::optional<Command> IPC::receiveMessage() {
std::optional<Command> IPC::receiveMessage()
{
    std::unique_lock<std::mutex> lock(queueMutex);
    queueCondVar.wait(lock, [this] { return !messageQueue.empty(); });
    queueCondVar.wait(lock, [this]
                      { return !messageQueue.empty(); });
    if (!messageQueue.empty()) {
        Command cmd = messageQueue.front();
    if (!messageQueue.empty())
    {
        std::string a = std::move(messageQueue.front());
        messageQueue.pop();
        return cmd;
        Command c;
        tser::DeSerialize(a, c);
        return c;
    }
    return std::nullopt;
}