Files
Applications/LCDLLN-GPT/server-master/include/Server.hpp
T
2026-03-16 18:26:47 +01:00

56 lines
1.3 KiB
C++

#pragma once
#include <string>
#include <unordered_map>
#include <vector>
#include <thread>
#include <mutex>
#include <openssl/ssl.h>
#include "Protocol.hpp"
#include "Database.hpp"
#include "SessionManager.hpp"
struct ClientConnection {
int fd;
SSL* ssl;
uint64_t session_id;
std::string username;
};
struct ShardInfo {
std::string shard_id;
int max_capacity;
int current_load;
};
class Server {
public:
Server(const std::string& config_file);
~Server();
void run();
void stop();
private:
void initTLS();
void setupListener(int port);
void epollLoop();
void handleClientEvent(int fd);
void readPacket(ClientConnection* conn);
void processPacket(ClientConnection* conn, const PacketHeader& header, const std::vector<char>& payload);
void sendPacket(ClientConnection* conn, uint16_t opcode, uint64_t request_id, uint64_t session_id, const std::vector<char>& payload);
ShardInfo selectShard();
std::string generateSalt(size_t length = 16);
std::string hashArgon2(const std::string& input, const std::string& salt);
int listen_fd_;
SSL_CTX* ssl_ctx_;
bool running_;
int epoll_fd_;
Database db_;
SessionManager sessionManager_;
std::mutex conn_mutex_;
std::unordered_map<int, ClientConnection*> clients_;
std::vector<ShardInfo> shards_;
};