1#pragma once
2
3#include "IServer.h"
4
5#include <daemon/BaseDaemon.h>
6
7/** Server provides three interfaces:
8 * 1. HTTP - simple interface for any applications.
9 * 2. TCP - interface for native clickhouse-client and for server to server internal communications.
10 * More rich and efficient, but less compatible
11 * - data is transferred by columns;
12 * - data is transferred compressed;
13 * Allows to get more information in response.
14 * 3. Interserver HTTP - for replication.
15 */
16
17
18namespace DB
19{
20
21class Server : public BaseDaemon, public IServer
22{
23public:
24 using ServerApplication::run;
25
26 Poco::Util::LayeredConfiguration & config() const override
27 {
28 return BaseDaemon::config();
29 }
30
31 Poco::Logger & logger() const override
32 {
33 return BaseDaemon::logger();
34 }
35
36 Context & context() const override
37 {
38 return *global_context;
39 }
40
41 bool isCancelled() const override
42 {
43 return BaseDaemon::isCancelled();
44 }
45
46 void defineOptions(Poco::Util::OptionSet & _options) override;
47protected:
48 int run() override;
49
50 void initialize(Application & self) override;
51
52 void uninitialize() override;
53
54 int main(const std::vector<std::string> & args) override;
55
56 std::string getDefaultCorePath() const override;
57
58private:
59 std::unique_ptr<Context> global_context;
60};
61
62}
63