PACS System 0.1.0
PACS DICOM system library
Loading...
Searching...
No Matches
main.cpp
Go to the documentation of this file.
1
24#include "config.h"
25#include "server_app.h"
26
27#include <atomic>
28#include <csignal>
29#include <iostream>
30
31namespace {
32
34std::atomic<kcenon::pacs::example::pacs_server_app*> g_server{nullptr};
35
37void signal_handler(int signal) {
38 std::cout << "\nReceived signal " << signal << ", shutting down...\n";
39
40 auto* server = g_server.load();
41 if (server) {
42 server->request_shutdown();
43 }
44}
45
47void install_signal_handlers() {
48 std::signal(SIGINT, signal_handler);
49 std::signal(SIGTERM, signal_handler);
50#ifndef _WIN32
51 std::signal(SIGHUP, signal_handler);
52#endif
53}
54
55} // namespace
56
57int main(int argc, char* argv[]) {
58 std::cout << R"(
59 ____ _ ____ ____ ____
60 | _ \ / \ / ___/ ___| / ___| ___ _ ____ _____ _ __
61 | |_) / _ \| | \___ \ \___ \ / _ \ '__\ \ / / _ \ '__|
62 | __/ ___ \ |___ ___) | ___) | __/ | \ V / __/ |
63 |_| /_/ \_\____|____/ |____/ \___|_| \_/ \___|_|
64
65 Complete DICOM Archive Server
66)" << "\n";
67
68 // Parse command line arguments
70 if (!config) {
71 return 1;
72 }
73
74 // Install signal handlers
75 install_signal_handlers();
76
77 // Create and initialize server
78 kcenon::pacs::example::pacs_server_app server(config.value());
79 g_server = &server;
80
81 if (!server.initialize()) {
82 std::cerr << "Failed to initialize PACS server\n";
83 return 1;
84 }
85
86 // Start server
87 if (!server.start()) {
88 std::cerr << "Failed to start PACS server\n";
89 return 1;
90 }
91
92 // Wait for shutdown
93 server.wait_for_shutdown();
94
95 // Print final statistics
96 server.print_statistics();
97
98 g_server = nullptr;
99
100 std::cout << "PACS Server terminated\n";
101 return 0;
102}
bool start()
Start the DICOM server.
void print_statistics() const
Get current server statistics.
bool initialize()
Initialize all components.
void wait_for_shutdown()
Wait for server shutdown.
Configuration management for PACS Server sample.
int main()
Definition main.cpp:84
PACS Server application class.
static auto parse_args(int argc, char *argv[]) -> std::optional< pacs_server_config >
Parse configuration from command line arguments.
Definition config.cpp:18