]> git.stg.codes - stg.git/blob - projects/stargazer/plugins/other/smux/sensors.cpp
Merge remote-tracking branch 'github/master'
[stg.git] / projects / stargazer / plugins / other / smux / sensors.cpp
1 #include "sensors.h"
2
3 #include "stg/user.h"
4
5 #include <cassert>
6
7 #pragma GCC diagnostic push
8 #pragma GCC diagnostic ignored "-Wold-style-cast"
9 #include "stg/INTEGER.h"
10 #pragma GCC diagnostic pop
11
12 void UsersSensor::GetValue(ObjectSyntax_t * objectSyntax) const
13 {
14 int handle = users.OpenSearch();
15 assert(handle && "USERS::OpenSearch is always correct");
16
17 STG::User* user;
18 size_t count = 0;
19 while (!users.SearchNext(handle, &user))
20     {
21     if (UserPredicate(user))
22         ++count;
23     }
24
25 users.CloseSearch(handle);
26
27 ValueToOS(count, objectSyntax);
28 }
29
30 #ifdef DEBUG
31 std::string UsersSensor::ToString() const
32 {
33 int handle = users.OpenSearch();
34 assert(handle && "USERS::OpenSearch is always correct");
35
36 STG::User* user;
37 size_t count = 0;
38 while (!users.SearchNext(handle, &user))
39     {
40     if (UserPredicate(user))
41         ++count;
42     }
43
44 users.CloseSearch(handle);
45
46 return std::to_string(count);
47 }
48 #endif
49
50 bool ActiveUsersSensor::UserPredicate(STG::User* userPtr) const
51 {
52 if (!userPtr->GetConnected())
53     return false;
54 for (size_t i = 0; i < DIR_NUM; ++i)
55     {
56     if (userPtr->GetSessionUpload()[i] > 0 ||
57         userPtr->GetSessionDownload()[i] > 0)
58         return true;
59     }
60 return false;
61 }