platinum: allow some statevariables to reset to default value after sending completed...
authorAlasdair Campbell <alcoheca@gmail.com>
Tue, 9 Oct 2012 09:14:39 +0000 (10:14 +0100)
committermontellese <montellese@xbmc.org>
Sat, 17 May 2014 07:53:09 +0000 (09:53 +0200)
lib/libUPnP/Platinum/Source/Core/PltService.cpp
lib/libUPnP/Platinum/Source/Core/PltService.h
lib/libUPnP/Platinum/Source/Core/PltStateVariable.cpp
lib/libUPnP/Platinum/Source/Core/PltStateVariable.h

index b1fec51..b86fb23 100644 (file)
@@ -459,14 +459,14 @@ PLT_Service::IsSubscribable()
 |   PLT_Service::SetStateVariable
 +---------------------------------------------------------------------*/
 NPT_Result
-PLT_Service::SetStateVariable(const char* name, const char* value)
+PLT_Service::SetStateVariable(const char* name, const char* value, const bool clearonsend /*=false*/)
 {
     PLT_StateVariable* stateVariable = NULL;
     NPT_ContainerFind(m_StateVars, PLT_StateVariableNameFinder(name), stateVariable);
     if (stateVariable == NULL)
         return NPT_FAILURE;
 
-    return stateVariable->SetValue(value);
+    return stateVariable->SetValue(value, clearonsend);
 }
 
 /*----------------------------------------------------------------------
@@ -835,6 +835,13 @@ PLT_Service::NotifyChanged()
         m_Subscribers.Erase(sub_iter++);
     }
 
+    // some state variables must be cleared immediatly after sending
+    iter = vars_ready.GetFirstItem();
+    while (iter) {
+      PLT_StateVariable* var = *iter;
+      var->OnSendCompleted();
+      ++iter;
+    }
     return NPT_SUCCESS;
 }
 
index 84959f2..0401ea2 100644 (file)
@@ -216,8 +216,9 @@ public:
      when necessary.
      @param name state variable name
      @param value new State Variable value.
+     @param clearonsend whether the State Variable should clear immediatly in ::OnSendingCompleted
      */
-    NPT_Result SetStateVariable(const char* name, const char* value);
+    NPT_Result SetStateVariable(const char* name, const char* value, const bool clearonsend = false);
     
     /**
      Certain state variables notifications must not be sent faster than a certain 
index c3eb7cc..d38392e 100644 (file)
@@ -49,7 +49,8 @@ PLT_StateVariable::PLT_StateVariable(PLT_Service* service) :
     m_Service(service), 
     m_AllowedValueRange(NULL),
     m_IsSendingEvents(false),
-    m_IsSendingEventsIndirectly(true)
+    m_IsSendingEventsIndirectly(true),
+    m_ShouldClearOnSend(false)
 {
 }
 
@@ -146,7 +147,7 @@ PLT_StateVariable::SetRate(NPT_TimeInterval rate)
 |   PLT_StateVariable::SetValue
 +---------------------------------------------------------------------*/
 NPT_Result
-PLT_StateVariable::SetValue(const char* value)
+PLT_StateVariable::SetValue(const char* value, const bool clearonsend /*=false*/)
 {
     if (value == NULL) {
         return NPT_FAILURE;
@@ -160,6 +161,7 @@ PLT_StateVariable::SetValue(const char* value)
         }
 
         m_Value = value;
+        m_ShouldClearOnSend = clearonsend;
         m_Service->AddChanged(this); 
     }
 
@@ -184,6 +186,16 @@ PLT_StateVariable::IsReadyToPublish()
 }
 
 /*----------------------------------------------------------------------
+|   PLT_StateVariable::OnSendCompleted
++---------------------------------------------------------------------*/
+void
+PLT_StateVariable::OnSendCompleted()
+{
+  if(m_ShouldClearOnSend)
+      m_Value = m_DefaultValue;
+}
+
+/*----------------------------------------------------------------------
 |   PLT_StateVariable::ValidateValue
 +---------------------------------------------------------------------*/
 NPT_Result
index 46ec9e9..465e95c 100644 (file)
@@ -115,8 +115,9 @@ public:
      it is an allowed value. Once the value is validated, it is marked for eventing by
      calling the PLT_Service AddChanged function.
      @param value new state variable value. Can be a comma separated list of values.
+     @param clearonsend whether the statevariable should be cleared immediatly after sending
      */
-    NPT_Result SetValue(const char* value);
+    NPT_Result SetValue(const char* value, const bool clearonsend = false);
     
     /**
      Validate the new value of the state variable.
@@ -173,6 +174,12 @@ protected:
     bool IsReadyToPublish();
     
     /**
+     * If this statevariable should clear after sending to all subscribers, clears the value without
+     * eventing the change
+     */
+    void OnSendCompleted();
+
+    /**
      Serialize the state variable into xml.
      */
        NPT_Result Serialize(NPT_XmlElementNode& node);
@@ -189,6 +196,7 @@ protected:
     NPT_String              m_DefaultValue;
     bool                    m_IsSendingEvents;
     bool                    m_IsSendingEventsIndirectly;
+    bool                    m_ShouldClearOnSend;
     NPT_TimeInterval        m_Rate;
     NPT_TimeStamp           m_LastEvent;
     NPT_Array<NPT_String*>  m_AllowedValues;