Program Listing for File MetadataTXRX.hpp

Return to documentation for file (include\input\DefaultDevs\windows\TXRX\MetadataTXRX.hpp)

#pragma once

#include "PDJE_Crypto.hpp"
#include "Secured_IPC_TX_RX.hpp"
#include <optional>

#include "Input_State.hpp"
#include "NameGen.hpp"
#include "PDJE_Input_DataLine.hpp"
#include "PDJE_Input_Device_Data.hpp"
#include <future>

namespace PDJE_IPC {
class MetadataTXRX {
  private:
    std::optional<PDJE_CRYPTO::TX_RX> txrx;

    PDJE_CRYPTO::PSK psk;
    struct {
        std::optional<std::promise<bool>>                    HEALTH_CHECK;
        std::optional<std::promise<bool>>                    STOP;
        std::optional<std::promise<bool>>                    KILL;
        std::optional<std::promise<std::vector<DeviceData>>> DEVICE_LIST;
        std::optional<std::promise<bool>>                    DEVICE_CONFIG;
        std::optional<std::promise<bool>>                    SEND_IPC_SHMEM;
        std::optional<std::promise<bool>> SEND_INPUT_TRANSFER_SHMEM;
    } TXRX_RESPONSE;

    void
    SetTXRX_Features();
    bool
    EndTransmission();

  public:
    bool
    SendInputTransfer(PDJE_Input_Transfer &trsf);

    bool
    SendIPCSharedMemory(const uint64_t     mem_length,
                        const std::string &mem_path,
                        const std::string &dataType);

    std::stringstream
    GenTXRX();
    void
    Listen()
    {
        txrx->Listen();
    }
    bool
    QueryHealth();
    bool
    QueryConfig(const std::string &dumped_json);
    std::vector<DeviceData>
    QueryDevices();
    bool
    Kill();

    MetadataTXRX()  = default;
    ~MetadataTXRX() = default;
};
} // namespace PDJE_IPC