qicosmos / cinatra

modern c++(c++20), cross-platform, header-only, easy to use http framework

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

还是set_http_handler的name参数类型问题

FlushHip opened this issue · comments

今天就遇到#198 这个问题了。相关原因这个issues已经陈诉。

void websocket_server::start() {
    server_.enable_timeout(false);
    server_.set_keep_alive_timeout(std::numeric_limits<long>::max());
    server_.listen(ip_, port_);

    std::string_view uri{"/usb_capture"};
    server_.set_http_handler<cinatra::GET, cinatra::POST>(
        uri, [this](cinatra::request& request, cinatra::response& response) {
            if (request.get_content_type() !=
                cinatra::content_type::websocket) {
                LOG_WARN << "someone use other protocol for websocket, type "
                            ": "
                         << static_cast<int>(request.get_content_type());
            }

            request.on(cinatra::ws_open, [this](cinatra::request& request) {
                ws_connect_handler(request);
            });

            request.on(cinatra::ws_message, [this](cinatra::request& request) {
                ws_message_handler(request);
            });

            request.on(cinatra::ws_close, [this](cinatra::request& request) {
                ws_close_handler(request);
            });

            request.on(cinatra::ws_error, [this](cinatra::request& request) {
                ws_error_handler(request);
            });
        });

    LOG_INFO << "start url ws://" << ip_ << ":" << port_ << uri;

    thread_ = std::make_unique<std::thread>([this] { main(); });
}

void websocket_server::main() {
    server_.run();
}

也是自己还没有完全转到string_view(用string_viewname的参数类型确实是更合理的)上的原因吧。希望写一点注释,不然那些习惯用string来保存字面量的使用者很容易犯这种生命周期的问题。