Program Listing for File MetadataTXRX.cpp
↰ Return to documentation for file (include\input\DefaultDevs\windows\TXRX\MetadataTXRX.cpp)
#include "MetadataTXRX.hpp"
namespace PDJE_IPC {
bool
MetadataTXRX::QueryConfig(const std::string &dumped_json)
{
TXRX_RESPONSE.DEVICE_CONFIG.emplace();
auto resp = TXRX_RESPONSE.DEVICE_CONFIG->get_future();
bool res = txrx->Send(PDJE_CRYPTO::TXRXHEADER::DEVICE_CONFIG, dumped_json);
if (res) {
res = resp.get();
}
TXRX_RESPONSE.DEVICE_CONFIG.reset();
if (res) {
return EndTransmission();
}
else {
critlog("query configure failed.");
return false;
}
}
bool
MetadataTXRX::SendInputTransfer(PDJE_Input_Transfer &trsf)
{
try {
TXRX_RESPONSE.SEND_INPUT_TRANSFER_SHMEM.emplace();
auto resp = TXRX_RESPONSE.SEND_INPUT_TRANSFER_SHMEM->get_future();
bool res =
txrx->Send(PDJE_CRYPTO::TXRXHEADER::SEND_INPUT_TRANSFER_SHMEM,
trsf.GetMetaDatas());
if (res) {
res = resp.get();
}
TXRX_RESPONSE.SEND_INPUT_TRANSFER_SHMEM.reset();
if (res) {
return true;
} else {
critlog("failed to send ipc shared memory.");
return false;
}
} catch (const std::exception &e) {
critlog("failed to send ipc shared memory. Why:");
critlog(e.what());
return false;
}
}
std::stringstream
MetadataTXRX::GenTXRX()
{
if (!psk.Gen()) {
return {};
}
PDJE_CRYPTO::RANDOM_GEN rg;
PDJE_IPC::MNAME mfirst = rg.Gen("PDJE_TXRX_F_");
PDJE_IPC::MNAME lfirst = rg.Gen("PDJE_TXRX_LOCK_F_");
PDJE_IPC::MNAME msecond = rg.Gen("PDJE_TXRX_S_");
PDJE_IPC::MNAME lsecond = rg.Gen("PDJE_TXRX_LOCK_S_");
txrx.emplace(psk, mfirst, lfirst, msecond, lsecond, true);
SetTXRX_Features();
std::stringstream ss;
ss << psk.Encode();
ss << " ";
ss << mfirst.string();
ss << " ";
ss << lfirst.string();
ss << " ";
ss << msecond.string();
ss << " ";
ss << lsecond.string();
return ss;
}
bool
MetadataTXRX::QueryHealth()
{
TXRX_RESPONSE.HEALTH_CHECK.emplace();
auto resp = TXRX_RESPONSE.HEALTH_CHECK->get_future();
bool res = txrx->Send(PDJE_CRYPTO::TXRXHEADER::HEALTH_CHECK, "");
if (res) {
res = resp.get();
}
TXRX_RESPONSE.HEALTH_CHECK.reset();
if (res)
return true;
else {
critlog("health check failed.");
return false;
}
}
std::vector<DeviceData>
MetadataTXRX::QueryDevices()
{
TXRX_RESPONSE.DEVICE_LIST.emplace();
auto resp = TXRX_RESPONSE.DEVICE_LIST->get_future();
bool res = txrx->Send(PDJE_CRYPTO::TXRXHEADER::DEVICE_LIST, "");
if (!res) {
TXRX_RESPONSE.DEVICE_LIST.reset();
critlog("failed to request device list.");
return {};
}
return resp.get();
}
bool
MetadataTXRX::Kill()
{
TXRX_RESPONSE.KILL.emplace();
auto resp = TXRX_RESPONSE.KILL->get_future();
bool res = txrx->Send(PDJE_CRYPTO::TXRXHEADER::TXRX_KILL, "");
if (res) {
res = resp.get();
}
TXRX_RESPONSE.KILL.reset();
txrx.reset();
if (res)
return true;
else {
critlog("failed to send kill signal.");
return false;
}
}
bool
MetadataTXRX::SendIPCSharedMemory(const uint64_t mem_length,
const std::string &mem_path,
const std::string &dataType)
{
nj j;
j["PATH"] = mem_path;
j["DATATYPE"] = dataType;
j["COUNT"] = mem_length;
try {
TXRX_RESPONSE.SEND_IPC_SHMEM.emplace();
auto resp = TXRX_RESPONSE.SEND_IPC_SHMEM->get_future();
bool res =
txrx->Send(PDJE_CRYPTO::TXRXHEADER::SEND_IPC_SHMEM, j.dump());
if (res) {
res = resp.get();
}
TXRX_RESPONSE.SEND_IPC_SHMEM.reset();
if (res) {
return true;
} else {
critlog("failed to send ipc shared memory.");
return false;
}
} catch (const std::exception &e) {
critlog("failed to send ipc shared memory. Why:");
critlog(e.what());
return false;
}
}
bool
MetadataTXRX::EndTransmission()
{
TXRX_RESPONSE.STOP.emplace();
auto resp = TXRX_RESPONSE.STOP->get_future();
bool res = txrx->Send(PDJE_CRYPTO::TXRXHEADER::TXRX_STOP, "");
if (res) {
res = resp.get();
}
TXRX_RESPONSE.STOP.reset();
txrx.reset();
return res;
}
}; // namespace PDJE_IPC