internal override bool WriteRequest(EmberWriter writer, IStreamedParameterCollection streamedParameters) { if (this.RetrievalState.Equals(RetrievalState.None)) { var isEmpty = this.children.Count == 0; if (isEmpty) { writer.WriteStartApplicationDefinedType( GlowElementCollection.Element.OuterId, GlowQualifiedNode.InnerNumber); writer.WriteValue(GlowQualifiedNode.Path.OuterId, this.NumberPath); writer.WriteStartApplicationDefinedType( GlowQualifiedNode.Children.OuterId, GlowElementCollection.InnerNumber); } var result = this.WriteCommandCollection(writer, streamedParameters); if (isEmpty) { writer.WriteEndContainer(); writer.WriteEndContainer(); } return(result); } else { return(false); } }
internal sealed override bool WriteRequest(EmberWriter writer, IStreamedParameterCollection streamedParameters) { writer.WriteStartApplicationDefinedType(GlowGlobal.Root.OuterId, GlowRootElementCollection.InnerNumber); var result = this.WriteCommandCollection(writer, streamedParameters); writer.WriteEndContainer(); return(result); }
internal sealed override bool WriteRequest(EmberWriter writer, IStreamedParameterCollection streamedParameters) { if (this.RetrievalState.Equals(RetrievalState.None)) { writer.WriteStartApplicationDefinedType( GlowElementCollection.Element.OuterId, GlowQualifiedParameter.InnerNumber); writer.WriteValue(GlowQualifiedParameter.Path.OuterId, this.NumberPath); writer.WriteStartApplicationDefinedType( GlowQualifiedParameter.Children.OuterId, GlowElementCollection.InnerNumber); this.WriteCommandCollection(writer, GlowCommandNumber.Subscribe, RetrievalState.Complete); writer.WriteEndContainer(); writer.WriteEndContainer(); streamedParameters.Add(this); } return(false); }
internal bool WriteCommandCollection(EmberWriter writer, IStreamedParameterCollection streamedParameters) { if (this.children.Count == 0) { this.WriteCommandCollection(writer, GlowCommandNumber.GetDirectory, RetrievalState.RequestSent); return(true); } else { var result = false; foreach (var child in this.children.Values) { // We want to avoid short-circuit logic, which is why we use | rather than ||. result |= child.WriteRequest(writer, streamedParameters); } return(result); } }
/// <summary>Writes the payload of a message that contains appropriate requests for all elements that require /// one.</summary> /// <returns><c>true</c> if a provider response is expected due to the request; otherwise <c>false</c>. /// </returns> /// <remarks>Recursively visits all children with a state equal to <see cref="Model.RetrievalState.None"/>, writes /// a getDirectory command for nodes that do not yet have children or a subscribe command for stream parameters /// and changes their state accordingly.</remarks> internal virtual bool WriteRequest(EmberWriter writer, IStreamedParameterCollection streamedParameters) => false;