aboutsummaryrefslogtreecommitdiff
path: root/Src/devices/discoveryMonitor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Src/devices/discoveryMonitor.cpp')
-rw-r--r--Src/devices/discoveryMonitor.cpp105
1 files changed, 105 insertions, 0 deletions
diff --git a/Src/devices/discoveryMonitor.cpp b/Src/devices/discoveryMonitor.cpp
new file mode 100644
index 00000000..3a42bd08
--- /dev/null
+++ b/Src/devices/discoveryMonitor.cpp
@@ -0,0 +1,105 @@
+#include "main.h"
+#include "./discoveryMonitor.h"
+
+DiscoveryMonitor::DiscoveryMonitor()
+{
+ InitializeCriticalSection(&lock);
+}
+
+DiscoveryMonitor::~DiscoveryMonitor()
+{
+ DeleteCriticalSection(&lock);
+}
+
+void DiscoveryMonitor::Lock()
+{
+ EnterCriticalSection(&lock);
+}
+
+void DiscoveryMonitor::Unlock()
+{
+ LeaveCriticalSection(&lock);
+}
+
+BOOL DiscoveryMonitor::Register(ifc_deviceprovider *provider)
+{
+ Lock();
+
+ size_t index = activityList.size();
+ while(index--)
+ {
+ ActiveDiscovery *entry = &activityList[index];
+ if ((intptr_t)provider == entry->providerId)
+ {
+ entry->ref++;
+ Unlock();
+ return FALSE;
+ }
+ }
+
+ ActiveDiscovery record;
+ record.providerId = (intptr_t)provider;
+ record.ref = 1;
+
+ activityList.push_back(record);
+ index = activityList.size();
+
+ Unlock();
+ return (1 == index);
+}
+
+BOOL DiscoveryMonitor::Unregister(ifc_deviceprovider *provider)
+{
+ Lock();
+
+ size_t index = activityList.size();
+ while(index--)
+ {
+ ActiveDiscovery *entry = &activityList[index];
+ if ((intptr_t)provider == entry->providerId)
+ {
+ if (1 == entry->ref)
+ {
+ activityList.erase(activityList.begin() + index);
+ index = activityList.size();
+ Unlock();
+ return (0 == index);
+ }
+
+ entry->ref--;
+ break;
+ }
+ }
+
+ Unlock();
+ return FALSE;
+}
+
+BOOL DiscoveryMonitor::IsActive()
+{
+ size_t count;
+
+ Lock();
+
+ count = activityList.size();
+
+ Unlock();
+
+ return (0 != count);
+}
+
+BOOL DiscoveryMonitor::Reset()
+{
+ size_t count;
+
+ Lock();
+
+ count = activityList.size();
+ activityList.clear();
+
+ Unlock();
+
+ return (0 != count);
+}
+
+