[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/kassane/expresscpp/master/include/expresscpp/expresscpp.hpp [Back]  [Original]

#if defined(__cpp_modules)
export module expresscpp;
export import std;
#else
#pragma once
#endif

#include 
#include 
#include 
#include 
#include 

#include "expresscpp/impl/listener.hpp"
#include "expresscpp/impl/routing_stack.hpp"
#include "expresscpp/nextrouter.hpp"
#include "expresscpp/request.hpp"
#include "expresscpp/response.hpp"
#include "expresscpp/route.hpp"
#include "expresscpp/router.hpp"
#include "expresscpp/types.hpp"
#include "expresscpp/exports.hpp"

#if defined(__cpp_modules)
export namespace expresscpp {
#else
namespace expresscpp {
#endif

class EXPRESSCPP_API  ExpressCpp {
  friend class Session;

 public:
  ExpressCpp();
  ~ExpressCpp();

  template 
  void Get(std::string_view registered_path, T handler) {
    router_->Get(registered_path, handler);
  }
  template 
  void Get(std::string_view path, T handler, Args... args) {
    Get(path, handler);
    Get(path, args...);
  }

  template 
  void Put(std::string_view registered_path, T handler) {
    router_->Put(registered_path, handler);
  }
  template 
  void Put(std::string_view path, T handler, Args... args) {
    Put(path, handler);
    Put(path, args...);
  }

  template 
  void Post(std::string_view registered_path, T handler) {
    router_->Post(registered_path, handler);
  }
  template 
  void Post(std::string_view path, T handler, Args... args) {
    Post(path, handler);
    Post(path, args...);
  }

  template 
  void Delete(std::string_view registered_path, T handler) {
    router_->Delete(registered_path, handler);
  }
  template 
  void Delete(std::string_view path, T handler, Args... args) {
    Delete(path, handler);
    Delete(path, args...);
  }

  template 
  void Patch(std::string_view registered_path, T handler) {
    router_->Patch(registered_path, handler);
  }
  template 
  void Patch(std::string_view path, T handler, Args... args) {
    Patch(path, handler);
    Patch(path, args...);
  }

  void Error(handler_wecn_t handler);

  /*!
   * Proxy `Router#Use()` to add middleware to the app router.
   * See Router#use() documentation for details.
   *
   * If the _fn_ parameter is an express app, then it will be
   * mounted at the _route_ specified.
   */
  void Use(handler_wn_t handler);
  void Use(std::string_view path, handler_t handler);
  void Use(std::string_view path, handler_wn_t handler);
  void Use(std::string_view path, RouterPtr router);
  Router& Use(std::string_view path);

  auto GetBaseRouter();

  //! called to start listening on port
  ExpressCpp& Listen(const uint16_t port, ready_fn_cb_error_code_t callback);

  void Run();
  void Stop();

  RouterPtr GetRouter() const;
  RouterPtr GetRouter(std::string_view name) const;

  std::vector Stack() const;

  /**
   * Dispatch a req, res pair into the application. Starts pipeline processing.
   */
  void HandleRequest(request_t req, response_t res, std::function callback);

 private:
  void Init();

  std::mutex running_mtx;
  std::condition_variable running_cv;
  bool finished_{false};
  std::unique_ptr router_;
  std::shared_ptr listener_;
  std::vector routes_;
  std::size_t threads_{4u};
  bool error_handler_registered_{false};
  handler_wecn_t error_handler_;
  bool listening_{false};
};

}  // namespace expresscpp

Web Proxy Viewer  |  New URL  |  Original Page