private void ParseStateVarXml(String evented, String multicasted, XmlTextReader XMLDoc)
{
// if (XML=="")
// {
// return;
// }
string ComplexType = "";
string ComplexTypeNS = "";
UPnPComplexType CT = null;
DText P = new DText();
P.ATTRMARK = ":";
string minval = null;
string maxval = null;
string stepval = null;
bool HasDef = false;
string name = "";
string DataType = "";
string DefaultValue = null;
ArrayList allowedValueList = new ArrayList();
string LocalName = "";
string lname2 = "";
// StringReader MyString = new StringReader(XML);
// XmlTextReader XMLDoc = new XmlTextReader(MyString);
// XMLDoc.Read();
// XMLDoc.MoveToContent();
bool done = false;
while (!done && XMLDoc.Read())
{
switch (XMLDoc.NodeType)
{
case XmlNodeType.Element:
LocalName = XMLDoc.LocalName;
switch (XMLDoc.LocalName)
{
case "dataType":
if (XMLDoc.HasAttributes)
{
for (int i = 0; i < XMLDoc.AttributeCount; i++)
{
XMLDoc.MoveToAttribute(i);
if (XMLDoc.LocalName == "type")
{
P[0] = XMLDoc.Value;
if (P.DCOUNT() == 1)
{
ComplexType = P[1];
}
else
{
ComplexType = P[2];
ComplexTypeNS = P[1];
}
CT = (UPnPComplexType)ComplexTypeTable[ComplexType + ":" + XMLDoc.LookupNamespace(ComplexTypeNS)];
}
}
}
break;
case "allowedValueList":
bool done2 = false;
while (!done2 && XMLDoc.Read())
{
switch (XMLDoc.NodeType)
{
case XmlNodeType.Element:
lname2 = XMLDoc.LocalName;
break;
case XmlNodeType.EndElement:
if (XMLDoc.LocalName == "allowedValueList")
{
done2 = true;
}
break;
case XmlNodeType.Text:
if (lname2 == "allowedValue")
{
allowedValueList.Add(XMLDoc.Value);
}
break;
}
}
break;
case "allowedValueRange":
bool done3 = false;
while (!done3 && XMLDoc.Read())
{
switch (XMLDoc.NodeType)
{
case XmlNodeType.Element:
lname2 = XMLDoc.LocalName;
break;
case XmlNodeType.EndElement:
if (XMLDoc.LocalName == "allowedValueRange")
{
done3 = true;
}
break;
case XmlNodeType.Text:
switch (lname2)
{
case "minimum":
minval = XMLDoc.Value;
break;
case "maximum":
maxval = XMLDoc.Value;
break;
case "step":
stepval = XMLDoc.Value;
break;
}
break;
}
}
break;
}
break;
case XmlNodeType.EndElement:
if (XMLDoc.LocalName == "stateVariable")
{
done = true;
}
break;
case XmlNodeType.Text:
switch (LocalName)
{
case "name":
name = XMLDoc.Value.Trim();
break;
case "dataType":
DataType = XMLDoc.Value.Trim();
break;
case "defaultValue":
DefaultValue = XMLDoc.Value;
HasDef = true;
break;
}
break;
}
}
UPnPStateVariable var;
if (CT == null)
{
var = new UPnPStateVariable(name);
}
else
{
var = new UPnPStateVariable(name, CT);
}
var.ParentService = this;
if (evented == "yes")
{
var.SendEvent = true;
}
if (multicasted == "yes")
{
var.MulticastEvent = true;
}
var.VarType = DataType;
if (allowedValueList.Count > 0)
{
var.AllowedStringValues = (string[])allowedValueList.ToArray(typeof(string));
}
if (HasDef)
{
var.DefaultValue = UPnPService.CreateObjectInstance(var.GetNetType(), DefaultValue);
}
if ((minval != null) && (maxval != null))
{
Object stepobj = null;
if (stepval != null)
{
try
{
stepobj = UPnPService.CreateObjectInstance(var.GetNetType(), stepval);
}
catch (Exception)
{
stepobj = null;
}
}
object MIN;
object MAX;
try
{
MIN = UPnPService.CreateObjectInstance(var.GetNetType(), minval);
}
catch (Exception)
{
FieldInfo mi = var.GetNetType().GetField("MinValue");
MIN = mi.GetValue(null);
}
try
{
MAX = UPnPService.CreateObjectInstance(var.GetNetType(), maxval);
}
catch (Exception)
{
FieldInfo mi = var.GetNetType().GetField("MaxValue");
MAX = mi.GetValue(null);
}
var.SetRange(MIN,
MAX,
stepobj);
}
//StateVariables.Add(name,var);
StateVariables[name] = var; // TempPatch Only
/*
IDictionaryEnumerator en = RemoteMethods.GetEnumerator();
UPnPAction a;
while(en.MoveNext())
{
a = (UPnPAction)en.Value;
for(int x =0;x<a.ArgumentList.Length;++x)
{
if (a.ArgumentList[x].RelatedStateVar.Name == name)
{
a.ArgumentList[x].RelatedStateVar.VarType = DataType;
a.ArgumentList[x].RelatedStateVar.AllowedStringValues = var.AllowedStringValues;
a.ArgumentList[x].RelatedStateVar.DefaultValue = DefaultValue;
}
}
}*/
}