#pragma once #include "FileDescriptor.hpp" #include "format.hpp" #include #include #include class CSession { public: CSession(Hyprutils::OS::CFileDescriptor m_sockfd); ~CSession(); struct SRecvData { char data[1024] = {0}; ssize_t dataSize = sizeof(data); bool good = true; }; std::string getName(); bool isValid(); SRecvData read(); SRecvData read(const std::string &msg); bool write(const std::string &msg, eFormatType type); template bool write(eFormatType type, std::format_string fmt, Args &&...args); void run(); void setSelf(std::pair> *self); private: std::pair> *self; enum eEventType { READ, WRITE }; Hyprutils::OS::CFileDescriptor m_sockfd; std::string m_name; void recvManager(); bool registerSession(); void onConnect(); void onDisconnect(); void onErrno(eEventType); void onRecv(const SRecvData &data); void onSend(const std::string &msg); friend class CSessionManager; };