From fa93e06bd5af2cbb28140eeda222945ddb36132a Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Tue, 24 Oct 2023 13:11:04 -0400 Subject: [PATCH] get build working --- CMakeLists.txt | 13 +++++++ cmake/xo_pywebsockConfig.cmake.in | 4 ++ include/README.md | 1 + src/pywebsock/CMakeLists.txt | 9 +++++ src/pywebsock/pywebsock.cpp | 63 +++++++++++++++++++++++++++++++ src/pywebsock/pywebsock.hpp.in | 25 ++++++++++++ 6 files changed, 115 insertions(+) create mode 100644 CMakeLists.txt create mode 100644 cmake/xo_pywebsockConfig.cmake.in create mode 100644 include/README.md create mode 100644 src/pywebsock/CMakeLists.txt create mode 100644 src/pywebsock/pywebsock.cpp create mode 100644 src/pywebsock/pywebsock.hpp.in diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 00000000..20774e1c --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,13 @@ +# xo-pywebsock/CMakeLists.txt + +cmake_minimum_required(VERSION 3.10) + +project(xo_pywebsock VERSION 1.0) + +include(xo_macros/xo-project-macros) + +xo_cxx_toplevel_options() + +add_subdirectory(src/pywebsock) + +xo_export_cmake_config(${PROJECT_NAME} ${PROJECT_VERSION} ${PROJECT_NAME}Targets) diff --git a/cmake/xo_pywebsockConfig.cmake.in b/cmake/xo_pywebsockConfig.cmake.in new file mode 100644 index 00000000..9c15f36a --- /dev/null +++ b/cmake/xo_pywebsockConfig.cmake.in @@ -0,0 +1,4 @@ +@PACKAGE_INIT@ + +include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@Targets.cmake") +check_required_components("@PROJECT_NAME@") diff --git a/include/README.md b/include/README.md new file mode 100644 index 00000000..1c13f62a --- /dev/null +++ b/include/README.md @@ -0,0 +1 @@ +placeholder. needed at install for generated .hpp file diff --git a/src/pywebsock/CMakeLists.txt b/src/pywebsock/CMakeLists.txt new file mode 100644 index 00000000..0ad6f596 --- /dev/null +++ b/src/pywebsock/CMakeLists.txt @@ -0,0 +1,9 @@ +# xo_pywebsock/src/pywebsock/CMakeLists.txt + +set(SELF_LIB pywebsock) +set(SELF_SRCS pywebsock.cpp) + +xo_pybind11_library(${SELF_LIB} ${PROJECT_NAME}Targets ${SELF_SRCS}) +xo_pybind11_dependency(${SELF_LIB} websock) +#xo_pybind11_header_dependency(${SELF_LIB pyfoo) +xo_pybind11_dependency(${SELF_LIB} xo_pyutil) diff --git a/src/pywebsock/pywebsock.cpp b/src/pywebsock/pywebsock.cpp new file mode 100644 index 00000000..e92c43ee --- /dev/null +++ b/src/pywebsock/pywebsock.cpp @@ -0,0 +1,63 @@ +/* @file pywebsock.cpp */ + +#include "pywebsock.hpp" +#include "xo/pywebutil/pywebutil.hpp" +#include "xo/websock/Webserver.hpp" +#include "xo/printjson/PrintJson.hpp" +//#include "web_util/EndpointDescr.hpp" +#include "xo/pyutil/pyutil.hpp" +#include + +namespace xo { + using xo::web::WebserverConfig; + using xo::web::Webserver; + using xo::web::Runstate; + using xo::json::PrintJsonSingleton; + using xo::ref::rp; + namespace py = pybind11; + + namespace web { + PYBIND11_MODULE(PYWEBSOCK_MODULE_NAME(), m) { + PYWEBUTIL_IMPORT_MODULE(); // = py::module_::import("pywebutil") + + /* module docstring */ + m.doc() = "pybind11 plugin for xo.websock"; + + py::enum_(m, "Runstate") + .value("stopped", Runstate::stopped) + .value("stop_requested", Runstate::stop_requested) + .value("running", Runstate::running); + + py::class_(m, "WebserverConfig") + .def(py::init(), + py::arg("port"), + py::arg("tls_flag"), + py::arg("host_check_flag"), + py::arg("use_retry_flag")) + .def_property_readonly("port", &WebserverConfig::port) + .def_property_readonly("tls_flag", &WebserverConfig::tls_flag) + .def_property_readonly("host_check_flag", &WebserverConfig::host_check_flag) + .def_property_readonly("use_retry_flag", &WebserverConfig::use_retry_flag); + + py::class_>(m, "Webserver") + .def_static("make", + [](WebserverConfig const & ws_config) + { + return Webserver::make(ws_config, + PrintJsonSingleton::instance()); + }) + .def_property_readonly("state", &Webserver::state) + .def("register_http_endpoint", &Webserver::register_http_endpoint) + .def("register_stream_endpoint", &Webserver::register_stream_endpoint) + .def("start_webserver", &Webserver::start_webserver) + .def("stop_webserver", &Webserver::stop_webserver) + .def("join_webserver", &Webserver::join_webserver) + .def("__repr__", &Webserver::display_string); + + m.def("make_webserver", + &Webserver::make); + } /*pywebsock*/ + } /*web*/ +} /*namespace xo*/ + +/* end pywebsock.cpp */ diff --git a/src/pywebsock/pywebsock.hpp.in b/src/pywebsock/pywebsock.hpp.in new file mode 100644 index 00000000..4d3ec777 --- /dev/null +++ b/src/pywebsock/pywebsock.hpp.in @@ -0,0 +1,25 @@ +/* @file pywebsock.hpp + * + * automatically generated from src/pywebsock/pywebsock.hpp.in + * see src/pywebsock/CMakeLists.txt + */ + +/* python requires module name = library name + * example: + * PYBIND11_MODULE(PYWEBSOCK_MODULE_NAME(), m) { ... } + */ +#define PYWEBSOCK_MODULE_NAME() @SELF_LIB@ + +/* example: + * py::module_::import(PYWEBSOCK_MODULE_NAME_STR) + */ +#define PYWEBSOCK_MODULE_NAME_STR "@SELF_LIB@" + +/* example: + * PYWEBSOCK_IMPORT_MODULE() + * replaces + * py::module_::import("pywebsock") + */ +#define PYWEBSOCK_IMPORT_MODULE() py::module_::import("@SELF_LIB@") + +/* end pywebsock.hpp */