#pragma once // -- Lisans Yonetim Paneli (yalniz URETICI makinesinde) ------------------------- // Saticinin TUM sistemi uzaktan yonetmesi icin tek panel: // // 1. ACIK FIKOCAD'LERI LISTE -> kokDB .aggregate (goCihazlar) // 2. LISANS VER / UZAT -> kokDB .ekle (fikocadLisanslari, imzali) // 3. KOMUT YETKILENDIR -> lisans.komutlari (beyaz listeli) // 4. UZAKTAN KOMUT GONDER -> tetikleyici -> soket emit // 5. KILITLE / KILIT AC -> lisans.kilitle // // Akis (ANINDA, ~200-800 ms): // Uretici -> tetikleyici kurali yazar -> tetikleyici.yenile // -> tetikleyici.manuel-tetikle -> motor sokete emit eder // -> fikocad komutu alir, uygular, cevap yollar // // ⚠️ BU PANEL MUSTERIYE DAGITILMAZ. Yalniz uretici derlemesinde (FIKO_URETICI_UI) // derlenir ve ozel imza anahtarinin varligiyla ekrana gelir. #include #include #include namespace fiko { struct UygulamaBaglam; // ── Baglanan bir FIKOCAD cihazinin gorunumu ─────────────────────────────────── struct CihazOzet { std::string cihazKimlik; // soket eslesmesinin anahtari (soketCihazMap) std::string bilgisayar; // Cihaz_bilgi header'inden std::string ip; // goSoketler'den std::string tipi; // "desktop" vb. std::string seri; // lisans serisi (varsa) std::string musteri; // musteri adi (varsa) std::string surum; // surum (varsa) std::string sonBaglanma; // ISO tarih bool cevrimici = true; bool kilitli = false; // lisans.kilitle uygulandi mi int sahipKomut = 0; // tahmini sahip olunan komut sayisi }; // ── Uzaktan komut sonucu (cevap kuyrugu) ─────────────────────────────────────── struct KomutCevabi { std::string komutId; std::string cihazKimlik; std::string komutKodu; std::string mesaj; bool basarili = false; bool beklemede = false; // gonderildi, cevap bekleniyor std::string zaman; }; // ── Panel durumu (UI'da gorunur) ────────────────────────────────────────────── struct YonetimDurumu { std::string sunucu = "https://fikoyt.com:9000"; std::string kullaniciAdi; std::string cevapHatasi; // son isteginin hatasi bool oturumAcik = false; bool sunucuyaBagli = false; bool yukleniyor = false; std::string sonHata; int komutSayaci = 0; // gonderilen toplam i64 sonCevapZamani = 0; // unix }; // ── Ana panel cizimi ─────────────────────────────────────────────────────────── // acik=false iken hicbir sey yapmaz (kapaliyken sifir maliyet). void lisansYonetimCiz(UygulamaBaglam& b, bool& acik); // ── Is parcaciklari (UI'dan bagimsiz; dogrudan da cagrilabilir) ─────────────── // Oturum ac (Super Yonetici). Donus: basarili mi. bool yonetimOturumAc(const std::string& sunucu, const std::string& kullaniciAdi, const std::string& parola, std::string& hata); // Cihaz listesini tazele (kokDB .aggregate -> goCihazlar). bool yonetimCihazlariYenile(std::vector& cikti, std::string& hata); // Lisans/bilet yaz (kokDB .ekle -> fikocadLisanslari). Ozel anahtarla imzalanir. bool yonetimLisansYaz(const std::string& ozelAnahtarYolu, const CihazOzet& cihaz, const std::string& musteri, const std::string& seri, const std::vector& komutlar, i64 bitisUnix, std::string& hata); // Uzaktan komut gonder (tetikleyici uzerinden ANINDA). // komutKodu beyaz listeden olmali; sunucu kurali yazar ve emit eder. bool yonetimKomutGonder(const CihazOzet& cihaz, const std::string& komutKodu, const std::string& mesaj, std::string& hata); // Komut yetkilendir (lisans.komutlari) - cihaza yeni komut hakki ekler. bool yonetimKomutYetkilendir(const CihazOzet& cihaz, const std::vector& komutlar, std::string& hata); // Kilitle / kilit ac. bool yonetimKilitle(const CihazOzet& cihaz, bool kilitli, const std::string& mesaj, std::string& hata); // ── Durum erisimi (UI okur) ─────────────────────────────────────────────────── YonetimDurumu& yonetimDurumu(); const std::vector& yonetimCihazlari(); // Cevap bekleyen komut var mi? (pumpa: gelince listede goster) bool yonetimCevapTaze(); const std::vector& yonetimCevaplari(); // ── Uzaktan calistirilabilir komut listesi (beyaz liste) ────────────────────── const std::vector& yonetimBeyazListe(); } // namespace fiko