Kaynağa Gözat

Initial commit

Denis V. Dedkov 1 yıl önce
işleme
4dd36db312
4 değiştirilmiş dosya ile 180 ekleme ve 0 silme
  1. 75 0
      .gitignore
  2. 35 0
      CMakeLists.txt
  3. 17 0
      Dockerfile
  4. 53 0
      main.cpp

+ 75 - 0
.gitignore

@@ -0,0 +1,75 @@
+# This file is used to ignore files which are generated
+# ----------------------------------------------------------------------------
+
+*~
+*.autosave
+*.a
+*.core
+*.moc
+*.o
+*.obj
+*.orig
+*.rej
+*.so
+*.so.*
+*_pch.h.cpp
+*_resource.rc
+*.qm
+.#*
+*.*#
+core
+!core/
+tags
+.DS_Store
+.directory
+*.debug
+Makefile*
+*.prl
+*.app
+moc_*.cpp
+ui_*.h
+qrc_*.cpp
+Thumbs.db
+*.res
+*.rc
+/.qmake.cache
+/.qmake.stash
+
+# qtcreator generated files
+*.pro.user*
+CMakeLists.txt.user*
+
+# xemacs temporary files
+*.flc
+
+# Vim temporary files
+.*.swp
+
+# Visual Studio generated files
+*.ib_pdb_index
+*.idb
+*.ilk
+*.pdb
+*.sln
+*.suo
+*.vcproj
+*vcproj.*.*.user
+*.ncb
+*.sdf
+*.opensdf
+*.vcxproj
+*vcxproj.*
+
+# MinGW generated files
+*.Debug
+*.Release
+
+# Python byte code
+*.pyc
+
+# Binaries
+# --------
+*.dll
+*.exe
+
+build/

+ 35 - 0
CMakeLists.txt

@@ -0,0 +1,35 @@
+cmake_minimum_required(VERSION 3.14)
+
+project(noolite-srv LANGUAGES CXX)
+
+set(CMAKE_CXX_STANDARD 17)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
+
+add_executable(noolite-srv
+  main.cpp
+)
+
+include(FetchContent)
+# cpp-httplib
+FetchContent_Declare(
+  httplib
+  GIT_REPOSITORY https://gogs.dended.keenetic.pro/ded/cpp-httplib.git
+  GIT_TAG master
+)
+FetchContent_MakeAvailable(httplib)
+
+# noolite
+FetchContent_Declare(
+  noolite
+  GIT_REPOSITORY https://gogs.dended.keenetic.pro/ded/noolitelib.git
+  GIT_TAG master
+)
+FetchContent_MakeAvailable(noolite)
+
+target_link_libraries(noolite-srv httplib noolite)
+
+include(GNUInstallDirs)
+install(TARGETS noolite-srv
+    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+)

+ 17 - 0
Dockerfile

@@ -0,0 +1,17 @@
+FROM alpine:latest AS builder
+LABEL stage=builder
+
+RUN apk add --no-cache git cmake clang ninja libusb-dev
+
+WORKDIR /build
+COPY . .
+
+RUN cmake CMakeLists.txt -DCMAKE_GENERATOR:STRING=Ninja -DCMAKE_BUILD_TYPE:STRING=MinSizeRel -DCMAKE_CXX_COMPILER:FILEPATH=/usr/bin/clang++-17 && cmake --build . --target all
+
+FROM alpine:latest
+
+run apk add --no-cache libstdc++ libusb
+
+COPY --from=builder /build/noolite-srv /bin/noolite-srv
+
+CMD ["/bin/noolite-srv"]

+ 53 - 0
main.cpp

@@ -0,0 +1,53 @@
+#include <iostream>
+#include <httplib.h>
+#include <noolite.h>
+
+namespace App {
+
+constexpr auto DefaultPort = 8888;
+constexpr auto DefaultHost = "0.0.0.0";
+
+static httplib::Server *srv = nullptr;
+
+}
+
+void signalHandler(int signum) {
+    std::cout << "\n\nInterrupt signal (" << signum << ") received.\n";
+
+    if (App::srv) {
+        App::srv->stop();
+        delete App::srv;
+    }
+
+    exit(signum);
+}
+
+int main(int argc, char *argv[])
+{
+    std::signal(SIGINT, signalHandler);
+
+    App::srv = new httplib::Server();
+
+    App::srv->Get("/", [](const httplib::Request &, httplib::Response &res) {
+        noolitelib::Noolite adapter;
+        if (adapter.sendCommand(0, noolitelib::Switch)) {
+            res.set_content("{\"Result\":\"Successful\"}", "application/json");
+        } else {
+            res.set_content("{\"Result\":\"Failed\"}", "application/json");
+        }
+    });
+
+    auto host = App::DefaultHost;
+    auto port = App::DefaultPort;
+
+    if (argc > 1) {
+        host = argv[1];
+    }
+    if (argc > 2) {
+        port = atoi(argv[2]);
+    }
+
+    App::srv->listen(host, port);
+
+    return 0;
+}