#pragma once // ── TCP sürücüleri — Orchestrator çerçeve kanalı (Winsock, non-blocking) ───── // TcpDinleyiciWin: makinenin gelen-kutusu; REUSEADDR YOK — makinede İLK açan // dinler (gömülü ajan rolü, tasarım §2.2), diğer süreçler meşgul görür ve kule // 5 sn'de bir yeniden dener. TcpBaglantiWin: kabul edilen ya da bağlanılan uç; // al() non-blocking (0=veri yok, -1=kapandı → çağıran kanalı düşürür). // Header Winsock içermez (handle uintptr_t). #include #include namespace fiko { class TcpBaglantiWin { public: TcpBaglantiWin() = default; explicit TcpBaglantiWin(uintptr_t kabulSoket); // kabul edilen soketi sahiplen ~TcpBaglantiWin() { kapat(); } TcpBaglantiWin(const TcpBaglantiWin&) = delete; TcpBaglantiWin& operator=(const TcpBaglantiWin&) = delete; bool baglan(const char* ip, uint16_t port); // kısa blocking connect → non-blocking'e geç void kapat(); bool acikMi() const { return acik_; } bool gonder(const std::string& veri); // tam yazım (kısa yazımda döngü) int al(std::string& veri); // >0 okunan bayt, 0 = veri yok, -1 = kapandı/hata private: uintptr_t soket_ = 0; bool acik_ = false; bool wsa_ = false; }; class TcpDinleyiciWin { public: ~TcpDinleyiciWin() { kapat(); } bool ac(uint16_t port); // bind+listen (non-blocking); port meşgul → false void kapat(); bool acikMi() const { return acik_; } uint16_t port() const { return port_; } uintptr_t kabulEt(); // bekleyen bağlantı soketi; 0 = yok private: uintptr_t soket_ = 0; uint16_t port_ = 0; bool acik_ = false; bool wsa_ = false; }; } // namespace fiko