forked from hyperblast/beefweb
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathserver_host.cpp
More file actions
72 lines (57 loc) · 2.39 KB
/
server_host.cpp
File metadata and controls
72 lines (57 loc) · 2.39 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include "server_host.hpp"
#include "artwork_controller.hpp"
#include "browser_controller.hpp"
#include "static_controller.hpp"
#include "play_queue_controller.hpp"
#include "player_controller.hpp"
#include "playlists_controller.hpp"
#include "query_controller.hpp"
#include "cache_support_filter.hpp"
#include "compression_filter.hpp"
#include "basic_auth_filter.hpp"
#include "response_headers_filter.hpp"
#include "client_config_controller.hpp"
#include "outputs_controller.hpp"
#include "log.hpp"
namespace msrv {
ServerHost::ServerHost(Player* player)
: player_(player), utilityQueue_(8, MSRV_THREAD_NAME("io"))
{
playerWorkQueue_ = player_->createWorkQueue();
player_->onEvents([this](PlayerEvents event) { handlePlayerEvents(event); });
serverThread_ = std::make_unique<ServerThread>();
}
ServerHost::~ServerHost()
{
player_->onEvents(PlayerEventsCallback());
}
void ServerHost::handlePlayerEvents(PlayerEvents events)
{
dispatcher_.dispatch(events);
serverThread_->dispatchEvents();
}
void ServerHost::reconfigure(SettingsDataPtr settings)
{
auto config = std::make_unique<ServerConfig>(settings->port, settings->allowRemote);
auto router = &config->router;
auto filters = &config->filters;
if (!settings->responseHeaders.empty())
filters->add(std::make_unique<ResponseHeadersFilter>(settings));
if (settings->authRequired)
filters->add(std::make_unique<BasicAuthFilter>(settings));
filters->add(std::make_unique<CompressionFilter>());
filters->add(std::make_unique<CacheSupportFilter>());
filters->add(std::make_unique<ExecuteHandlerFilter>());
auto playerQueue = playerWorkQueue_.get();
PlayerController::defineRoutes(router, playerQueue, player_, settings);
PlaylistsController::defineRoutes(router, playerQueue, player_, settings);
PlayQueueController::defineRoutes(router, playerQueue, player_);
OutputsController::defineRoutes(router, playerQueue, player_, settings);
QueryController::defineRoutes(router, playerQueue, player_, &dispatcher_, settings);
ArtworkController::defineRoutes(router, playerQueue, player_, contentTypes_);
BrowserController::defineRoutes(router, &utilityQueue_, settings);
StaticController::defineRoutes(router, &utilityQueue_, settings, contentTypes_);
ClientConfigController::defineRoutes(router, &utilityQueue_, settings);
serverThread_->restart(std::move(config));
}
}