SVCS - Русская документация
Загрузка...
Поиск...
Не найдено
Server.hxx
См. документацию.
1
17#pragma once
18
22#include "RemoteProtocol.hxx"
23
24#include <boost/asio.hpp>
25#include <memory>
26#include <string>
27#include <thread>
28#include <vector>
29#include <atomic>
30#include <unordered_set>
31#include <mutex>
32
49 */
50namespace svcs::server {
51
52using namespace svcs::core;
53using namespace svcs::services;
54
55using boost::asio::ip::tcp;
56
72class Server {
73public:
89 Server(boost::asio::io_context& io_context,
90 unsigned short port,
91 std::shared_ptr<RepositoryManager> repo_manager,
92 std::shared_ptr<ISubject> event_bus);
93
101 ~Server();
102
112 bool start();
113
123 void stop();
124
134 bool isRunning() const;
135
145 unsigned short getPort() const;
146
156 size_t getActiveConnections() const;
157
158private:
166 void startAccept();
167
179 void handleAccept(std::shared_ptr<tcp::socket> socket, const boost::system::error_code& error);
180
190 void spawnClientHandler(std::shared_ptr<tcp::socket> socket);
191
198
201 void handleClient(std::shared_ptr<tcp::socket> socket);
202
214 std::string determineServiceType(std::shared_ptr<tcp::socket> socket);
215
229 bool executeProtocol(std::shared_ptr<tcp::socket> socket, const std::string& service_type);
230
240 void removeClientConnection(std::shared_ptr<tcp::socket> socket);
241
251 void notifyServerEvent(const std::string& message) const;
252
262 void notifyClientConnection(const std::string& message) const;
263
273 void notifyServerError(const std::string& message) const;
274
275private:
283 boost::asio::io_context& io_context_;
284
292 tcp::acceptor acceptor_;
293
301 std::shared_ptr<RepositoryManager> repository_manager_;
302
310 std::shared_ptr<ISubject> event_bus_;
311
319 std::atomic<bool> is_running_;
320
328 std::unordered_set<std::shared_ptr<tcp::socket>> active_connections_;
329
337 mutable std::mutex connections_mutex_;
338};
339
340}
Определяет структуру события, используемую для уведомлений по шаблону Observer.
Определяет интерфейс для компонента Subject (Издатель) шаблона Observer.
Объявление класса RemoteProtocol для обработки протокола удаленной связи.
Declaration of the RepositoryManager class, managing all repository-level file operations.
~Server()
Деструктор - останавливает сервер и освобождает ресурсы.
Определения Server.cxx:36
void stop()
Останавливает сервер корректно.
Определения Server.cxx:65
bool isRunning() const
Проверяет, запущен ли сервер в данный момент.
Определения Server.cxx:98
bool start()
Запускает сервер и начинает принимать соединения.
Определения Server.cxx:42
size_t getActiveConnections() const
Получает количество текущих активных клиентских соединений.
Определения Server.cxx:113
Server(boost::asio::io_context &io_context, unsigned short port, std::shared_ptr< RepositoryManager > repo_manager, std::shared_ptr< ISubject > event_bus)
Конструирует Server с указанными зависимостями.
Определения Server.cxx:23
unsigned short getPort() const
Получает номер порта, который прослушивает сервер.
Определения Server.cxx:103
Основные структуры данных СКВ и модель объектов.
Серверные компоненты и команды администрирования.
Компоненты сервисного слоя и инфраструктурные сервисы.