private void GenerateAddDevice(CodeProcessor cs, UPnPDevice device) { string dev = gendevnumber.ToString(); if (gendevnumber == 0) dev = ""; if (device.ParentDevice == null) { cs.Append("device = UPnPDevice.CreateRootDevice(1800,1.0,\"\\\\\");"+cl); } else { cs.Append("UPnPDevice device"+dev+" = UPnPDevice.CreateEmbeddedDevice(1,System.Guid.NewGuid().ToString());"+cl); } // // Add Custom Tags // foreach (string ns in device.GetCustomFieldFromDescription_Namespaces()) { foreach (KeyValuePair<string, string> tag in device.GetCustomFieldsFromDescription(ns)) { cs.Append("device" + dev + ".AddCustomFieldInDescription(\"" + tag.Key + "\", \"" + tag.Value + "\", \"" + ns + "\");" + cl); } } cs.Append(cl); cs.Append("device"+dev+".FriendlyName = \""+device.FriendlyName+"\";"+cl); if (device.Manufacturer != null) cs.Append("device"+dev+".Manufacturer = \""+device.Manufacturer+"\";"+cl); if (device.ManufacturerURL != null) cs.Append("device"+dev+".ManufacturerURL = \""+device.ManufacturerURL+"\";"+cl); if (device.ModelName != null) cs.Append("device"+dev+".ModelName = \""+device.ModelName+"\";"+cl); if (device.ModelDescription != null) cs.Append("device"+dev+".ModelDescription = \""+device.ModelDescription+"\";"+cl); if (device.ModelURL != null) cs.Append("device"+dev+".ModelURL = new Uri(\""+device.ModelURL.ToString()+"\");"+cl); if (device.ModelNumber != null) cs.Append("device"+dev+".ModelNumber = \""+device.ModelNumber+"\";"+cl); cs.Append("device"+dev+".HasPresentation = false;"+cl); cs.Append("device"+dev+".DeviceURN = \""+device.DeviceURN+"\";"+cl); foreach (UPnPService service in device.Services) { string servicename = (string)ServiceNames[service]; cs.Append(nspace+".Dv" + servicename + " " + servicename + " = new "+nspace+".Dv" + servicename + "();" + cl); //ConnectionManager.External_ConnectionComplete(new OpenSource.DeviceBuilder.ConnectionManager.Delegate_ConnectionComplete(ConnectionCompleteAction)); foreach (UPnPAction action in service.Actions) { cs.Append(servicename + ".External_" + action.Name + " = new "+nspace+".Dv" + servicename + ".Delegate_" + action.Name + "(" + servicename + "_" + action.Name + ");" + cl); } cs.Append("device"+dev+".AddService(" + servicename + ");" + cl); } gendevnumber++; foreach (UPnPDevice embeddeddevice in device.EmbeddedDevices) { int dn = gendevnumber; GenerateAddDevice(cs,embeddeddevice); cs.Append("device"+dev+".AddDevice(device" + dn + ");" + cl); gendevnumber++; } cs.Append(cl); }
private void ProcessDevice_BuildService(UPnPDevice device, CodeProcessor cs) { // // Add Custom Tags // foreach (string ns in device.GetCustomFieldFromDescription_Namespaces()) { foreach (KeyValuePair<string, string> tag in device.GetCustomFieldsFromDescription(ns)) { cs.Append(" device.AddCustomTag(\"" + ns + "\", \"" + tag.Key + "\", \"" + tag.Value + "\");" + cl); } } // // Populate the rest of the Metadata // cs.Append(" device.Manufacturer = \"" + device.Manufacturer + "\";"+cl); cs.Append(" device.ManufacturerURL = \"" + device.ManufacturerURL + "\";"+cl); cs.Append(" device.ModelDescription = \"" + device.ModelDescription + "\";"+cl); cs.Append(" device.ModelName = \"" + device.ModelName + "\";"+cl); cs.Append(" device.ModelNumber = \"" + device.ModelNumber + "\";"+cl); cs.Append(" device.ModelURL = \"" + device.ModelURL + "\";"+cl); cs.Append(" device.SerialNumber = \"" + device.SerialNumber + "\";" + cl); // // Process Services/Devices // foreach (UPnPService service in device.Services) { string serviceName = (string)ServiceNames[service]; cs.Append(" service = new UPnPService(\""); cs.Append(service.ServiceURN + "\", \"" + service.ServiceID + "\");" + cl); foreach (UPnPStateVariable var in service.GetStateVariables()) { cs.Append(" var = new UPnPStateVariable(\"" + var.Name + "\", \"" + var.ValueType + "\", " + (var.SendEvent ? "true" : "false") + ");" + cl); // // Populate Fields // if (var.AllowedStringValues != null) { bool isFirst = true; StringBuilder asb = new StringBuilder(); foreach (string value in var.AllowedStringValues) { if (!isFirst) { asb.Append(", "); } else { isFirst = false; } asb.Append("\"" + value + "\""); } cs.Append(" var.SetAllowedValues(new String[]{" + asb.ToString() + "});" + cl); } if (var.Minimum != null || var.Maximum != null) { // Set Range cs.Append(" var.SetRange(" + (var.Minimum != null ? ("\"" + var.Minimum.ToString() + "\"") : "null") + ", " + (var.Maximum != null ? ("\"" + var.Maximum.ToString() + "\"") : "null") + ", " + (var.Step != null ? ("\"" + var.Step.ToString() + "\"") : "null") + ");" + cl); } // Set Default Value if (var.DefaultValue != null) { cs.Append(" var.SetDefaultValue(\"" + var.DefaultValue.ToString() + "\");" + cl); } cs.Append(" service.AddStateVariable(var);" + cl); } foreach (UPnPAction action in service.Actions) { cs.Append(cl); cs.Append(" inParams.clear();" + cl); foreach (UPnPArgument arg in action.Arguments) { cs.Append(" arg = new UPnPArgument(\"" + arg.Name + "\", ArgumentDirection."); if (arg.IsReturnValue) { cs.Append("RETURN"); } else { cs.Append(arg.Direction.ToUpper()); } cs.Append(", service.getStateVariable(\"" + arg.RelatedStateVar.Name + "\"));" + cl); cs.Append(" inParams.add(arg);" + cl); } cs.Append(" action = new UPnPAction(\"" + action.Name + "\", inParams, new " + serviceName + "_" + action.Name + "_Dispatcher());" + cl); cs.Append(" service.AddAction(action);" + cl); } cs.Append(" device.AddService(service);" + cl); } cs.Append(" mDevice" + embeddedTable[device].ToString() + " = device;" + cl); foreach (UPnPDevice eDevice in device.EmbeddedDevices) { ++eDeviceIndex; cs.Append(cl); cs.Append(" tmpDevice = new UPnPDevice(uniqueIdentifier" + eDeviceIndex.ToString() + ", friendlyName" + eDeviceIndex.ToString() + ", \"" + eDevice.DeviceURN + "\");" + cl); cs.Append(" device.AddEmbeddedDevice(tmpDevice);" + cl); cs.Append(" device = tmpDevice;" + cl); ProcessDevice_BuildService(eDevice, cs); } }