| 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);
}
/*----------------------------------------------------------------------
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;
}
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
m_Service(service),
m_AllowedValueRange(NULL),
m_IsSendingEvents(false),
- m_IsSendingEventsIndirectly(true)
+ m_IsSendingEventsIndirectly(true),
+ m_ShouldClearOnSend(false)
{
}
| 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;
}
m_Value = value;
+ m_ShouldClearOnSend = clearonsend;
m_Service->AddChanged(this);
}
}
/*----------------------------------------------------------------------
+| PLT_StateVariable::OnSendCompleted
++---------------------------------------------------------------------*/
+void
+PLT_StateVariable::OnSendCompleted()
+{
+ if(m_ShouldClearOnSend)
+ m_Value = m_DefaultValue;
+}
+
+/*----------------------------------------------------------------------
| PLT_StateVariable::ValidateValue
+---------------------------------------------------------------------*/
NPT_Result
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.
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);
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;