#pragma once // Geri bildirim servisi — kullanıcı mesajı + otomatik ekran görüntüsü FikoYT // sunucusuna gider. Sunucuda SIFIR değişiklik: kokDB generic CRUD ucu kullanılır // (sözleşme + üç kural için bkz. geri_bildirim_govde.hpp dosya başı notu). // // Ağ işi HER ZAMAN worker'da (cekirdek.gorevler()) — sıcak yol kutsal. #include #include #include #include #include "fiko/core/temel.hpp" #include "geri_bildirim_govde.hpp" namespace fiko { class Cekirdek; // ---- Ayar canlı değişkenleri (AyarSistemi bunları sarar; ayar_kayitlari.cpp) ---- std::string& geriBildirimSunucu(); // "https://fikoyt.com:9000" std::string& geriBildirimKoleksiyon(); // "geriBildirimler" bool& geriBildirimEkranGoruntusuVarsayilan(); // pencere açılışında kutu işaretli mi int& geriBildirimZamanAsimiSn(); // 20 int& geriBildirimMaksMb(); // 8 — base64 gövde üst sınırı (MongoDB 16MB doküman) // Geri bildirim gönderim durumu (app-global tek örnek; UI + worker paylaşır). class GeriBildirimServisi { public: enum class Durum { Bosta, Gonderiliyor, Gonderildi, Hata }; void cekirdekAyarla(Cekirdek* c) { cekirdek_ = c; } Cekirdek* cekirdek() const { return cekirdek_; } Durum durum() const { return durum_.load(std::memory_order_relaxed); } void durumAyarla(Durum d) { durum_.store(d, std::memory_order_relaxed); } std::string sonHata() const { std::lock_guard k{kilit_}; return sonHata_; } void hataAyarla(std::string h) { { std::lock_guard k{kilit_}; sonHata_ = std::move(h); } durumAyarla(Durum::Hata); } // Yakalanan ekran görüntüsü (PNG). Pencere açılışında main-thread'de doldurulur. void ekranAyarla(std::vector png) { std::lock_guard k{kilit_}; ekranPng_ = std::move(png); } std::vector ekran() const { std::lock_guard k{kilit_}; return ekranPng_; } size_t ekranBayt() const { std::lock_guard k{kilit_}; return ekranPng_.size(); } void ekranTemizle() { std::lock_guard k{kilit_}; ekranPng_.clear(); } private: Cekirdek* cekirdek_ = nullptr; std::atomic durum_{Durum::Bosta}; mutable std::mutex kilit_; std::string sonHata_; std::vector ekranPng_; }; // Gönderimi başlat (worker'a kuyruklar; anında döner). mesaj boşsa no-op. // ekranEkle=false → servisteki görüntü gövdeye konmaz. void geriBildirimGonderBaslat(GeriBildirimServisi& svc, const std::string& mesaj, const std::string& kategori, bool ekranEkle); // Cihaz tanımı (OS sürümü + CPU çekirdek) — gövdenin "cihaz" alanı. std::string geriBildirimCihazMetni(); // ISO-8601 UTC şimdi ("2026-07-15T10:00:00Z"). std::string geriBildirimSimdiIso(); } // namespace fiko