PACS System 0.1.0
PACS DICOM system library
Loading...
Searching...
No Matches
server_app.h
Go to the documentation of this file.
1
11#ifndef PACS_EXAMPLE_PACS_SERVER_SERVER_APP_HPP
12#define PACS_EXAMPLE_PACS_SERVER_SERVER_APP_HPP
13
14#include "config.h"
15
28
29#include <atomic>
30#include <memory>
31#include <string>
32
33namespace kcenon::pacs::example {
34
91public:
92 // =========================================================================
93 // Construction / Destruction
94 // =========================================================================
95
100 explicit pacs_server_app(const pacs_server_config& config);
101
106
107 // Non-copyable, non-movable
112
113 // =========================================================================
114 // Lifecycle Management
115 // =========================================================================
116
125 [[nodiscard]] bool initialize();
126
135 [[nodiscard]] bool start();
136
143 void stop();
144
150 void wait_for_shutdown();
151
158 void request_shutdown();
159
160 // =========================================================================
161 // Status Queries
162 // =========================================================================
163
168 [[nodiscard]] bool is_running() const noexcept;
169
173 void print_statistics() const;
174
175private:
176 // =========================================================================
177 // Private Methods
178 // =========================================================================
179
181 [[nodiscard]] bool setup_storage();
182
184 [[nodiscard]] bool setup_database();
185
187 [[nodiscard]] bool setup_services();
188
190 [[nodiscard]] bool setup_server();
191
192 // =========================================================================
193 // Service Handlers
194 // =========================================================================
195
197 services::storage_status handle_store(
198 const core::dicom_dataset& dataset,
199 const std::string& calling_ae,
200 const std::string& sop_class_uid,
201 const std::string& sop_instance_uid);
202
204 std::vector<core::dicom_dataset> handle_query(
205 services::query_level level,
206 const core::dicom_dataset& query_keys,
207 const std::string& calling_ae);
208
210 std::vector<core::dicom_file> handle_retrieve(
211 const core::dicom_dataset& query_keys);
212
214 std::vector<core::dicom_dataset> handle_worklist_query(
215 const core::dicom_dataset& query_keys,
216 const std::string& calling_ae);
217
219 network::Result<std::monostate> handle_mpps_create(
220 const services::mpps_instance& instance);
221
223 network::Result<std::monostate> handle_mpps_set(
224 const std::string& sop_instance_uid,
225 const core::dicom_dataset& modifications,
226 services::mpps_status new_status);
227
228 // =========================================================================
229 // Member Variables
230 // =========================================================================
231
234
236 std::unique_ptr<network::dicom_server> server_;
237
239 std::unique_ptr<storage::file_storage> file_storage_;
240
242 std::unique_ptr<storage::index_database> database_;
243
245 std::atomic<bool> shutdown_requested_{false};
246
248 bool initialized_{false};
249};
250
251} // namespace kcenon::pacs::example
252
253#endif // PACS_EXAMPLE_PACS_SERVER_SERVER_APP_HPP
std::unique_ptr< network::dicom_server > server_
DICOM server.
Definition server_app.h:236
std::vector< core::dicom_file > handle_retrieve(const core::dicom_dataset &query_keys)
Handle C-MOVE/C-GET retrieve.
bool setup_server()
Set up DICOM server.
network::Result< std::monostate > handle_mpps_create(const services::mpps_instance &instance)
Handle MPPS N-CREATE.
bool setup_storage()
Set up file storage.
pacs_server_app(const pacs_server_config &config)
Construct server application with configuration.
bool start()
Start the DICOM server.
bool initialized_
Initialization flag.
Definition server_app.h:248
pacs_server_app & operator=(const pacs_server_app &)=delete
std::unique_ptr< storage::index_database > database_
Index database.
Definition server_app.h:242
pacs_server_app(const pacs_server_app &)=delete
bool setup_services()
Set up DICOM services.
~pacs_server_app()
Destructor - stops server if running.
std::vector< core::dicom_dataset > handle_worklist_query(const core::dicom_dataset &query_keys, const std::string &calling_ae)
Handle worklist query.
services::storage_status handle_store(const core::dicom_dataset &dataset, const std::string &calling_ae, const std::string &sop_class_uid, const std::string &sop_instance_uid)
Handle incoming C-STORE request.
pacs_server_app & operator=(pacs_server_app &&)=delete
bool is_running() const noexcept
Check if server is running.
std::atomic< bool > shutdown_requested_
Shutdown flag.
Definition server_app.h:245
void print_statistics() const
Get current server statistics.
void stop()
Stop the server gracefully.
network::Result< std::monostate > handle_mpps_set(const std::string &sop_instance_uid, const core::dicom_dataset &modifications, services::mpps_status new_status)
Handle MPPS N-SET.
std::vector< core::dicom_dataset > handle_query(services::query_level level, const core::dicom_dataset &query_keys, const std::string &calling_ae)
Handle C-FIND query.
bool initialize()
Initialize all components.
pacs_server_config config_
Server configuration.
Definition server_app.h:233
std::unique_ptr< storage::file_storage > file_storage_
File storage.
Definition server_app.h:239
pacs_server_app(pacs_server_app &&)=delete
void wait_for_shutdown()
Wait for server shutdown.
void request_shutdown()
Request shutdown.
bool setup_database()
Set up database.
Configuration management for PACS Server sample.
DICOM Dataset - ordered collection of Data Elements.
DICOM Part 10 file handling for reading/writing DICOM files.
Multi-threaded DICOM server for handling multiple associations.
Filesystem-based DICOM storage with hierarchical organization.
PACS index database for metadata storage and retrieval.
DICOM MPPS (Modality Performed Procedure Step) SCP service.
DICOM Query SCP service (C-FIND handler)
DICOM Retrieve SCP service (C-MOVE/C-GET handler)
DICOM Server configuration structures.
DICOM Storage SCP service (C-STORE handler)
Complete PACS server configuration.
Definition config.h:90
DICOM Verification SCP service (C-ECHO handler)
DICOM Modality Worklist SCP service (MWL C-FIND handler)