#pragma once #include "../shared/protocol/message.h" #include "auth/authenticator.h" #include #include #include #include #include namespace scar { class Server; class Session : public std::enable_shared_from_this { public: Session(boost::asio::ssl::stream socket, std::shared_ptr auth, Server* server); void start(); // Send message to this session void send(const Message& message); // Get authenticated username (empty if not authenticated) const std::string& username() const { return username_; } // Check if session is authenticated bool isAuthenticated() const { return authenticated_; } private: void doHandshake(); void doReadHeader(); void doReadBody(uint32_t length); void handleMessage(std::unique_ptr message); void handleLoginRequest(const LoginRequest& request); boost::asio::ssl::stream socket_; std::shared_ptr auth_; Server* server_; std::vector read_buffer_; std::vector write_buffer_; std::string username_; bool authenticated_; }; } // namespace scar