22 const std::string& version,
23 const std::string& source,
24 unsigned long long login_id,
25 const std::size_t max_messages,
26 const std::chrono::seconds& time_period,
32 , registered_(registered)
34 , messages_since_flood_start_(0)
35 , MaxMessages(max_messages)
36 , TimePeriod(time_period)
38 , moderator_(moderator)
55 cfg_.set_attr(
"status",
"lobby");
58 cfg_.set_attr(
"status",
"playing");
61 cfg_.set_attr(
"status",
"observing");
64 cfg_.set_attr(
"status",
"unknown");
70 const std::string& location)
73 cfg_.set_attr(
"available",
"yes");
76 cfg_.set_attr(
"available",
"no");
78 cfg_.set_attr_dup(
"game_id", std::to_string(game_id).c_str());
79 cfg_.set_attr_dup(
"location", location.c_str());
84 cfg_.set_attr(
"registered", registered ?
"yes" :
"no");
85 registered_ = registered;
90 const auto now = std::chrono::steady_clock::now();
91 if (flood_start_ == std::chrono::steady_clock::time_point{}) {
96 ++messages_since_flood_start_;
98 if (now - flood_start_ > TimePeriod) {
99 messages_since_flood_start_ = 0;
101 }
else if (messages_since_flood_start_ >= MaxMessages) {
node & set_attr_int(const char *key, int value)
node & set_attr(const char *key, const char *value)
node & set_attr_dup(const char *key, const char *value)
void mark_available(const int game_id=0, const std::string &location="")
void set_status(STATUS status)
void mark_registered(bool registered=true)
player(const std::string &n, simple_wml::node &cfg, long id, bool registered, const std::string &version, const std::string &source, unsigned long long login_id, const std::size_t max_messages=4, const std::chrono::seconds &time_period=std::chrono::seconds{10}, const bool moderator=false)
bool is_message_flooding()
static map_location::direction n