177 MiniDb(
int port,
const std::string &path);
191 std::map<std::string, std::string>
db_;
MiniDb(const MiniDb &)
コピー禁止: listen_fd_ 等の所有を一意に保つため private 宣言のみ (実体なし)。
int max_fd_
select に渡す最大 fd
fd_set active_fds_
現在監視中の fd 集合
MiniDb & operator=(const MiniDb &)
代入禁止: コピーコンストラクタと同じ理由で private 宣言のみ (実体なし)。
int listen_fd_
リスニングソケット fd
std::string path_
永続化先ファイル (引数)
std::map< std::string, std::string > db_
Key-Value 本体
std::map< int, std::string > buffers_
fd → 未完成行バッファ
void accept_client()
accept(2) し、active_fds_ と buffers_ を更新する。
void load()
起動時に path_ を読み、空白区切り 1 行 1 ペアで db_ を初期化。
void fatal()
Fatal error\n を stderr に書いて exit(1) する
void recv_data(int fd)
recv(2) でデータを取り込み、行ごとに handle_command → send する。
void save() const
現在の DB をテキスト形式で永続化する
void run()
サーバのメインループ。SIGINT 受信で抜け、save() してから戻る。
void setup()
サーバ起動準備 (DB ロード → ソケット作成 → bind → listen → "ready")
~MiniDb()
デストラクタ (全 fd をクローズ)
void disconnect(int fd)
fd を close し、active_fds_ / buffers_ から外し、max_fd_ を巻き戻す。
std::string handle_command(const std::string &line)
1行の入力に対して、応答文字列 (0\n / 0 <v>\n / 1\n / 2\n) を返す。