generated from bigladder/atheneum
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathclient.h
61 lines (54 loc) · 1.75 KB
/
client.h
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
#pragma once
#include "library.h"
class ClientClass {
public:
explicit ClientClass(std::string name_in);
std::string name;
LibraryClass library_object;
};
class ClientCourier : public Courier::Courier {
public:
explicit ClientCourier(ClientClass* client_class_pointer_in)
: client_class_pointer(client_class_pointer_in)
{
}
enum class MessageLevel { all, debug, info, warning, error };
MessageLevel message_level {MessageLevel::info};
protected:
void receive_error(const std::string& message) override
{
write_message("ERROR", message);
throw std::runtime_error(message);
}
void receive_warning(const std::string& message) override
{
if (message_level <= MessageLevel::warning) {
write_message("WARNING", message);
}
}
void receive_info(const std::string& message) override
{
if (message_level <= MessageLevel::info) {
write_message("INFO", message);
}
}
void receive_debug(const std::string& message) override
{
if (message_level <= MessageLevel::debug) {
write_message("DEBUG", message);
}
}
ClientClass* client_class_pointer;
constexpr static std::string_view context_format {" ClientClass '{}':"};
void write_message(const std::string& message_type, const std::string& message)
{
std::string context =
client_class_pointer ? fmt::format(context_format, client_class_pointer->name) : "";
std::cout << fmt::format("[{}]{} {}", message_type, context, message) << std::endl;
}
};
ClientClass::ClientClass(std::string name_in)
: name(std::move(name_in))
, library_object("My library object", std::make_shared<ClientCourier>(this))
{
}