]> git.stg.codes - stg.git/blobdiff - projects/stargazer/plugins/other/smux/sensors.cpp
Moved common initialization code to a separate class method.
[stg.git] / projects / stargazer / plugins / other / smux / sensors.cpp
index 5a8e967abc8be78374d6e7397e612a51809c872d..f52a413b7aeff6543e3a4ccf32da5e67012cc0cf 100644 (file)
@@ -1,81 +1,21 @@
-#include "asn1/INTEGER.h"
+#include <cassert>
+
+#include "stg/INTEGER.h"
 
 #include "stg/user.h"
-#include "stg/user_property.h"
 
 #include "sensors.h"
 
-bool ConnectedUsersSensor::GetValue(ObjectSyntax_t * objectSyntax) const
-{
-int handle = users.OpenSearch();
-if (!handle)
-    return false;
-
-USER_PTR user;
-size_t count = 0;
-while (!users.SearchNext(handle, &user))
-    {
-    if (user->GetConnected())
-        ++count;
-    }
-
-users.CloseSearch(handle);
-
-ValueToOS(count, objectSyntax);
-return true;
-}
-
-bool AuthorizedUsersSensor::GetValue(ObjectSyntax_t * objectSyntax) const
-{
-int handle = users.OpenSearch();
-if (!handle)
-    return false;
-
-USER_PTR user;
-size_t count = 0;
-while (!users.SearchNext(handle, &user))
-    {
-    if (user->GetAuthorized())
-        ++count;
-    }
-
-users.CloseSearch(handle);
-
-ValueToOS(count, objectSyntax);
-return true;
-}
-
-bool AlwaysOnlineUsersSensor::GetValue(ObjectSyntax_t * objectSyntax) const
-{
-int handle = users.OpenSearch();
-if (!handle)
-    return false;
-
-USER_PTR user;
-size_t count = 0;
-while (!users.SearchNext(handle, &user))
-    {
-    if (user->GetProperty().alwaysOnline)
-        ++count;
-    }
-
-users.CloseSearch(handle);
-
-ValueToOS(count, objectSyntax);
-return true;
-}
-
-bool NoCashUsersSensor::GetValue(ObjectSyntax_t * objectSyntax) const
+bool UsersSensor::GetValue(ObjectSyntax_t * objectSyntax) const
 {
 int handle = users.OpenSearch();
-if (!handle)
-    return false;
+assert(handle && "USERS::OpenSearch is always correct");
 
 USER_PTR user;
 size_t count = 0;
 while (!users.SearchNext(handle, &user))
     {
-    if (user->GetProperty().cash < 0)
+    if (UserPredicate(user))
         ++count;
     }
 
@@ -85,122 +25,37 @@ ValueToOS(count, objectSyntax);
 return true;
 }
 
-bool DisabledDetailStatsUsersSensor::GetValue(ObjectSyntax_t * objectSyntax) const
+#ifdef DEBUG
+std::string UsersSensor::ToString() const
 {
 int handle = users.OpenSearch();
-if (!handle)
-    return false;
+assert(handle && "USERS::OpenSearch is always correct");
 
 USER_PTR user;
 size_t count = 0;
 while (!users.SearchNext(handle, &user))
     {
-    if (user->GetProperty().disabledDetailStat)
+    if (UserPredicate(user))
         ++count;
     }
 
 users.CloseSearch(handle);
 
-ValueToOS(count, objectSyntax);
-return true;
+std::string res;
+x2str(count, res);
+return res;
 }
+#endif
 
-bool DisabledUsersSensor::GetValue(ObjectSyntax_t * objectSyntax) const
+bool ActiveUsersSensor::UserPredicate(USER_PTR userPtr) const
 {
-int handle = users.OpenSearch();
-if (!handle)
+if (!userPtr->GetConnected())
     return false;
-
-USER_PTR user;
-size_t count = 0;
-while (!users.SearchNext(handle, &user))
+for (size_t i = 0; i < DIR_NUM; ++i)
     {
-    if (user->GetProperty().disabled)
-        ++count;
+    if (userPtr->GetSessionUpload()[i] > 0 ||
+        userPtr->GetSessionDownload()[i] > 0)
+        return true;
     }
-
-users.CloseSearch(handle);
-
-ValueToOS(count, objectSyntax);
-return true;
-}
-
-bool PassiveUsersSensor::GetValue(ObjectSyntax_t * objectSyntax) const
-{
-int handle = users.OpenSearch();
-if (!handle)
-    return false;
-
-USER_PTR user;
-size_t count = 0;
-while (!users.SearchNext(handle, &user))
-    {
-    if (user->GetProperty().passive)
-        ++count;
-    }
-
-users.CloseSearch(handle);
-
-ValueToOS(count, objectSyntax);
-return true;
-}
-
-bool CreditUsersSensor::GetValue(ObjectSyntax_t * objectSyntax) const
-{
-int handle = users.OpenSearch();
-if (!handle)
-    return false;
-
-USER_PTR user;
-size_t count = 0;
-while (!users.SearchNext(handle, &user))
-    {
-    if (user->GetProperty().credit > 0)
-        ++count;
-    }
-
-users.CloseSearch(handle);
-
-ValueToOS(count, objectSyntax);
-return true;
-}
-
-bool FreeMbUsersSensor::GetValue(ObjectSyntax_t * objectSyntax) const
-{
-int handle = users.OpenSearch();
-if (!handle)
-    return false;
-
-USER_PTR user;
-size_t count = 0;
-while (!users.SearchNext(handle, &user))
-    {
-    if (user->GetProperty().freeMb > 0)
-        ++count;
-    }
-
-users.CloseSearch(handle);
-
-ValueToOS(count, objectSyntax);
-return true;
-}
-
-bool TariffChangeUsersSensor::GetValue(ObjectSyntax_t * objectSyntax) const
-{
-int handle = users.OpenSearch();
-if (!handle)
-    return false;
-
-USER_PTR user;
-size_t count = 0;
-while (!users.SearchNext(handle, &user))
-    {
-    if (!user->GetProperty().nextTariff.ConstData().empty())
-        ++count;
-    }
-
-users.CloseSearch(handle);
-
-ValueToOS(count, objectSyntax);
-return true;
+return false;
 }