From 3727285b14ff2a3b38c7528b74247125c202f960 Mon Sep 17 00:00:00 2001 From: dijunkun Date: Mon, 15 Sep 2025 16:57:49 +0800 Subject: [PATCH] [fix] create db file if it does not exist --- src/device_db_manager/device_db_manager.cpp | 9 ++++ src/main.cpp | 5 ++- src/signal_server.cpp | 48 ++++++++++++++++++--- src/signal_server.h | 4 +- 4 files changed, 56 insertions(+), 10 deletions(-) diff --git a/src/device_db_manager/device_db_manager.cpp b/src/device_db_manager/device_db_manager.cpp index e8e55af..28ddfc2 100644 --- a/src/device_db_manager/device_db_manager.cpp +++ b/src/device_db_manager/device_db_manager.cpp @@ -3,6 +3,7 @@ #include #include +#include #include #include #include @@ -11,6 +12,14 @@ #include "log.h" DeviceDBManager::DeviceDBManager(const std::string& db_path) : db_(nullptr) { + try { + std::filesystem::path path(db_path); + std::filesystem::create_directories(path.parent_path()); + } catch (const std::exception& e) { + throw std::runtime_error("Failed to create parent directory for DB: " + + std::string(e.what())); + } + if (sqlite3_open(db_path.c_str(), &db_) != SQLITE_OK) { LOG_ERROR("Failed to open database, {}", sqlite3_errmsg(db_)); } diff --git a/src/main.cpp b/src/main.cpp index 64c0b19..6e9d9e7 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -36,8 +36,9 @@ int main(int argc, char* argv[]) { InitLogger(log_dir); - SignalServer s; - s.Run(std::stoi(port), certs_dir, db_path); + SignalServer s(std::stoi(port), certs_dir, db_path); + s.Run(); + return 0; } diff --git a/src/signal_server.cpp b/src/signal_server.cpp index 3ae95ff..5dad4ef 100644 --- a/src/signal_server.cpp +++ b/src/signal_server.cpp @@ -37,6 +37,44 @@ SignalServer::SignalServer() { std::placeholders::_2)); } +SignalServer::SignalServer(uint16_t port, std::string certs_dir, + std::string db_path) + : port_(port), certs_dir_(certs_dir), db_path_(db_path) { + LOG_INFO( + "Starting CrossDesk Signaling Server on port {}, certs_dir: {}, " + "db_path: {}", + port_, certs_dir_, db_path_); + + server_.set_error_channels(websocketpp::log::elevel::none); + server_.set_access_channels(websocketpp::log::alevel::none); + server_.init_asio(); + + server_.set_open_handler( + std::bind(&SignalServer::OnOpen, this, std::placeholders::_1)); + server_.set_close_handler( + std::bind(&SignalServer::OnClose, this, std::placeholders::_1)); + server_.set_fail_handler( + std::bind(&SignalServer::OnFail, this, std::placeholders::_1)); + server_.set_message_handler(std::bind(&SignalServer::OnMessage, this, + std::placeholders::_1, + std::placeholders::_2)); + server_.set_tls_init_handler( + std::bind(&SignalServer::OnTlsInit, this, std::placeholders::_1)); + server_.set_ping_handler(std::bind(&SignalServer::OnPing, this, + std::placeholders::_1, + std::placeholders::_2)); + server_.set_pong_handler(std::bind(&SignalServer::OnPing, this, + std::placeholders::_1, + std::placeholders::_2)); + + transmission_manager_ = std::make_shared(); + signal_negotiation_ = + std::make_unique(transmission_manager_, db_path_); + signal_negotiation_->SetSendMsgCallback(std::bind(&SignalServer::SendMsg, + this, std::placeholders::_1, + std::placeholders::_2)); +} + SignalServer::~SignalServer() {} bool SignalServer::OnOpen(websocketpp::connection_hdl hdl) { @@ -98,20 +136,16 @@ bool SignalServer::OnPong(websocketpp::connection_hdl hdl, std::string s) { return true; } -void SignalServer::Run(uint16_t port, std::string certs_dir, - std::string db_path) { - certs_dir_ = certs_dir; - db_path_ = db_path; - +void SignalServer::Run() { if (!std::filesystem::exists(certs_dir_)) { LOG_ERROR("Certs dir [{}] not exist", certs_dir_); return; } server_.set_reuse_addr(true); - LOG_INFO("Signal server runs on port [{}]", port); + LOG_INFO("Signal server runs on port [{}]", port_); - server_.listen(port); + server_.listen(port_); server_.start_accept(); server_.run(); } diff --git a/src/signal_server.h b/src/signal_server.h index 5991cf2..77dd6e4 100644 --- a/src/signal_server.h +++ b/src/signal_server.h @@ -26,6 +26,7 @@ typedef unsigned int connection_id; class SignalServer { public: SignalServer(); + SignalServer(uint16_t port, std::string certs_dir, std::string db_path); ~SignalServer(); bool OnOpen(websocketpp::connection_hdl hdl); @@ -35,12 +36,13 @@ class SignalServer { bool OnPing(websocketpp::connection_hdl hdl, std::string s); bool OnPong(websocketpp::connection_hdl hdl, std::string s); - void Run(uint16_t port, std::string certs_dir, std::string db_path); + void Run(); void SendMsg(websocketpp::connection_hdl hdl, json message); void OnMessage(websocketpp::connection_hdl hdl, server::message_ptr msg); private: server server_; + uint16_t port_; std::string certs_dir_; std::string db_path_; std::map