X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/4271ab433cd55bbd2612292bcf39e4dc3d7274f1..0907aa4037b12b6b88ee24495d4577a064d4f8db:/projects/stargazer/plugins/other/smux/sensors.cpp diff --git a/projects/stargazer/plugins/other/smux/sensors.cpp b/projects/stargazer/plugins/other/smux/sensors.cpp new file mode 100644 index 00000000..9a87cbda --- /dev/null +++ b/projects/stargazer/plugins/other/smux/sensors.cpp @@ -0,0 +1,59 @@ +#include + +#include "stg/INTEGER.h" + +#include "stg/user.h" + +#include "sensors.h" + +bool UsersSensor::GetValue(ObjectSyntax_t * objectSyntax) const +{ +int handle = users.OpenSearch(); +assert(handle && "USERS::OpenSearch is always correct"); + +STG::User* user; +size_t count = 0; +while (!users.SearchNext(handle, &user)) + { + if (UserPredicate(user)) + ++count; + } + +users.CloseSearch(handle); + +ValueToOS(count, objectSyntax); +return true; +} + +#ifdef DEBUG +std::string UsersSensor::ToString() const +{ +int handle = users.OpenSearch(); +assert(handle && "USERS::OpenSearch is always correct"); + +STG::User* user; +size_t count = 0; +while (!users.SearchNext(handle, &user)) + { + if (UserPredicate(user)) + ++count; + } + +users.CloseSearch(handle); + +return std::to_string(count); +} +#endif + +bool ActiveUsersSensor::UserPredicate(STG::User* userPtr) const +{ +if (!userPtr->GetConnected()) + return false; +for (size_t i = 0; i < DIR_NUM; ++i) + { + if (userPtr->GetSessionUpload()[i] > 0 || + userPtr->GetSessionDownload()[i] > 0) + return true; + } +return false; +}