#include <iostream>
#include <string>
#include <chrono>
#include <thread>
// --- Definisi Data dan QoS ---
/**
* @brief Tipe enumerasi untuk Tingkatan Quality of Service (QoS) pada DDS.
* QoS ini mensimulasikan prioritas dan keandalan data.
*/
enum class TingkatQoS {
REAL_TIME_PENTING, // Prioritas tertinggi, latency sangat rendah.
KEANDALAN_TINGGI, // Penting, butuh keandalan (misalnya, semua data harus sampai).
TERBAIK_USAHA // Prioritas rendah, kecepatan olah cepat tapi bisa hilang.
};
/**
* @brief Struktur untuk mensimulasikan data yang dikirim melalui DDS.
*/
struct DataDDS {
std::string topic;
int nilai;
TingkatQoS qos;
};
// --- Fungsi Simulasi ---
/**
* @brief Menghitung dan mensimulasikan waktu olah data berdasarkan Tingkat QoS.
* @param data Objek DataDDS yang akan diolah.
*/
void OlahData(const DataDDS& data) {
long long delay_ms = 0;
std::string qos_nama;
// Tentukan waktu olah data (delay) berdasarkan QoS
switch (data.qos) {
case TingkatQoS::REAL_TIME_PENTING:
delay_ms = 10; // Latency sangat rendah (cepat)
qos_nama = "Real-Time Penting";
break;
case TingkatQoS::KEANDALAN_TINGGI:
delay_ms = 100; // Latency lebih tinggi (karena harus memastikan pengiriman/keandalan)
qos_nama = "Keandalan Tinggi";
break;
case TingkatQoS::TERBAIK_USAHA:
delay_ms = 50; // Latency sedang (lebih cepat dari Keandalan, tapi kurang prioritas)
qos_nama = "Terbaik Usaha";
break;
}
// Simulasi proses olah data
std::cout << "\n[QoS: " << qos_nama << "] Memproses data topik: "
<< data.topic << " dengan Nilai: " << data.nilai << std::endl;
std::cout << " -> Simulasi Latency/Waktu Olah: " << delay_ms << " ms" << std::endl;
// Memberi jeda (delay) untuk simulasi waktu olah
std::this_thread::sleep_for(std::chrono::milliseconds(delay_ms));
std::cout << " -> Data Topik '" << data.topic << "' **SELESAI** diolah." << std::endl;
}
// --- Fungsi Utama ---
int main() {
std::cout << "### Simulasi Tingkatan Penyimpanan/Kecepatan Olah Data DDS (C++) ###" << std::endl;
std::cout << " (Tingkatan diwakili oleh Quality of Service - QoS)" << std::endl;
std::cout << "------------------------------------------------------------------" << std::endl;
// 1. Data Real-Time (Misal: Pembacaan Sensor Kendaraan)
DataDDS data_rt = {"Sensor Kecepatan", 85, TingkatQoS::REAL_TIME_PENTING};
OlahData(data_rt);
// 2. Data Keandalan Tinggi (Misal: Perintah Kontrol Sistem)
DataDDS data_reliabilitas = {"Perintah Rem", 1, TingkatQoS::KEANDALAN_TINGGI};
OlahData(data_reliabilitas);
// 3. Data Terbaik Usaha (Misal: Log Debug atau Status Non-Kritis)
DataDDS data_best_effort = {"Log Suhu Cabin", 25, TingkatQoS::TERBAIK_USAHA};
OlahData(data_best_effort);
std::cout << "\n------------------------------------------------------------------" << std::endl;
std::cout << "Simulasi Selesai." << std::endl;
return 0;
}