試験ノート - 実装ドリル 1.0
読み取り中…
検索中…
一致する文字列を見つけられません
mini_db.hpp
1#ifndef MINI_DB_HPP
2#define MINI_DB_HPP
3
4#include <sys/select.h>
5
6#include <map>
7#include <string>
8
175class MiniDb {
176public:
177 MiniDb(int port, const std::string &path);
178 ~MiniDb();
179
180 void setup();
181 void run();
182 void save() const;
183
184private:
185 int port_;
186 std::string path_;
189 fd_set active_fds_;
190 std::map<int, std::string> buffers_;
191 std::map<std::string, std::string> db_;
192
194 void load();
196 void accept_client();
198 void recv_data(int fd);
200 void disconnect(int fd);
202 std::string handle_command(const std::string &line);
203
205 MiniDb(const MiniDb &);
208};
209
210void fatal();
211
212#endif
MiniDb(const MiniDb &)
コピー禁止: listen_fd_ 等の所有を一意に保つため private 宣言のみ (実体なし)。
int max_fd_
select に渡す最大 fd
Definition mini_db.hpp:188
fd_set active_fds_
現在監視中の fd 集合
Definition mini_db.hpp:189
MiniDb & operator=(const MiniDb &)
代入禁止: コピーコンストラクタと同じ理由で private 宣言のみ (実体なし)。
int listen_fd_
リスニングソケット fd
Definition mini_db.hpp:187
std::string path_
永続化先ファイル (引数)
Definition mini_db.hpp:186
int port_
待ち受けポート (引数)
Definition mini_db.hpp:185
std::map< std::string, std::string > db_
Key-Value 本体
Definition mini_db.hpp:191
std::map< int, std::string > buffers_
fd → 未完成行バッファ
Definition mini_db.hpp:190
void accept_client()
accept(2) し、active_fds_ と buffers_ を更新する。
Definition mini_db.cpp:255
void load()
起動時に path_ を読み、空白区切り 1 行 1 ペアで db_ を初期化。
Definition mini_db.cpp:192
void fatal()
Fatal error\n を stderr に書いて exit(1) する
Definition mini_db.cpp:95
void recv_data(int fd)
recv(2) でデータを取り込み、行ごとに handle_command → send する。
Definition mini_db.cpp:288
void save() const
現在の DB をテキスト形式で永続化する
Definition mini_db.cpp:402
void run()
サーバのメインループ。SIGINT 受信で抜け、save() してから戻る。
Definition mini_db.cpp:220
void setup()
サーバ起動準備 (DB ロード → ソケット作成 → bind → listen → "ready")
Definition mini_db.cpp:153
~MiniDb()
デストラクタ (全 fd をクローズ)
Definition mini_db.cpp:129
void disconnect(int fd)
fd を close し、active_fds_ / buffers_ から外し、max_fd_ を巻き戻す。
Definition mini_db.cpp:323
std::string handle_command(const std::string &line)
1行の入力に対して、応答文字列 (0\n / 0 <v>\n / 1\n / 2\n) を返す。
Definition mini_db.cpp:357