private void MSEARCHSink(AsyncSocket sender, Byte[] buffer, int HeadPointer, int BufferSize, int BytesRead, IPEndPoint source, IPEndPoint remote) { HTTPMessage msg = HTTPMessage.ParseByteArray(buffer, HeadPointer, BufferSize); DText P = new DText(); string USN = msg.GetTag("USN"); string UDN; if (USN.IndexOf("::") != -1) { UDN = USN.Substring(0, USN.IndexOf("::")); } else { UDN = USN; } UDN = UDN.Substring(5); sender.BufferBeginPointer = BufferSize; if (TestDevice.GetDevice(UDN) == null) { return; } lock (MSEARCHTable) { this.sample += "\r\n" + msg.GetTag("ST"); MSEARCHTable[msg.GetTag("ST").Trim()] = ""; } }
protected void PositionInfoSink(CpAVTransport sender, UInt32 InstanceID, UInt32 Track, string TrackDuration, string TrackMetaData, string TrackURI, string RelTime, string AbsTime, int RelCount, int AbsCount, UPnPInvokeException e, object Handle) { DText p = new DText(); p.ATTRMARK = ":"; try { p[0] = TrackDuration; _CurrentDuration = new TimeSpan(int.Parse(p[1]), int.Parse(p[2]), int.Parse(p[3])); } catch (Exception) { } try { p[0] = RelTime; _CurrentPosition = new TimeSpan(int.Parse(p[1]), int.Parse(p[2]), int.Parse(p[3])); } catch (Exception) { } if (OnCurrentPositionChanged != null) { OnCurrentPositionChanged(this); } _CurrentTrack = Track; this._TrackURI = HTTPMessage.UnEscapeString(TrackURI); if (this.OnTrackURIChanged != null) { OnTrackURIChanged(this); } if (OnCurrentTrackChanged != null) { OnCurrentTrackChanged(this); } lock (this) { --StateCounter; if (StateCounter == 0) { if (OnReady != null) { OnReady(this); } } } }
public void Shutdown() { // Release the position object. Position = null; // Release the fps object. FPS = null; // Release the camera object. Camera = null; // Release the text object. Text?.Shutdown(); Text = null; // Release the font shader object. FontShader?.Shuddown(); FontShader = null; // Release the cpu object. CPU?.Shutdown(); CPU = null; // Release the color shader object. ColorShader?.ShutDown(); ColorShader = null; // Release the tree object. Terrain?.ShutDown(); Terrain = null; // Release the input object. Input?.Shutdown(); Input = null; // Release the Direct3D object. D3D?.ShutDown(); D3D = null; }
/// <summary> /// Initializes a new instance /// </summary> /// <param name="version">Version Number</param> /// <param name="Service_ID">USN, if blank a new GUID will be created for you</param> /// <param name="Service_Type">The Type</param> /// <param name="IsStandard">True if standard, false if domain specific</param> public ServiceDescription(double version, String Service_ID, String Service_Type, bool IsStandard) { IsStandardService = IsStandard; if (Service_ID == "") { ServiceID = Guid.NewGuid ().ToString (); } else { ServiceID = Service_ID; } ServiceType = Service_Type; SCPDURL = "{" + Service_ID + "}scpd.xml"; ControlURL = "{" + Service_ID + "}control"; EventURL = "{" + Service_ID + "}event"; if (version == 0) { Major = 1; Minor = 0; } else { DText TempNum = new DText (); Major = int.Parse (TempNum.FIELD (version.ToString (), ".", 1)); if (TempNum.DCOUNT (version.ToString (), ".") == 2) { Minor = int.Parse (TempNum.FIELD (version.ToString (), ".", 2)); } else { Minor = 0; } } }
public void Shutdown() { // Release the position object. Position = null; // Release the light object. Light = null; // Release the fps object. FPS = null; // Release the camera object. Camera = null; // Release the text object. Text?.Shutdown(); Text = null; // Release the cpu object. CPU?.Shutdown(); CPU = null; // Release the terrain shader object. TerrainBumpMapShader?.ShutDown(); TerrainBumpMapShader = null; // Release the tree object. TerrainModel?.ShutDown(); TerrainModel = null; // Release the input object. Input?.Shutdown(); Input = null; // Release the Direct3D object. D3D?.ShutDown(); D3D = null; }
private void ReceiveSink(AsyncSocket sender, Byte[] buffer, int HeadPointer, int BufferSize, int BytesRead, IPEndPoint source, IPEndPoint remote) { DateTime EndTime = DateTime.Now; DText P = new DText(); HTTPMessage msg = HTTPMessage.ParseByteArray(buffer, 0, BufferSize); string USN = msg.GetTag("USN"); string UDN = USN; if (USN.IndexOf("::") != -1) { UDN = USN.Substring(0, USN.IndexOf("::")); } UDN = UDN.Substring(5); sender.BufferBeginPointer = BufferSize; if (UDN != TestDevice.UniqueDeviceName) { return; } string cc = msg.GetTag("Cache-Control"); P.ATTRMARK = "="; P[0] = cc; cc = P[2].Trim(); this.Cache = int.Parse(cc); DPA.AddDataPoint(EndTime.Subtract(StartTime)); MRE.Set(); }
public void Shutdown() { // Release the position object. Position = null; // Release the light object. Light = null; // Release the fps object. FPS = null; // Release the camera object. Camera = null; // Release the text object. Text?.Shutdown(); Text = null; // Release the cpu object. CPU?.Shutdown(); CPU = null; // Release the water shader object. WaterShader?.ShutDown(); WaterShader = null; // Release the water object. WaterModel?.ShutDown(); WaterModel = null; // Release the reflection shader object. ReflectionShader?.ShutDown(); ReflectionShader = null; // Release the reflection render to texture object. ReflectionTexture?.Shutdown(); ReflectionTexture = null; // Release the refraction render to texture object. RefractionTexture?.Shutdown(); RefractionTexture = null; // Release the sky plane shader object. SkyPlaneShader?.ShutDown(); SkyPlaneShader = null; // Release the sky plane object. SkyPlane?.ShurDown(); SkyPlane = null; // Release the sky dome shader object. SkyDomeShader?.ShutDown(); SkyDomeShader = null; // Release the sky dome object. SkyDome?.ShutDown(); SkyDome = null; // Release the terrain shader object. TerrainShader?.ShutDown(); TerrainShader = null; // Release the tree object. TerrainModel?.ShutDown(); TerrainModel = null; // Release the input object. Input?.Shutdown(); Input = null; // Release the Direct3D object. D3D?.ShutDown(); D3D = null; }
public virtual void Accept(DText type, Utf8JsonWriter x) { x.WriteStartObject(); x.WritePropertyName(DText.KEY_NAME); x.WriteStringValue(type.Key); x.WritePropertyName(DText.TEXT_NAME); x.WriteStringValue(type.TextOfCurrentAssembly); x.WriteEndObject(); }
public static string GetURNPrefix(string urn) { int len; DText p = new DText(); p.ATTRMARK = ":"; p[0] = urn; len = p[p.DCOUNT()].Length; return(urn.Substring(0, urn.Length - len)); }
public int Accept(DText data, TType type, Title x) { //if (x.FromIndex == x.ToIndex) //{ // throw new Exception($"title:{x.Name}为text类型,至少要占两列"); //} SetTitleValue(x, data.Apply(ToExcelStringVisitor.Ins, type.OrTag("sep", "#"))); //(_cells[_startRowIndex, x.FromIndex + 1] as Range).Value = type.RawValue; return(1); }
/// <summary> /// Method executes when a contentdirectory events a change in a container. /// </summary> /// <param name="sender"></param> /// <param name="NewValue"></param> private void Sink_OnContainerUpdateIDsChanged(CpContentDirectory sender, System.String NewValue) { string csv_containers = NewValue; Hashtable cache = new Hashtable(); DText parser = new DText(); DText parser2 = new DText(); parser.ATTRMARK = ","; parser2.ATTRMARK = ","; if (csv_containers != "") { parser[0] = csv_containers; int dcnt = parser.DCOUNT(); for (int i = 1; i <= dcnt; i++) { string id, update; if (Accumulator_ContainerUpdateIDs.Delimitor == ",") { id = parser[i++]; update = parser[i]; } else { string pair = parser[i]; parser2[0] = pair; id = parser2[1]; update = parser2[2]; } CpMediaContainer cpc = (CpMediaContainer)this.GetDescendent(id, cache); if (cpc != null) { try { UInt32 updateId = UInt32.Parse(update); if (updateId != cpc.UpdateID) { cpc.ForceUpdate(false); } } catch { cpc.ForceUpdate(false); } } } } cache.Clear(); }
public static MediaItem PopulateMetaData(MediaResource R, FileInfo F) { MediaItem RetVal; MediaBuilder.item Item = null; DText parser = new DText(); parser.ATTRMARK = "-"; parser.MULTMARK = "."; switch (F.Extension.ToUpper()) { case ".MP3": Item = ParseMP3_V1(F); if (Item == null) { parser[0] = F.Name; if (parser.DCOUNT() == 2) { Item = new MediaBuilder.musicTrack(parser[2, 1].Trim()); Item.creator = parser[1].Trim(); ((MediaBuilder.musicTrack)Item).artist = new PersonWithRole[1] { new PersonWithRole() }; ((MediaBuilder.musicTrack)Item).artist[0].Name = Item.creator; ((MediaBuilder.musicTrack)Item).artist[0].Role = null; } } break; } if (Item != null) { RetVal = MediaBuilder.CreateItem(Item); RetVal.AddResource(R); return(RetVal); } else { // Create a Generic Item string fname = F.Name; int fnameidx = fname.IndexOf("."); if (fnameidx != -1) { fname = fname.Substring(0, fnameidx); } MediaBuilder.item genericItem = new MediaBuilder.item(fname); RetVal = MediaBuilder.CreateItem(genericItem); RetVal.AddResource(R); return(RetVal); } }
/// <summary> /// <para> /// Instantiates a sorter based on the sortCriteria string. The basic algorithm for /// sorting is to supply a comma-separated-value (CSV) listing of property names /// (easily retrieved from using <see cref="Tags"/>'s indexer with the /// <see cref="CommonPropertyNames"/>, /// <see cref="_DC"/>, /// <see cref="_UPNP"/>, or /// <see cref="_ATTRIB"/> /// enumerators.) /// with each property name having a + or - sign to indicate ascending or descending /// order of the sorting for that property name. Assuming "T" is an instance of a /// <see cref="Tags"/> object. /// Example below. /// </para> /// /// <para> /// <list type="table"> /// <item> /// <term>"+" +T[CommonPropertyNames.title]+ ",-" +T[CommonPropertyNames.creator]</term> /// <description>Sorts with ascending titles first, then descending creators</description> /// </item> /// </list> /// </para> /// /// </summary> /// <param name="forceDistinction">if true, then any comparison that evaluates to equal will force an arbitrary ordering of the two objects in question</param> /// <param name="sortCriteria">a string with the property names in a CSV list, where /// each property name has a + or - sign to indicate ascending or descending order</param> public MediaSorter(bool forceDistinction, string sortCriteria) { this.forceDistinction = forceDistinction; if (sortCriteria != null) { if (sortCriteria != "") { DText parser = new DText(); parser.ATTRMARK = ","; parser[0] = sortCriteria; int size = parser.DCOUNT(); this.sortKeys = new ArrayList(size); // iterate through properties for sorting // for (int i = 1; i <= size; i++) { string prop = parser[i].Trim(); char asc_dsc = prop[0]; string property = prop.Substring(1); bool ascending = true; if (asc_dsc == '-') { ascending = false; } else if (asc_dsc == '+') { ascending = true; } else { throw new UPnPCustomException(709, "Invalid sort flag."); } MetadataValueComparer mvc = new MetadataValueComparer(property, ascending); this.sortKeys.Add(mvc); } } } if (this.sortKeys == null) { this.sortKeys = new ArrayList(0); } }
private void bt_txt_Click(object sender, EventArgs e) { DText txt = new DText { MyBrush = new SolidBrush(Color.FromArgb(128, Color.DarkOrchid)), Words = tb_txt.Text, Selectable = true //X = e.Location.X, //Y = e.Location.Y, }; CommandAdd add = new CommandAdd(); add.item = txt; paintPanel1.SetCommand(add); }
/// <summary> /// This method is called whenever we need to inspect a list of ConnectionIDs /// to see if any of them are new /// </summary> /// <param name="sender"></param> /// <param name="IDString"></param> /// <param name="e"></param> /// <param name="Handle"></param> protected void IDSink(CpConnectionManager sender, string IDString, UPnPInvokeException e, object Handle) { if ((e != null) || (IDString == "")) { return; } // This is a temp parser that will parse the CSV list of IDs DText p = new DText(); p.ATTRMARK = ","; p[0] = IDString; int len = p.DCOUNT(); for (int i = 1; i <= len; ++i) { // bool FOUND = false; int cid = int.Parse(p[i].Trim()); // lock(InstanceList) // { // foreach(AVConnection _AVC in InstanceList) // { // if(_AVC.ConnectionID == cid) // { // FOUND = true; // break; // } // } // } lock (this.CreateConnectionLock) { if (this.PendingCreateConnection == 0) { ConnectionManager.GetCurrentConnectionInfo(cid, null, new CpConnectionManager.Delegate_OnResult_GetCurrentConnectionInfo(ConnectionInfoSink)); } else { // We possible need to wait a maximum of 30 seconds, just in case events arrive // that involve this connection ID. When/if that happens, we will remove this // object from the monitor, and continue directly. this.ConnectionMonitor.Add(cid, 30); } } } }
/// <summary> /// This method is triggered whenever a ConnectionManagerEvent arrives, which tells us /// all of the current ConnectionIDs /// </summary> /// <param name="sender">The CpConnectionManager class that sent the event</param> /// <param name="CurrentIDs">A CSV list of ConnectionIDs</param> protected void ConnectionIDEventSink(CpConnectionManager sender, string CurrentIDs) { // We need to return immediately if this flag is set. // This flag is only set if PrepareForConnection in not implemented on this // renderer, in which case, there will be a default ConnectionID of 0, which // must never disappear. if (DontEverDelete == true) { return; } // This is a temp collection used to create an index of the ConnectionIDs that // were recieved in this event Hashtable h = new Hashtable(); // This is a temp parser used to parse the CSV list of IDs DText p = new DText(); p.ATTRMARK = ","; if (CurrentIDs != "") { p[0] = CurrentIDs; int len = p.DCOUNT(); for (int i = 1; i <= len; ++i) { // Adding a ConnectionID into the temp collection h[Int32.Parse(p[i])] = ""; } } // Lets find ones that were removed first foreach (AVConnection a in Connections) { if (h.ContainsKey(a.ConnectionID) == false) { // This ID was removed InstanceList.Remove(a); a.Dispose(); OnRemovedConnectionEvent.Fire(this, a, Guid.NewGuid().GetHashCode()); } } // Now lets look for new ones... This is easy IDSink(sender, CurrentIDs, null, Guid.NewGuid().GetHashCode()); }
/// <summary> /// Constructs a ProtocolInfoString using string. /// </summary> /// <param name="protocolInfo">proposed value of the protocolInfo string</param> public ProtocolInfoString(string protocolInfo) { DText parser = new DText(); parser.ATTRMARK = ":"; parser[0] = protocolInfo; _Protocol = parser[1]; _Network = parser[2]; _MimeType = parser[3]; _Info = parser[4]; StringBuilder sb = new StringBuilder(100); sb.AppendFormat("{0}:{1}:{2}:{3}", _Protocol, _Network, _MimeType, _Info); _value = sb.ToString(); }
public void Shutdown() { // Release the position object. Position = null; // Release the light object. Light = null; // Release the fps object. FPS = null; // Release the camera object. Camera = null; // Release the depth shader object. DepthShader?.ShutDown(); DepthShader = null; // Release the render to texture object. RenderTexture?.Shutdown(); RenderTexture = null; // Release the texture shader object. TextureShader?.ShutDown(); TextureShader = null; // Release the debug window bitmap object. DebugWindow?.Shutdown(); DebugWindow = null; // Release the text object. Text?.Shutdown(); Text = null; // Release the cpu object. CPU?.Shutdown(); CPU = null; // Release the terrain shader object. TerrainShader?.ShutDown(); TerrainShader = null; // Release the tree object. TerrainModel?.ShutDown(); TerrainModel = null; // Release the input object. Input?.Shutdown(); Input = null; // Release the Direct3D object. D3D?.ShutDown(); D3D = null; }
/// <summary> /// This method is called when an AsyncCall to GetProtocolInfo completes /// </summary> /// <param name="sender"></param> /// <param name="Source"></param> /// <param name="Sink"></param> /// <param name="e"></param> /// <param name="Handle"></param> protected void GetProtocolInfoSink(CpConnectionManager sender, System.String Source, System.String Sink, UPnPInvokeException e, object Handle) { if (e != null) { return; } if (Sink == "") { return; } // This is a temp parser to parse the supported ProtocolInfo values DText p = new DText(); p.ATTRMARK = ","; p[0] = Sink; int len = p.DCOUNT(); ProtocolInfoString istring; for (int i = 1; i <= len; ++i) { istring = new ProtocolInfoString(p[i]); // Add each individual entry ProtocolInfoList.Add(istring); } if (!this.__Init) { this.__Init = true; // Upon discovery of a renderer, we can't return the renderer to the user // until we at least parsed the supported ProtocolInfo values, otherwise // the user will experience incorrect behavior. Since we have just parsed // these values, we can fire this event. if (this.OnInitialized != null) { OnInitialized(this); } } }
public void Shutdown() { // Release the position object. Position = null; // Release the light object. Light = null; // Release the fps object. FPS = null; // Release the frustum object. Frustum = null; // Release the camera object. Camera = null; // Release the quad tree object. QuadTree?.Shutdown(); QuadTree = null; // Release the text object. Text?.Shutdown(); Text = null; // Release the font shader object. FontShader?.Shuddown(); FontShader = null; // Release the cpu object. CPU?.Shutdown(); CPU = null; // Release the terrain shader object. TerrainShader?.ShutDown(); TerrainShader = null; // Release the tree object. TerrainModel?.ShutDown(); TerrainModel = null; // Release the input object. Input?.Shutdown(); Input = null; // Release the Direct3D object. D3D?.ShutDown(); D3D = null; }
protected float GetTitleBox(string s, float w) { DText title = new DText(s, titleColor) { TextAlignment = StringAlignment.Center, ConstrainWidthToTextWidth = false, X = 0, Y = 3, Pickable = false }; if (title.Width + 20 > w) { w = title.Width + 20; } title.Width = w; titleBox = PPath.CreateRectangle(0, 0, w, title.Height + 5); titleBox.Pen = outlinePen; titleBox.Brush = titleBoxBrush; titleBox.AddChild(title); titleBox.Pickable = false; return(w); }
// Methods public bool Initialize(DDX11 D3Ddevice, DSystemConfiguration configuration) { // Create the first font object. Font1 = new DFont(); // Initialize the first font object. if (!Font1.Initialize(D3Ddevice.Device, "font01.txt", "font01.bmp", 32.0f, 3)) { return(false); } // Create the text object for the fps string. FpsString = new DText(); // Initialize the fps text string. if (!FpsString.Initialize(D3Ddevice.Device, Font1, configuration, 16, "FPS: 0", 10, 50, 0.0f, 1.0f, 0.0f, false, D3Ddevice.DeviceContext)) { return(false); } // Initial the previous frame fps. PreviousFPS = -1; // Create the text objects for the position strings. PositionStrings = new DText[6]; for (int i = 0; i < PositionStrings.Length; i++) { PositionStrings[i] = new DText(); } // Initialize the position text strings. if (!PositionStrings[0].Initialize(D3Ddevice.Device, Font1, configuration, 16, "X: 0", 10, 90, 1.0f, 1.0f, 1.0f, false, D3Ddevice.DeviceContext)) { return(false); } if (!PositionStrings[1].Initialize(D3Ddevice.Device, Font1, configuration, 16, "Y: 0", 10, 110, 1.0f, 1.0f, 1.0f, false, D3Ddevice.DeviceContext)) { return(false); } if (!PositionStrings[2].Initialize(D3Ddevice.Device, Font1, configuration, 16, "Z: 0", 10, 130, 1.0f, 1.0f, 1.0f, false, D3Ddevice.DeviceContext)) { return(false); } if (!PositionStrings[3].Initialize(D3Ddevice.Device, Font1, configuration, 16, "rX: 0", 10, 170, 1.0f, 1.0f, 1.0f, false, D3Ddevice.DeviceContext)) { return(false); } if (!PositionStrings[4].Initialize(D3Ddevice.Device, Font1, configuration, 16, "rY: 0", 10, 190, 1.0f, 1.0f, 1.0f, false, D3Ddevice.DeviceContext)) { return(false); } if (!PositionStrings[5].Initialize(D3Ddevice.Device, Font1, configuration, 16, "rZ: 0", 10, 210, 1.0f, 1.0f, 1.0f, false, D3Ddevice.DeviceContext)) { return(false); } // Initialize the previous frame position. PreviousPositions = new int[6]; VideoStrings = new DText[2]; for (int i = 0; i < VideoStrings.Length; i++) { VideoStrings[i] = new DText(); } // Initialize the position text strings. if (!VideoStrings[0].Initialize(D3Ddevice.Device, Font1, configuration, 256, D3Ddevice.VideoCardDescription, 10, 10, 1.0f, 1.0f, 1.0f, false, D3Ddevice.DeviceContext)) { return(false); } if (!VideoStrings[1].Initialize(D3Ddevice.Device, Font1, configuration, 64, D3Ddevice.VideoCardMemory.ToString(), 10, 30, 1.0f, 1.0f, 1.0f, false, D3Ddevice.DeviceContext)) { return(false); } return(true); }
/// <summary> /// Generates Device side implementation from SCPD XML /// </summary> /// <param name="ClassName">Class Name to build</param> /// <param name="ns">Namespace to use</param> /// <param name="SavePath">Path to save source</param> /// <param name="ServiceID">Service ID to use</param> /// <param name="ServiceURN">Service URN to use</param> /// <param name="SCPD_XML">SCPD XML String</param> public static void Generate(String ClassName, String ns, String SavePath, String ServiceID, String ServiceURN, String SCPD_XML) { UPnPService s = new UPnPService(1); DText p = new DText(); p.ATTRMARK = ":"; p[0] = ServiceURN; string v = p[p.DCOUNT()]; s.SetVersion(v); s.ParseSCPD(SCPD_XML); String cl = "\r\n"; StringBuilder cs = new StringBuilder(); UPnPArgument[] Args; UPnPArgument arg; UPnPStateVariable[] SV = s.GetStateVariables(); cs.Append("using Intel.UPNP;" + cl + cl); cs.Append("namespace " + ns + cl); cs.Append("{\r\n"); cs.Append(" /// <summary>" + cl); cs.Append(" /// Transparent DeviceSide UPnP Service" + cl); cs.Append(" /// </summary>" + cl); cs.Append(" public class " + ClassName + " : IUPnPService" + cl); cs.Append(" {" + cl + cl); cs.Append(" // Place your declarations above this line\r\n"); cs.Append("\r\n"); cs.Append(" #region AutoGenerated Code Section [Do NOT Modify, unless you know what you're doing]\r\n"); cs.Append(" //{{{{{ Begin Code Block\r\n"); cs.Append("\r\n"); cs.Append(" private _" + ClassName + " _S;\r\n"); cs.Append(" public static string URN = \"" + ServiceURN + "\";\r\n"); cs.Append(" public double VERSION\r\n"); cs.Append(" {\r\n"); cs.Append(" get\r\n"); cs.Append(" {\r\n"); cs.Append(" return(double.Parse(_S.GetUPnPService().Version));\r\n"); cs.Append(" }\r\n"); cs.Append(" }\r\n\r\n"); // Build Enumerations Hashtable elist = BuildEnumerations(SV); IDictionaryEnumerator el = elist.GetEnumerator(); VarData vd; while(el.MoveNext()) { vd = (VarData)el.Value; cs.Append(" public enum Enum_" + vd.VariableName + "\r\n"); cs.Append(" {\r\n"); foreach(EnumStruct vs in vd.Enumerations) { cs.Append(" " + vs.EnumName + ",\r\n"); } cs.Append(" }\r\n"); cs.Append(" public Enum_" + vd.VariableName + " "); if(s.GetStateVariableObject(vd.VariableName).SendEvent==true) { cs.Append("Evented_"); } cs.Append(vd.VariableName + "\r\n"); cs.Append(" {\r\n"); cs.Append(" set\r\n"); cs.Append(" {\r\n"); cs.Append(" string v = \"\";\r\n"); cs.Append(" switch(value)\r\n"); cs.Append(" {\r\n"); foreach(EnumStruct vs in vd.Enumerations) { cs.Append(" case Enum_" + vd.VariableName + "." + vs.EnumName + ":\r\n"); cs.Append(" v = \"" + vs.EnumValue + "\";\r\n"); cs.Append(" break;\r\n"); } cs.Append(" }\r\n"); cs.Append(" _S.SetStateVariable(\"" + vd.VariableName + "\",v);\r\n"); cs.Append(" }\r\n"); cs.Append(" get\r\n"); cs.Append(" {\r\n"); cs.Append(" Enum_" + vd.VariableName + " RetVal = 0;\r\n"); cs.Append(" string v = (string)_S.GetStateVariable(\"" + vd.VariableName + "\");\r\n"); cs.Append(" switch(v)\r\n"); cs.Append(" {\r\n"); foreach(EnumStruct vs in vd.Enumerations) { cs.Append(" case \"" + vs.EnumValue + "\":\r\n"); cs.Append(" RetVal = Enum_" + vd.VariableName + "." + vs.EnumName + ";\r\n"); cs.Append(" break;\r\n"); } cs.Append(" }\r\n"); cs.Append(" return(RetVal);\r\n"); cs.Append(" }\r\n"); cs.Append(" }\r\n"); } el.Reset(); while(el.MoveNext()) { vd = (VarData)el.Value; cs.Append(" static public string Enum_" + vd.VariableName + "_ToString(Enum_" + vd.VariableName + " en)\r\n"); cs.Append(" {\r\n"); cs.Append(" string RetVal = \"\";\r\n"); cs.Append(" switch(en)\r\n"); cs.Append(" {\r\n"); foreach(EnumStruct vs in vd.Enumerations) { cs.Append(" case Enum_" + vd.VariableName + "." + vs.EnumName + ":\r\n"); cs.Append(" RetVal = \"" + vs.EnumValue + "\";\r\n"); cs.Append(" break;\r\n"); } cs.Append(" }\r\n"); cs.Append(" return(RetVal);\r\n"); cs.Append(" }\r\n"); // Build Easy Way to get All Values cs.Append(" static public string[] Values_" + vd.VariableName + "\r\n"); cs.Append(" {\r\n"); cs.Append(" get\r\n"); cs.Append(" {\r\n"); cs.Append(" string[] RetVal = new string[" + vd.Enumerations.Count.ToString() + "]{"); string EasyStrings = ""; foreach(EnumStruct vs in vd.Enumerations) { if(EasyStrings == "") { EasyStrings = "\"" + vs.EnumValue + "\""; } else { EasyStrings = "\"" + vs.EnumValue + "\"," + EasyStrings; } } cs.Append(EasyStrings + "};\r\n"); cs.Append(" return(RetVal);\r\n"); cs.Append(" }\r\n"); cs.Append(" }\r\n"); } cs.Append(" public delegate void OnStateVariableModifiedHandler(" + ClassName + " sender);\r\n"); foreach(UPnPStateVariable V in SV) { cs.Append(" public event OnStateVariableModifiedHandler OnStateVariableModified_" + V.Name + ";\r\n"); } foreach(UPnPStateVariable V in SV) { if(elist.ContainsKey(V.Name)==false) { // Build Accessors cs.Append(" public " + V.GetNetType().FullName + " "); if(V.SendEvent==true) { cs.Append("Evented_"); } cs.Append(V.Name + "\r\n"); cs.Append(" {\r\n"); cs.Append(" get\r\n"); cs.Append(" {\r\n"); cs.Append(" return((" + V.GetNetType().FullName + ")_S.GetStateVariable(\"" + V.Name + "\"));\r\n"); cs.Append(" }\r\n"); cs.Append(" set\r\n"); cs.Append(" {\r\n"); cs.Append(" _S.SetStateVariable(\"" + V.Name + "\", value);\r\n"); cs.Append(" }\r\n"); cs.Append(" }\r\n"); } } foreach(UPnPStateVariable V in SV) { cs.Append(" public UPnPModeratedStateVariable.IAccumulator Accumulator_"); cs.Append(V.Name + "\r\n"); cs.Append(" {\r\n"); cs.Append(" get\r\n"); cs.Append(" {\r\n"); cs.Append(" return(((UPnPModeratedStateVariable)_S.GetUPnPService().GetStateVariableObject(\"" + V.Name + "\")).Accumulator);\r\n"); cs.Append(" }\r\n"); cs.Append(" set\r\n"); cs.Append(" {\r\n"); cs.Append(" ((UPnPModeratedStateVariable)_S.GetUPnPService().GetStateVariableObject(\"" + V.Name + "\")).Accumulator = value;\r\n"); cs.Append(" }\r\n"); cs.Append(" }\r\n"); cs.Append(" public double ModerationDuration_" + V.Name + "\r\n"); cs.Append(" {\r\n"); cs.Append(" get\r\n"); cs.Append(" {\r\n"); cs.Append(" return(((UPnPModeratedStateVariable)_S.GetUPnPService().GetStateVariableObject(\"" + V.Name + "\")).ModerationPeriod);\r\n"); cs.Append(" }\r\n"); cs.Append(" set\r\n"); cs.Append(" {\r\n"); cs.Append(" ((UPnPModeratedStateVariable)_S.GetUPnPService().GetStateVariableObject(\"" + V.Name + "\")).ModerationPeriod = value;\r\n"); cs.Append(" }\r\n"); cs.Append(" }\r\n"); } // Build MethodDelegates foreach(UPnPAction A in s.Actions) { cs.Append(" public delegate "); if(A.HasReturnValue==false) { cs.Append("void "); } else { cs.Append(A.GetRetArg().RelatedStateVar.GetNetType().FullName + " "); } cs.Append("Delegate_" + A.Name + "("); Args = A.ArgumentList; for(int i=0;i<Args.Length;++i) { arg = Args[i]; if(arg.IsReturnValue==false) { if(arg.Direction=="out") { cs.Append("out "); } if(arg.RelatedStateVar.AllowedStringValues==null) { cs.Append(arg.RelatedStateVar.GetNetType().FullName + " "); } else { cs.Append(ClassName + ".Enum_" + arg.RelatedStateVar.Name + " "); } cs.Append(arg.Name); if(i<Args.Length-1) { cs.Append(", "); } } } cs.Append(");\r\n"); } // Build Overriding Delegates cs.Append("\r\n"); foreach(UPnPAction A in s.Actions) { cs.Append(" public Delegate_" + A.Name + " External_" + A.Name + " = null;\r\n"); } cs.Append("\r\n"); // Build Ability to remove Optional State Variables foreach(UPnPStateVariable V in s.GetStateVariables()) { cs.Append(" public void RemoveStateVariable_" + V.Name + "()\r\n"); cs.Append(" {\r\n"); cs.Append(" _S.GetUPnPService().RemoveStateVariable(_S.GetUPnPService().GetStateVariableObject(\"" + V.Name + "\"));\r\n"); cs.Append(" }\r\n"); } // Build Ability to remove Optional Actions foreach(UPnPAction A in s.Actions) { cs.Append(" public void RemoveAction_" + A.Name + "()\r\n"); cs.Append(" {\r\n"); cs.Append(" _S.GetUPnPService().RemoveMethod(\"" + A.Name + "\");\r\n"); cs.Append(" }\r\n"); } // Add Helper Methods cs.Append(" public System.Net.IPEndPoint GetCaller()\r\n"); cs.Append(" {\r\n"); cs.Append(" return(_S.GetUPnPService().GetCaller());\r\n"); cs.Append(" }\r\n"); cs.Append(" public System.Net.IPEndPoint GetReceiver()\r\n"); cs.Append(" {\r\n"); cs.Append(" return(_S.GetUPnPService().GetReceiver());\r\n"); cs.Append(" }\r\n"); cs.Append("\r\n"); // Build Private Class cs.Append(" private class _" + ClassName + "\r\n"); cs.Append(" {\r\n"); cs.Append(" private " + ClassName + " Outer = null;\r\n"); cs.Append(" private UPnPService S;\r\n"); cs.Append(" internal _" + ClassName + "(" + ClassName + " n)\r\n"); cs.Append(" {\r\n"); cs.Append(" Outer = n;\r\n"); cs.Append(" S = BuildUPnPService();\r\n"); cs.Append(" }\r\n"); cs.Append(" public UPnPService GetUPnPService()\r\n"); cs.Append(" {\r\n"); cs.Append(" return(S);\r\n"); cs.Append(" }\r\n"); cs.Append(" public void SetStateVariable(string VarName, object VarValue)\r\n"); cs.Append(" {\r\n"); cs.Append(" S.SetStateVariable(VarName,VarValue);\r\n"); cs.Append(" }\r\n"); cs.Append(" public object GetStateVariable(string VarName)\r\n"); cs.Append(" {\r\n"); cs.Append(" return(S.GetStateVariable(VarName));\r\n"); cs.Append(" }\r\n"); cs.Append(" protected UPnPService BuildUPnPService()\r\n"); cs.Append(" {\r\n"); cs.Append(" UPnPStateVariable[] RetVal = new UPnPStateVariable[" + SV.Length.ToString() + "];\r\n"); for(int i=0;i<SV.Length;++i) { cs.Append(" RetVal[" + i.ToString() +"] = new UPnPModeratedStateVariable(\"" + SV[i].Name + "\", typeof(" + SV[i].GetNetType().FullName + "), " + SV[i].SendEvent.ToString().ToLower() + ");\r\n"); if((SV[i].Maximum!=null)|| (SV[i].Minimum!=null)|| (SV[i].Step!=null)) { cs.Append(" RetVal[" + i.ToString() +"].SetRange("); if(SV[i].Minimum==null) { cs.Append("null"); } else { cs.Append("(" + SV[i].Minimum.GetType().FullName + ")(" + SV[i].Minimum.ToString() + ")"); } cs.Append(","); if(SV[i].Maximum==null) { cs.Append("null"); } else { cs.Append("(" + SV[i].Maximum.GetType().FullName + ")(" + SV[i].Maximum.ToString() + ")"); } cs.Append(","); if(SV[i].Step==null) { cs.Append("null"); } else { cs.Append("(" + SV[i].Step.GetType().FullName + ")" + SV[i].Step.ToString()); } cs.Append(");\r\n"); } if(SV[i].DefaultValue!=null) { cs.Append(" RetVal[" + i.ToString() + "].DefaultValue = UPnPService.CreateObjectInstance(typeof(" + SV[i].GetNetType().FullName + "),\"" + UPnPService.SerializeObjectInstance(SV[i].DefaultValue) + "\");\r\n"); //cs.Append(" RetVal[" + i.ToString() + "].DefaultValue = (" + SV[i].GetNetType().FullName + ")(\"" + UPnPService.SerializeObjectInstance(SV[i].DefaultValue) + "\";\r\n"); } if(SV[i].AllowedStringValues!=null) { cs.Append(" RetVal[" + i.ToString() + "].AllowedStringValues = new string[" + SV[i].AllowedStringValues.Length.ToString() + "]{"); for(int ai=0;ai<SV[i].AllowedStringValues.Length;++ai) { cs.Append("\"" + SV[i].AllowedStringValues[ai] + "\""); if(ai<SV[i].AllowedStringValues.Length-1) { cs.Append(", "); } } cs.Append("};\r\n"); } System.Collections.IList e = s.Actions; foreach(UPnPAction A in e) { foreach(UPnPArgument ag in A.ArgumentList) { if(ag.RelatedStateVar.Name==SV[i].Name) { cs.Append(" RetVal[" + i.ToString() + "].AddAssociation(\"" + A.Name + "\", \"" + ag.Name + "\");\r\n"); } } } } // Build UPnPService cs.Append("\r\n"); cs.Append(" UPnPService S = new UPnPService(" + s.Version + ", \"" + ServiceID + "\", \"" + ServiceURN + "\", true, this);\r\n"); cs.Append(" for(int i=0;i<RetVal.Length;++i)\r\n"); cs.Append(" {\r\n"); cs.Append(" S.AddStateVariable(RetVal[i]);\r\n"); cs.Append(" }\r\n"); foreach(UPnPAction A in s.Actions) { cs.Append(" S.AddMethod(\"" + A.Name + "\");\r\n"); } cs.Append(" return(S);\r\n"); cs.Append(" }\r\n\r\n"); System.Collections.IList ee = s.Actions; foreach(UPnPAction A in ee) { if(A.HasReturnValue) { cs.Append(" [Intel.UPNP.ReturnArgument(\""+A.GetRetArg().Name+"\")]"+cl); } cs.Append(" public "); if(A.HasReturnValue==false) { cs.Append("void "); } else { cs.Append(A.GetRetArg().RelatedStateVar.GetNetType().FullName + " "); } cs.Append(A.Name+"("); Args = A.ArgumentList; for(int i=0;i<Args.Length;++i) { arg = Args[i]; if(arg.IsReturnValue==false) { if(arg.Direction=="out") { cs.Append("out "); } cs.Append(arg.RelatedStateVar.GetNetType().FullName + " "); cs.Append(arg.Name); if(i<Args.Length-1) { cs.Append(", "); } } } cs.Append(")" + cl); cs.Append(" {\r\n"); // Convert to Enum if neccessary Args = A.ArgumentList; for(int i=0;i<Args.Length;++i) { arg = Args[i]; if((arg.IsReturnValue==false)&& (arg.RelatedStateVar.AllowedStringValues!=null)) { cs.Append(" Enum_" + arg.RelatedStateVar.Name + " e_" + arg.Name + ";\r\n"); if(arg.Direction=="in") { cs.Append(" switch(" + arg.Name + ")\r\n"); cs.Append(" {\r\n"); vd = (VarData)elist[arg.RelatedStateVar.Name]; foreach(EnumStruct ss in vd.Enumerations) { cs.Append(" case \"" + ss.EnumValue + "\":\r\n"); cs.Append(" e_" + arg.Name + " = Enum_" + arg.RelatedStateVar.Name + "." + ss.EnumName + ";\r\n"); cs.Append(" break;\r\n"); } cs.Append(" default:\r\n"); cs.Append(" e_" + arg.Name + " = 0;\r\n"); cs.Append(" break;\r\n"); cs.Append(" }\r\n"); } } } // Make Method Call if(A.HasReturnValue==true) { cs.Append(" object RetObj = null;\r\n"); } cs.Append(" if(Outer.External_" + A.Name + " != null)\r\n"); cs.Append(" {\r\n"); cs.Append(" "); if(A.HasReturnValue==true) { cs.Append("RetObj = "); } cs.Append("Outer.External_" + A.Name + "("); Args = A.ArgumentList; for(int i=0;i<Args.Length;++i) { arg = Args[i]; if(arg.IsReturnValue==false) { if(arg.Direction=="out") { cs.Append("out "); } if(arg.RelatedStateVar.AllowedStringValues!=null) { cs.Append("e_"); } cs.Append(arg.Name); if(i<Args.Length-1) { cs.Append(", "); } } } cs.Append(");\r\n"); cs.Append(" }\r\n"); cs.Append(" else\r\n"); cs.Append(" {\r\n"); cs.Append(" "); if(A.HasReturnValue==true) { cs.Append("RetObj = "); } cs.Append("Sink_" + A.Name + "("); Args = A.ArgumentList; for(int i=0;i<Args.Length;++i) { arg = Args[i]; if(arg.IsReturnValue==false) { if(arg.Direction=="out") { cs.Append("out "); } if(arg.RelatedStateVar.AllowedStringValues!=null) { cs.Append("e_"); } cs.Append(arg.Name); if(i<Args.Length-1) { cs.Append(", "); } } } cs.Append(");\r\n"); cs.Append(" }\r\n"); Args = A.ArgumentList; for(int i=0;i<Args.Length;++i) { arg = Args[i]; if((arg.IsReturnValue==false)&& (arg.RelatedStateVar.AllowedStringValues!=null)) { if(arg.Direction=="out") { cs.Append(" switch(e_" + arg.Name + ")\r\n"); cs.Append(" {\r\n"); vd = (VarData)elist[arg.RelatedStateVar.Name]; foreach(EnumStruct ss in vd.Enumerations) { cs.Append(" case Enum_" + arg.RelatedStateVar.Name + "." + ss.EnumName + ":\r\n"); cs.Append(" " + arg.Name + " = \"" + ss.EnumValue + "\";\r\n"); cs.Append(" break;\r\n"); } cs.Append(" default:\r\n"); cs.Append(" " + arg.Name + " = \"\";\r\n"); cs.Append(" break;\r\n"); cs.Append(" }\r\n"); } } } if(A.HasReturnValue==true) { cs.Append(" return((" + A.GetRetArg().RelatedStateVar.GetNetType().FullName + ")RetObj);\r\n"); } cs.Append(" }\r\n"); } cs.Append("\r\n"); foreach(UPnPAction A in s.Actions) { cs.Append(" public Delegate_" + A.Name + " Sink_" + A.Name + ";\r\n"); } cs.Append(" }\r\n"); // End of Private Class // Build Constructor cs.Append(" public " + ClassName + "()\r\n"); cs.Append(" {\r\n"); cs.Append(" _S = new _" + ClassName + "(this);\r\n"); foreach(UPnPStateVariable V in SV) { cs.Append(" _S.GetUPnPService().GetStateVariableObject(\"" + V.Name + "\").OnModified += new UPnPStateVariable.ModifiedHandler(OnModifiedSink_" + V.Name + ");\r\n"); } foreach(UPnPAction A in s.Actions) { cs.Append(" _S.Sink_" + A.Name + " = new Delegate_" + A.Name + "(" + A.Name + ");\r\n"); } cs.Append(" }\r\n"); cs.Append(" public " + ClassName + "(string ID):this()\r\n"); cs.Append(" {\r\n"); cs.Append(" _S.GetUPnPService().ServiceID = ID;\r\n"); cs.Append(" }\r\n"); cs.Append(" public UPnPService GetUPnPService()\r\n"); cs.Append(" {\r\n"); cs.Append(" return(_S.GetUPnPService());\r\n"); cs.Append(" }\r\n"); foreach(UPnPStateVariable V in SV) { cs.Append(" private void OnModifiedSink_" + V.Name + "(UPnPStateVariable sender, object NewValue)\r\n"); cs.Append(" {\r\n"); cs.Append(" if(OnStateVariableModified_" + V.Name + " != null) OnStateVariableModified_" + V.Name + "(this);\r\n"); cs.Append(" }\r\n"); } cs.Append(" //}}}}} End of Code Block\r\n\r\n"); cs.Append(" #endregion\r\n"); cs.Append("\r\n"); foreach(UPnPAction A in s.Actions) { cs.Append(" /// <summary>\r\n"); cs.Append(" /// Action: " + A.Name + "\r\n"); cs.Append(" /// </summary>\r\n"); Args = A.ArgumentList; for(int i=0;i<Args.Length;++i) { arg = Args[i]; if(arg.IsReturnValue==false) { cs.Append(" /// <param name=\"" + arg.Name + "\">Associated State Variable: " + arg.RelatedStateVar.Name + "</param>\r\n"); } } if(A.HasReturnValue==true) { cs.Append(" /// <returns>Associated StateVariable: " + A.GetRetArg().RelatedStateVar.Name + "</returns>\r\n"); } cs.Append(" public "); if(A.HasReturnValue==false) { cs.Append("void "); } else { cs.Append(A.GetRetArg().RelatedStateVar.GetNetType().FullName + " "); } cs.Append(A.Name+"("); Args = A.ArgumentList; for(int i=0;i<Args.Length;++i) { arg = Args[i]; if(arg.IsReturnValue==false) { if(arg.Direction=="out") { cs.Append("out "); } if(arg.RelatedStateVar.AllowedStringValues!=null) { cs.Append("Enum_" + arg.RelatedStateVar.Name + " "); } else { cs.Append(arg.RelatedStateVar.GetNetType().FullName + " "); } cs.Append(arg.Name); if(i<Args.Length-1) { cs.Append(", "); } } } cs.Append(")" + cl); cs.Append(" {\r\n"); cs.Append(" //ToDo: Add Your implementation here, and remove exception\r\n"); cs.Append(" throw(new UPnPCustomException(800,\"This method has not been completely implemented...\"));\r\n"); cs.Append(" }\r\n"); } cs.Append(" }\r\n"); cs.Append("}"); UTF8Encoding UTF8 = new UTF8Encoding(); FileStream ws = new FileStream(SavePath, FileMode.Create, FileAccess.Write); byte[] buffer = UTF8.GetBytes(cs.ToString()); ws.Write(buffer,0,buffer.Length); ws.Close(); }
/// <summary> /// Generates Control Point Implementation /// </summary> /// <param name="ClassName">Class Name to generate</param> /// <param name="ns">Namespace to use</param> /// <param name="SavePath">Path to save source</param> /// <param name="ServiceURN">Service URN to use</param> /// <param name="SCPD_XML">SCPD XML</param> public static void GenerateCP(String ClassName, String ns, String SavePath, String ServiceURN, String SCPD_XML) { string urn = ServiceURN.Substring(0, ServiceURN.LastIndexOf(":")) + ":"; UPnPService s = new UPnPService(1); DText p = new DText(); ArrayList tlist = new ArrayList(); s.ParseSCPD(SCPD_XML); String cl = "\r\n"; StringBuilder cs = new StringBuilder(); UPnPArgument[] Args; UPnPArgument arg; UPnPStateVariable[] SV = s.GetStateVariables(); Hashtable elist = BuildEnumerations(SV); cs.Append("using System;\r\n"); cs.Append("using System.Collections;\r\n"); cs.Append("using System.Threading;\r\n"); cs.Append("using Intel.Utilities;\r\n"); cs.Append("using Intel.UPNP;" + cl + cl); cs.Append("namespace " + ns + cl); cs.Append("{\r\n"); cs.Append(" /// <summary>" + cl); cs.Append(" /// Transparent ClientSide UPnP Service" + cl); cs.Append(" /// </summary>" + cl); cs.Append(" public class " + ClassName + "\r\n"); cs.Append(" {" + cl); cs.Append(" private Hashtable UnspecifiedTable = Hashtable.Synchronized(new Hashtable());\r\n"); cs.Append(" internal UPnPService _S;\r\n\r\n"); cs.Append(" public UPnPService GetUPnPService()\r\n"); cs.Append(" {\r\n"); cs.Append(" return(_S);\r\n"); cs.Append(" }\r\n"); cs.Append(" public static string SERVICE_NAME = \"" + urn + "\";\r\n"); cs.Append(" public double VERSION\r\n"); cs.Append(" {\r\n"); cs.Append(" get\r\n"); cs.Append(" {\r\n"); cs.Append(" return(double.Parse(_S.Version));\r\n"); cs.Append(" }\r\n"); cs.Append(" }\r\n\r\n"); foreach(UPnPStateVariable v in SV) { if(v.SendEvent==true) { cs.Append(" public delegate void StateVariableModifiedHandler_" + v.Name + "(" + ClassName + " sender, "); if(elist.ContainsKey(v.Name)==true) { cs.Append("Enum_" + v.Name + " NewValue"); } else { cs.Append(v.GetNetType().FullName + " NewValue"); } cs.Append(");\r\n"); cs.Append(" private WeakEvent OnStateVariable_"+v.Name+"_Event = new WeakEvent();"+cl); cs.Append(" public event StateVariableModifiedHandler_" + v.Name + " OnStateVariable_" + v.Name + "\r\n"); cs.Append(" {"+cl); cs.Append(" add{OnStateVariable_"+v.Name+"_Event.Register(value);}"+cl); cs.Append(" remove{OnStateVariable_"+v.Name+"_Event.UnRegister(value);}"+cl); cs.Append(" }"+cl); cs.Append(" protected void " + v.Name + "_ModifiedSink(UPnPStateVariable Var, object NewValue)\r\n"); cs.Append(" {\r\n"); cs.Append(" OnStateVariable_" + v.Name + "_Event.Fire(this, "+v.Name+");"+cl); cs.Append(" }\r\n"); } } cs.Append(" public delegate void SubscribeHandler(" + ClassName + " sender, bool Success);\r\n"); cs.Append(" public event SubscribeHandler OnSubscribe;\r\n"); // Build Events/Delegates foreach(UPnPAction A in s.Actions) { cs.Append(" public delegate void Delegate_OnResult_" + A.Name + "(" + ClassName + " sender, "); foreach(UPnPArgument _arg in A.ArgumentList) { if(_arg.IsReturnValue==false) { if(_arg.RelatedStateVar.AllowedStringValues==null) { cs.Append(_arg.RelatedStateVar.GetNetType().FullName + " "); } else { cs.Append("Enum_" + _arg.RelatedStateVar.Name + " "); } cs.Append(_arg.Name + ", "); } } if(A.HasReturnValue==true) { if(A.GetRetArg().RelatedStateVar.AllowedStringValues==null) { cs.Append(A.GetRetArg().RelatedStateVar.GetNetType().FullName + " "); } else { cs.Append("Enum_" + A.GetRetArg().RelatedStateVar.Name + " "); } cs.Append("ReturnValue, "); } cs.Append("UPnPInvokeException e, object _Tag);\r\n"); cs.Append(" private WeakEvent OnResult_"+A.Name+"_Event = new WeakEvent();"+cl); cs.Append(" public event Delegate_OnResult_" + A.Name + " OnResult_" + A.Name + "\r\n"); cs.Append(" {"+cl); cs.Append(" add{OnResult_"+A.Name+"_Event.Register(value);}"+cl); cs.Append(" remove{OnResult_"+A.Name+"_Event.UnRegister(value);}"+cl); cs.Append(" }"+cl); } // Build Constructor cs.Append("\r\n"); cs.Append(" public " + ClassName + "(UPnPService s)\r\n"); cs.Append(" {\r\n"); cs.Append(" _S = s;\r\n"); cs.Append(" _S.OnSubscribe += new UPnPService.UPnPEventSubscribeHandler(_subscribe_sink);\r\n"); foreach(UPnPStateVariable v in SV) { if(v.SendEvent==true) { cs.Append(" if(HasStateVariable_" + v.Name + ") _S.GetStateVariableObject(\"" + v.Name + "\").OnModified += new UPnPStateVariable.ModifiedHandler(" + v.Name + "_ModifiedSink);\r\n"); } } cs.Append(" }\r\n"); // Build Dispose cs.Append(" public void Dispose()\r\n"); cs.Append(" {\r\n"); cs.Append(" _S.OnSubscribe -= new UPnPService.UPnPEventSubscribeHandler(_subscribe_sink);\r\n"); cs.Append(" OnSubscribe = null;\r\n"); foreach(UPnPStateVariable v in SV) { if(v.SendEvent==true) { cs.Append(" if(HasStateVariable_" + v.Name + ") _S.GetStateVariableObject(\"" + v.Name + "\").OnModified -= new UPnPStateVariable.ModifiedHandler(" + v.Name + "_ModifiedSink);\r\n"); } } cs.Append(" }\r\n"); cs.Append(" public void _subscribe(int Timeout)\r\n"); cs.Append(" {\r\n"); cs.Append(" _S.Subscribe(Timeout, null);\r\n"); cs.Append(" }\r\n"); cs.Append(" protected void _subscribe_sink(UPnPService sender, bool OK)\r\n"); cs.Append(" {\r\n"); cs.Append(" if(OnSubscribe!=null)\r\n"); cs.Append(" {\r\n"); cs.Append(" OnSubscribe(this, OK);\r\n"); cs.Append(" }\r\n"); cs.Append(" }\r\n"); // Build Enumerations cs.Append(" public void SetUnspecifiedValue(string EnumType, string val)\r\n"); cs.Append(" {\r\n"); cs.Append(" string hash = Thread.CurrentThread.GetHashCode().ToString() + \":\" + EnumType;\r\n"); cs.Append(" UnspecifiedTable[hash] = val;\r\n"); cs.Append(" }\r\n"); cs.Append(" public string GetUnspecifiedValue(string EnumType)\r\n"); cs.Append(" {\r\n"); cs.Append(" string hash = Thread.CurrentThread.GetHashCode().ToString() + \":\" + EnumType;\r\n"); cs.Append(" if(UnspecifiedTable.ContainsKey(hash)==false)\r\n"); cs.Append(" {\r\n"); cs.Append(" return(\"\");\r\n"); cs.Append(" }\r\n"); cs.Append(" string RetVal = (string)UnspecifiedTable[hash];\r\n"); cs.Append(" return(RetVal);\r\n"); cs.Append(" }\r\n"); IDictionaryEnumerator el = elist.GetEnumerator(); VarData vd; while(el.MoveNext()) { vd = (VarData)el.Value; cs.Append(" public string[] Values_" + vd.VariableName + "\r\n"); cs.Append(" {\r\n"); cs.Append(" get\r\n"); cs.Append(" {\r\n"); cs.Append(" UPnPStateVariable sv = _S.GetStateVariableObject(\"" + vd.VariableName + "\");\r\n"); cs.Append(" return(sv.AllowedStringValues);\r\n"); cs.Append(" }\r\n"); cs.Append(" }\r\n"); cs.Append(" public string Enum_" + vd.VariableName + "_ToString(Enum_" + vd.VariableName + " en)\r\n"); cs.Append(" {\r\n"); cs.Append(" string RetVal = \"\";\r\n"); cs.Append(" switch(en)\r\n"); cs.Append(" {\r\n"); foreach(EnumStruct vs in vd.Enumerations) { cs.Append(" case Enum_" + vd.VariableName + "." + vs.EnumName + ":\r\n"); cs.Append(" RetVal = \"" + vs.EnumValue + "\";\r\n"); cs.Append(" break;\r\n"); } cs.Append(" case Enum_" + vd.VariableName + "._UNSPECIFIED_:\r\n"); cs.Append(" RetVal = GetUnspecifiedValue(\"Enum_" + vd.VariableName + "\");\r\n"); cs.Append(" break;\r\n"); cs.Append(" }\r\n"); cs.Append(" return(RetVal);\r\n"); cs.Append(" }\r\n"); cs.Append(" public enum Enum_" + vd.VariableName + "\r\n"); cs.Append(" {\r\n"); cs.Append(" _UNSPECIFIED_,\r\n"); foreach(EnumStruct vs in vd.Enumerations) { cs.Append(" " + vs.EnumName + ",\r\n"); } cs.Append(" }\r\n"); cs.Append(" public Enum_" + vd.VariableName + " " + vd.VariableName + "\r\n"); cs.Append(" {\r\n"); cs.Append(" get\r\n"); cs.Append(" {\r\n"); cs.Append(" Enum_" + vd.VariableName + " RetVal = 0;\r\n"); cs.Append(" string v = (string)_S.GetStateVariable(\"" + vd.VariableName + "\");\r\n"); cs.Append(" switch(v)\r\n"); cs.Append(" {\r\n"); foreach(EnumStruct vs in vd.Enumerations) { cs.Append(" case \"" + vs.EnumValue + "\":\r\n"); cs.Append(" RetVal = Enum_" + vd.VariableName + "." + vs.EnumName + ";\r\n"); cs.Append(" break;\r\n"); } cs.Append(" default:\r\n"); cs.Append(" RetVal = Enum_" + vd.VariableName + "._UNSPECIFIED_;\r\n"); cs.Append(" SetUnspecifiedValue(\"Enum_" + vd.VariableName + "\", v);\r\n"); cs.Append(" break;\r\n"); cs.Append(" }\r\n"); cs.Append(" return(RetVal);\r\n"); cs.Append(" }\r\n"); cs.Append(" }\r\n"); } foreach(UPnPStateVariable V in SV) { if(elist.ContainsKey(V.Name)==false) { // Build Accessors cs.Append(" public " + V.GetNetType().FullName + " " + V.Name + "\r\n"); cs.Append(" {\r\n"); cs.Append(" get\r\n"); cs.Append(" {\r\n"); cs.Append(" return((" + V.GetNetType().FullName + ")_S.GetStateVariable(\"" + V.Name + "\"));\r\n"); cs.Append(" }\r\n"); cs.Append(" }\r\n"); } } foreach(UPnPStateVariable V in SV) { // Range Stuff if((V.Maximum!=null)||(V.Minimum!=null)) { cs.Append(" public bool HasMaximum_" + V.Name + "\r\n"); cs.Append(" {\r\n"); cs.Append(" get\r\n"); cs.Append(" {\r\n"); cs.Append(" return(_S.GetStateVariableObject(\"" + V.Name + "\").Maximum!=null);\r\n"); cs.Append(" }\r\n"); cs.Append(" }\r\n"); cs.Append(" public bool HasMinimum_" + V.Name + "\r\n"); cs.Append(" {\r\n"); cs.Append(" get\r\n"); cs.Append(" {\r\n"); cs.Append(" return(_S.GetStateVariableObject(\"" + V.Name + "\").Minimum!=null);\r\n"); cs.Append(" }\r\n"); cs.Append(" }\r\n"); cs.Append(" public " + V.GetNetType().FullName + " Maximum_" + V.Name + "\r\n"); cs.Append(" {\r\n"); cs.Append(" get\r\n"); cs.Append(" {\r\n"); cs.Append(" return((" + V.GetNetType().FullName +")_S.GetStateVariableObject(\"" + V.Name + "\").Maximum);\r\n"); cs.Append(" }\r\n"); cs.Append(" }\r\n"); cs.Append(" public " + V.GetNetType().FullName + " Minimum_" + V.Name + "\r\n"); cs.Append(" {\r\n"); cs.Append(" get\r\n"); cs.Append(" {\r\n"); cs.Append(" return((" + V.GetNetType().FullName +")_S.GetStateVariableObject(\"" + V.Name + "\").Minimum);\r\n"); cs.Append(" }\r\n"); cs.Append(" }\r\n"); } // Has Stuff cs.Append(" public bool HasStateVariable_" + V.Name + "\r\n"); cs.Append(" {\r\n"); cs.Append(" get\r\n"); cs.Append(" {\r\n"); cs.Append(" if(_S.GetStateVariableObject(\"" + V.Name + "\")==null)\r\n"); cs.Append(" {\r\n"); cs.Append(" return(false);\r\n"); cs.Append(" }\r\n"); cs.Append(" else\r\n"); cs.Append(" {\r\n"); cs.Append(" return(true);\r\n"); cs.Append(" }\r\n"); cs.Append(" }\r\n"); cs.Append(" }\r\n"); } foreach(UPnPAction A in s.Actions) { cs.Append(" public bool HasAction_" + A.Name + "\r\n"); cs.Append(" {\r\n"); cs.Append(" get\r\n"); cs.Append(" {\r\n"); cs.Append(" if(_S.GetAction(\"" + A.Name + "\")==null)\r\n"); cs.Append(" {\r\n"); cs.Append(" return(false);\r\n"); cs.Append(" }\r\n"); cs.Append(" else\r\n"); cs.Append(" {\r\n"); cs.Append(" return(true);\r\n"); cs.Append(" }\r\n"); cs.Append(" }\r\n"); cs.Append(" }\r\n"); } foreach(UPnPAction A in s.Actions) { // Build Sync Version cs.Append(" public "); if(A.HasReturnValue==false) { cs.Append("void "); } else { if(elist.ContainsKey(A.GetRetArg().RelatedStateVar.Name)==true) { cs.Append("Enum_" + A.GetRetArg().RelatedStateVar.Name + " "); } else { cs.Append(A.GetRetArg().RelatedStateVar.GetNetType().FullName + " "); } } cs.Append("Sync_" + A.Name + "("); tlist.Clear(); foreach(UPnPArgument _arg in A.ArgumentList) { if(_arg.IsReturnValue==false) { tlist.Add(_arg); } } Args = (UPnPArgument[])tlist.ToArray(typeof(UPnPArgument)); for(int i=0;i<Args.Length;++i) { arg = Args[i]; if(arg.Direction=="out") { cs.Append("out "); } if(elist.ContainsKey(arg.RelatedStateVar.Name)) { cs.Append("Enum_" + arg.RelatedStateVar.Name + " "); } else { cs.Append(arg.RelatedStateVar.GetNetType().FullName + " "); } cs.Append(arg.Name); if(i<Args.Length-1) { cs.Append(", "); } } cs.Append(")\r\n"); cs.Append(" {\r\n"); cs.Append(" UPnPArgument[] args = new UPnPArgument["); if(A.HasReturnValue==false) { cs.Append(A.ArgumentList.Length.ToString()); } else { cs.Append((A.ArgumentList.Length-1).ToString()); } cs.Append("];\r\n"); int ia=0; foreach(UPnPArgument _arg in A.ArgumentList) { if(_arg.IsReturnValue==false) { if(_arg.Direction=="in") { if(elist.ContainsKey(_arg.RelatedStateVar.Name)==true) { cs.Append(" switch(" + _arg.Name + ")\r\n"); cs.Append(" {\r\n"); foreach(EnumStruct ess in ((VarData)elist[_arg.RelatedStateVar.Name]).Enumerations) { cs.Append(" case Enum_" + _arg.RelatedStateVar.Name + "." + ess.EnumName + ":\r\n"); cs.Append(" args[" + ia.ToString() + "] = new UPnPArgument(\"" + _arg.Name + "\", \"" + ess.EnumValue + "\");\r\n"); cs.Append(" break;\r\n"); } cs.Append(" default:\r\n"); cs.Append(" args[" + ia.ToString() + "] = new UPnPArgument(\"" + _arg.Name + "\", GetUnspecifiedValue(\"Enum_" + _arg.RelatedStateVar.Name + "\"));\r\n"); cs.Append(" break;\r\n"); cs.Append(" }\r\n"); } else { cs.Append(" args[" + ia.ToString() + "] = new UPnPArgument(\"" + _arg.Name + "\", " + _arg.Name + ");\r\n"); } } else { cs.Append(" args[" + ia.ToString() + "] = new UPnPArgument(\"" + _arg.Name + "\", \"\");\r\n"); } ++ia; } } if(A.HasReturnValue==true) { cs.Append(" object RetVal = null;\r\n"); cs.Append(" RetVal = "); } else { cs.Append(" "); } cs.Append("_S.InvokeSync(\"" + A.Name + "\", args);\r\n"); if(A.HasReturnValue==true) { if(A.GetRetArg().RelatedStateVar.AllowedStringValues!=null) { cs.Append(" Enum_" + A.GetRetArg().RelatedStateVar.Name + " RetEnum = 0;\r\n"); cs.Append(" switch((string)RetVal)\r\n"); cs.Append(" {\r\n"); foreach(EnumStruct ess in ((VarData)elist[A.GetRetArg().RelatedStateVar.Name]).Enumerations) { cs.Append(" case \"" + ess.EnumValue + "\":\r\n"); cs.Append(" RetEnum = Enum_" + A.GetRetArg().RelatedStateVar.Name + "." + ess.EnumName + ";\r\n"); cs.Append(" break;\r\n"); } cs.Append(" default:\r\n"); cs.Append(" RetEnum = Enum_" + A.GetRetArg().RelatedStateVar.Name + "._UNSPECIFIED_;\r\n"); cs.Append(" SetUnspecifiedValue(\"Enum_" + A.GetRetArg().RelatedStateVar.Name + "\",(string)RetVal);\r\n"); cs.Append(" break;\r\n"); cs.Append(" }\r\n"); } } // Check if this is necessary bool IsNeccessary = false; foreach(UPnPArgument _arg in A.ArgumentList) { if((_arg.RelatedStateVar.AllowedStringValues!=null)&& (_arg.IsReturnValue==false)) { IsNeccessary = true; break; } } if(IsNeccessary==true) { cs.Append(" for(int i=0;i<args.Length;++i)\r\n"); cs.Append(" {\r\n"); cs.Append(" switch(args[i].Name)\r\n"); cs.Append(" {\r\n"); tlist.Clear(); foreach(UPnPArgument _arg in A.ArgumentList) { if(_arg.IsReturnValue==false) { tlist.Add(_arg); } } Args = (UPnPArgument[])tlist.ToArray(typeof(UPnPArgument)); foreach(UPnPArgument _arg in Args) { if(_arg.RelatedStateVar.AllowedStringValues!=null) { cs.Append(" case \"" + _arg.Name + "\":\r\n"); cs.Append(" switch((string)args[i].DataValue)\r\n"); cs.Append(" {\r\n"); foreach(EnumStruct ess in ((VarData)elist[_arg.RelatedStateVar.Name]).Enumerations) { cs.Append(" case \"" + ess.EnumValue + "\":\r\n"); cs.Append(" args[i].DataValue = Enum_" + _arg.RelatedStateVar.Name + "." + ess.EnumName + ";\r\n"); cs.Append(" break;\r\n"); } cs.Append(" default:\r\n"); cs.Append(" SetUnspecifiedValue(\"Enum_" + _arg.RelatedStateVar.Name + "\", (string)args[i].DataValue);\r\n"); cs.Append(" args[i].DataValue = Enum_" + _arg.RelatedStateVar.Name + "._UNSPECIFIED_;\r\n"); cs.Append(" break;\r\n"); cs.Append(" }\r\n"); cs.Append(" break;\r\n"); } } cs.Append(" }\r\n"); // End of Switch cs.Append(" }\r\n"); // End of For Loop } int argid = 0; foreach(UPnPArgument _arg in A.Arguments) { if(_arg.IsReturnValue==false) { cs.Append(" " + _arg.Name + " = ("); if(_arg.RelatedStateVar.AllowedStringValues==null) { cs.Append(_arg.RelatedStateVar.GetNetType().FullName); } else { cs.Append("Enum_" + _arg.RelatedStateVar.Name); } cs.Append(") args[" + argid.ToString() + "].DataValue;\r\n"); } ++argid; } if(A.HasReturnValue==true) { if(A.GetRetArg().RelatedStateVar.AllowedStringValues==null) { cs.Append(" return((" + A.GetRetArg().RelatedStateVar.GetNetType().FullName + ")RetVal);\r\n"); } else { cs.Append(" return(RetEnum);\r\n"); } } else { cs.Append(" return;\r\n"); } cs.Append(" }\r\n"); // End of SyncAction Class // Build Async Version [Overload] cs.Append(" public "); cs.Append("void "); cs.Append(A.Name + "("); tlist.Clear(); foreach(UPnPArgument _arg in A.ArgumentList) { if((_arg.IsReturnValue==false)&& (_arg.Direction=="in")) { tlist.Add(_arg); } } Args = (UPnPArgument[])tlist.ToArray(typeof(UPnPArgument)); for(int i=0;i<Args.Length;++i) { arg = Args[i]; if(elist.ContainsKey(arg.RelatedStateVar.Name)) { cs.Append("Enum_" + arg.RelatedStateVar.Name + " "); } else { cs.Append(arg.RelatedStateVar.GetNetType().FullName + " "); } cs.Append(arg.Name); if(i<Args.Length-1) { cs.Append(", "); } } cs.Append(")\r\n"); cs.Append(" {\r\n"); cs.Append(" " + A.Name + "("); for(int i=0;i<Args.Length;++i) { arg = Args[i]; cs.Append(arg.Name); cs.Append(", "); } cs.Append("null, null);\r\n"); cs.Append(" }\r\n"); // Build Async Version cs.Append(" public "); cs.Append("void "); cs.Append(A.Name + "("); tlist.Clear(); foreach(UPnPArgument _arg in A.ArgumentList) { if((_arg.IsReturnValue==false)&& (_arg.Direction=="in")) { tlist.Add(_arg); } } Args = (UPnPArgument[])tlist.ToArray(typeof(UPnPArgument)); for(int i=0;i<Args.Length;++i) { arg = Args[i]; if(elist.ContainsKey(arg.RelatedStateVar.Name)) { cs.Append("Enum_" + arg.RelatedStateVar.Name + " "); } else { cs.Append(arg.RelatedStateVar.GetNetType().FullName + " "); } cs.Append(arg.Name); cs.Append(", "); } cs.Append("object _Tag, Delegate_OnResult_" + A.Name + " _Callback"); cs.Append(")\r\n"); cs.Append(" {\r\n"); cs.Append(" UPnPArgument[] args = new UPnPArgument["); if(A.HasReturnValue==false) { cs.Append(A.ArgumentList.Length.ToString()); } else { cs.Append((A.ArgumentList.Length-1).ToString()); } cs.Append("];\r\n"); ia=0; foreach(UPnPArgument _arg in A.ArgumentList) { if(_arg.IsReturnValue==false) { if(_arg.Direction=="in") { if(elist.ContainsKey(_arg.RelatedStateVar.Name)==true) { cs.Append(" switch(" + _arg.Name + ")\r\n"); cs.Append(" {\r\n"); foreach(EnumStruct ess in ((VarData)elist[_arg.RelatedStateVar.Name]).Enumerations) { cs.Append(" case Enum_" + _arg.RelatedStateVar.Name + "." + ess.EnumName + ":\r\n"); cs.Append(" args[" + ia.ToString() + "] = new UPnPArgument(\"" + _arg.Name + "\", \"" + ess.EnumValue + "\");\r\n"); cs.Append(" break;\r\n"); } cs.Append(" default:\r\n"); cs.Append(" args[" + ia.ToString() + "] = new UPnPArgument(\"" + _arg.Name + "\", GetUnspecifiedValue(\"Enum_" + _arg.RelatedStateVar.Name + "\"));\r\n"); cs.Append(" break;\r\n"); cs.Append(" }\r\n"); } else { cs.Append(" args[" + ia.ToString() + "] = new UPnPArgument(\"" + _arg.Name + "\", " + _arg.Name + ");\r\n"); } } else { cs.Append(" args[" + ia.ToString() + "] = new UPnPArgument(\"" + _arg.Name + "\", \"\");\r\n"); } ++ia; } } cs.Append(" _S.InvokeAsync(\"" + A.Name + "\", args, new object[2]{_Tag,_Callback},new UPnPService.UPnPServiceInvokeHandler(Sink_" + A.Name + "), new UPnPService.UPnPServiceInvokeErrorHandler(Error_Sink_" + A.Name + "));\r\n"); cs.Append(" }\r\n"); // End of Action Class // Build Async Sink cs.Append(" private void Sink_" + A.Name + "(UPnPService sender, string MethodName, UPnPArgument[] Args, object RetVal, object _Tag)\r\n"); cs.Append(" {\r\n"); if(A.HasReturnValue==true) { if(A.GetRetArg().RelatedStateVar.AllowedStringValues!=null) { cs.Append(" Enum_" + A.GetRetArg().RelatedStateVar.Name + " RetEnum = 0;\r\n"); cs.Append(" switch((string)RetVal)\r\n"); cs.Append(" {\r\n"); foreach(EnumStruct ess in ((VarData)elist[A.GetRetArg().RelatedStateVar.Name]).Enumerations) { cs.Append(" case \"" + ess.EnumValue + "\":\r\n"); cs.Append(" RetEnum = Enum_" + A.GetRetArg().RelatedStateVar.Name + "." + ess.EnumName + ";\r\n"); cs.Append(" break;\r\n"); } cs.Append(" default:\r\n"); cs.Append(" RetEnum = Enum_" + A.GetRetArg().RelatedStateVar.Name + "._UNSPECIFIED_;\r\n"); cs.Append(" SetUnspecifiedValue(\"Enum_" + A.GetRetArg().RelatedStateVar.Name + "\",(string)RetVal);\r\n"); cs.Append(" break;\r\n"); cs.Append(" }\r\n"); } } // Check if this is necessary IsNeccessary = false; foreach(UPnPArgument _arg in A.ArgumentList) { if((_arg.RelatedStateVar.AllowedStringValues!=null)&& (_arg.IsReturnValue==false)) { IsNeccessary = true; break; } } if(IsNeccessary==true) { cs.Append(" for(int i=0;i<Args.Length;++i)\r\n"); cs.Append(" {\r\n"); cs.Append(" switch(Args[i].Name)\r\n"); cs.Append(" {\r\n"); tlist.Clear(); foreach(UPnPArgument _arg in A.ArgumentList) { if(_arg.IsReturnValue==false) { tlist.Add(_arg); } } Args = (UPnPArgument[])tlist.ToArray(typeof(UPnPArgument)); foreach(UPnPArgument _arg in Args) { if(_arg.RelatedStateVar.AllowedStringValues!=null) { cs.Append(" case \"" + _arg.Name + "\":\r\n"); cs.Append(" switch((string)Args[i].DataValue)\r\n"); cs.Append(" {\r\n"); foreach(EnumStruct ess in ((VarData)elist[_arg.RelatedStateVar.Name]).Enumerations) { cs.Append(" case \"" + ess.EnumValue + "\":\r\n"); cs.Append(" Args[i].DataValue = Enum_" + _arg.RelatedStateVar.Name + "." + ess.EnumName + ";\r\n"); cs.Append(" break;\r\n"); } cs.Append(" default:\r\n"); cs.Append(" SetUnspecifiedValue(\"Enum_" + _arg.RelatedStateVar.Name + "\", (string)Args[i].DataValue);\r\n"); cs.Append(" Args[i].DataValue = Enum_" + _arg.RelatedStateVar.Name + "._UNSPECIFIED_;\r\n"); cs.Append(" break;\r\n"); cs.Append(" }\r\n"); cs.Append(" break;\r\n"); } } cs.Append(" }\r\n"); // End of Switch cs.Append(" }\r\n"); // End of For Loop } cs.Append(" object[] StateInfo = (object[])_Tag;\r\n"); cs.Append(" if(StateInfo[1]!=null)\r\n"); cs.Append(" {\r\n"); cs.Append(" ((Delegate_OnResult_" + A.Name + ")StateInfo[1])(this, "); argid = 0; foreach(UPnPArgument _arg in A.ArgumentList) { if(_arg.IsReturnValue==false) { cs.Append("("); if(_arg.RelatedStateVar.AllowedStringValues==null) { cs.Append(_arg.RelatedStateVar.GetNetType().FullName + " "); } else { cs.Append("Enum_" + _arg.RelatedStateVar.Name + " "); } cs.Append(")"); cs.Append("Args[" + argid.ToString() + "].DataValue, "); ++argid; } } if(A.HasReturnValue==true) { cs.Append("("); if(A.GetRetArg().RelatedStateVar.AllowedStringValues==null) { cs.Append(A.GetRetArg().RelatedStateVar.GetNetType().FullName); cs.Append(")"); cs.Append("RetVal, "); } else { cs.Append("Enum_" + A.GetRetArg().RelatedStateVar.Name); cs.Append(")"); cs.Append("RetEnum, "); } } cs.Append("null, StateInfo[0]);\r\n"); cs.Append(" }\r\n"); cs.Append(" else\r\n"); cs.Append(" {\r\n"); cs.Append(" OnResult_" + A.Name + "_Event.Fire(this, "); argid = 0; foreach(UPnPArgument _arg in A.ArgumentList) { if(_arg.IsReturnValue==false) { cs.Append("("); if(_arg.RelatedStateVar.AllowedStringValues==null) { cs.Append(_arg.RelatedStateVar.GetNetType().FullName + " "); } else { cs.Append("Enum_" + _arg.RelatedStateVar.Name + " "); } cs.Append(")"); cs.Append("Args[" + argid.ToString() + "].DataValue, "); ++argid; } } if(A.HasReturnValue==true) { cs.Append("("); if(A.GetRetArg().RelatedStateVar.AllowedStringValues==null) { cs.Append(A.GetRetArg().RelatedStateVar.GetNetType().FullName); cs.Append(")"); cs.Append("RetVal, "); } else { cs.Append("Enum_" + A.GetRetArg().RelatedStateVar.Name); cs.Append(")"); cs.Append("RetEnum, "); } } cs.Append("null, StateInfo[0]);\r\n"); cs.Append(" }\r\n"); cs.Append(" }\r\n"); //Build Error Sink cs.Append(" private void Error_Sink_" + A.Name + "(UPnPService sender, string MethodName, UPnPArgument[] Args, UPnPInvokeException e, object _Tag)\r\n"); cs.Append(" {\r\n"); // Check if this is necessary IsNeccessary = false; foreach(UPnPArgument _arg in A.ArgumentList) { if((_arg.RelatedStateVar.AllowedStringValues!=null)&& (_arg.Direction=="in")) { IsNeccessary = true; break; } } if(IsNeccessary==true) { cs.Append(" for(int i=0;i<Args.Length;++i)\r\n"); cs.Append(" {\r\n"); cs.Append(" switch(Args[i].Name)\r\n"); cs.Append(" {\r\n"); foreach(UPnPArgument _arg in A.ArgumentList) { if(_arg.IsReturnValue==false) { if(_arg.RelatedStateVar.AllowedStringValues!=null) { cs.Append(" case \"" + _arg.Name + "\":\r\n"); cs.Append(" switch((string)Args[i].DataValue)\r\n"); cs.Append(" {\r\n"); foreach(EnumStruct ess in ((VarData)elist[_arg.RelatedStateVar.Name]).Enumerations) { cs.Append(" case \"" + ess.EnumValue + "\":\r\n"); cs.Append(" Args[i].DataValue = Enum_" + _arg.RelatedStateVar.Name + "." + ess.EnumName + ";\r\n"); cs.Append(" break;\r\n"); } cs.Append(" }\r\n"); cs.Append(" break;\r\n"); } } } cs.Append(" }\r\n"); // End of Switch cs.Append(" }\r\n"); // End of For Loop } if(A.HasReturnValue==true) { if(A.GetRetArg().RelatedStateVar.AllowedStringValues!=null) { cs.Append(" SetUnspecifiedValue(\"Enum_" + A.GetRetArg().RelatedStateVar.Name + "\",\"* error *\");\r\n"); } } cs.Append(" object[] StateInfo = (object[])_Tag;\r\n"); cs.Append(" if(StateInfo[1]!=null)\r\n"); cs.Append(" {\r\n"); cs.Append(" ((Delegate_OnResult_" + A.Name + ")StateInfo[1])(this, "); argid = 0; foreach(UPnPArgument _arg in A.ArgumentList) { if(_arg.IsReturnValue==false) { if(_arg.Direction=="in") { cs.Append("("); if(_arg.RelatedStateVar.AllowedStringValues==null) { cs.Append(_arg.RelatedStateVar.GetNetType().FullName + " "); } else { cs.Append("Enum_" + _arg.RelatedStateVar.Name + " "); } cs.Append(")"); cs.Append("Args[" + argid.ToString() + "].DataValue, "); } else { if(_arg.RelatedStateVar.AllowedStringValues!=null) { cs.Append("(Enum_" + _arg.RelatedStateVar.Name + ")0, "); } else { cs.Append("(" + _arg.RelatedStateVar.GetNetType().FullName + ")UPnPService.CreateObjectInstance(typeof(" + _arg.RelatedStateVar.GetNetType().FullName + "),null), "); } } ++argid; } } if(A.HasReturnValue==true) { if(A.GetRetArg().RelatedStateVar.AllowedStringValues==null) { cs.Append("(" + A.GetRetArg().RelatedStateVar.GetNetType().FullName + ")UPnPService.CreateObjectInstance(typeof(" + A.GetRetArg().RelatedStateVar.GetNetType().FullName + "),null), "); } else { cs.Append("Enum_" + A.GetRetArg().RelatedStateVar.Name + "._UNSPECIFIED_, "); } } cs.Append("e, StateInfo[0]);\r\n"); cs.Append(" }\r\n"); cs.Append(" else\r\n"); cs.Append(" {\r\n"); cs.Append(" OnResult_" + A.Name + "_Event.Fire(this, "); argid = 0; foreach(UPnPArgument _arg in A.ArgumentList) { if(_arg.IsReturnValue==false) { if(_arg.Direction=="in") { cs.Append("("); if(_arg.RelatedStateVar.AllowedStringValues==null) { cs.Append(_arg.RelatedStateVar.GetNetType().FullName + " "); } else { cs.Append("Enum_" + _arg.RelatedStateVar.Name + " "); } cs.Append(")"); cs.Append("Args[" + argid.ToString() + "].DataValue, "); } else { if(_arg.RelatedStateVar.AllowedStringValues!=null) { cs.Append("(Enum_" + _arg.RelatedStateVar.Name + ")0, "); } else { cs.Append("(" + _arg.RelatedStateVar.GetNetType().FullName + ")UPnPService.CreateObjectInstance(typeof(" + _arg.RelatedStateVar.GetNetType().FullName + "),null), "); } } ++argid; } } if(A.HasReturnValue==true) { if(A.GetRetArg().RelatedStateVar.AllowedStringValues==null) { cs.Append("(" + A.GetRetArg().RelatedStateVar.GetNetType().FullName + ")UPnPService.CreateObjectInstance(typeof(" + A.GetRetArg().RelatedStateVar.GetNetType().FullName + "),null), "); } else { cs.Append("Enum_" + A.GetRetArg().RelatedStateVar.Name + "._UNSPECIFIED_, "); } } cs.Append("e, StateInfo[0]);\r\n"); cs.Append(" }\r\n"); cs.Append(" }\r\n"); // End of Error Sink } cs.Append(" }\r\n"); cs.Append("}"); UTF8Encoding UTF8 = new UTF8Encoding(); FileStream ws = new FileStream(SavePath, FileMode.Create, FileAccess.Write); byte[] buffer = UTF8.GetBytes(cs.ToString()); ws.Write(buffer,0,buffer.Length); ws.Close(); }
/// <summary> /// Method executes when a contentdirectory events a change in a container. /// </summary> /// <param name="sender"></param> /// <param name="NewValue"></param> private void Sink_OnContainerUpdateIDsChanged(CpContentDirectory sender, System.String NewValue) { string csv_containers = NewValue; Hashtable cache = new Hashtable(); DText parser = new DText(); DText parser2 = new DText(); parser.ATTRMARK = ","; parser2.ATTRMARK = ","; if (csv_containers != "") { parser[0] = csv_containers; int dcnt = parser.DCOUNT(); for (int i=1; i <= dcnt; i++) { string id, update; if (Accumulator_ContainerUpdateIDs.Delimitor == ",") { id = parser[i++]; update = parser[i]; } else { string pair = parser[i]; parser2[0] = pair; id = parser2[1]; update = parser2[2]; } CpMediaContainer cpc = (CpMediaContainer) this.GetDescendent(id, cache); if (cpc !=null) { try { UInt32 updateId = UInt32.Parse(update); if (updateId != cpc.UpdateID) { cpc.ForceUpdate(false); } } catch { cpc.ForceUpdate(false); } } } } cache.Clear(); }
public void Accept(DText type, StringBuilder x) { x.Append(type.Value); }
protected void LastChangeSink(CpAVTransport sender, string LC) { if(LC=="")return; //LC = UPnPStringFormatter.UnEscapeString(LC); if(LC.Substring(0,1)!="<") LC = UPnPStringFormatter.UnEscapeString(LC); if(LC.Substring(0,1)!="<") LC = UPnPStringFormatter.UnEscapeString(LC); StringReader MyString = new StringReader(LC); XmlTextReader XMLDoc = new XmlTextReader(MyString); Hashtable T = new Hashtable(); int ID = -1; string VarName = ""; string VarValue = ""; string AttrName = ""; string AttrValue = ""; XMLDoc.Read(); XMLDoc.MoveToContent(); XMLDoc.Read(); XMLDoc.MoveToContent(); while((XMLDoc.LocalName!="Event")&&(XMLDoc.EOF==false)) { // At Start, should be InstanceID if(XMLDoc.LocalName=="InstanceID") { XMLDoc.MoveToAttribute("val"); ID = int.Parse(XMLDoc.GetAttribute("val")); if(T.ContainsKey(ID)==false) T[ID] = new Hashtable(); XMLDoc.MoveToContent(); XMLDoc.Read(); XMLDoc.MoveToContent(); while(XMLDoc.LocalName!="InstanceID") { if(XMLDoc.IsStartElement()==true) { VarName = XMLDoc.LocalName; VarValue = ""; AttrName = ""; AttrValue = ""; for(int a_idx=0;a_idx<XMLDoc.AttributeCount;++a_idx) { XMLDoc.MoveToAttribute(a_idx); if(XMLDoc.LocalName=="val") { VarValue = UPnPStringFormatter.UnEscapeString(XMLDoc.GetAttribute(a_idx)); } else { AttrName = XMLDoc.LocalName; AttrValue = XMLDoc.GetAttribute(a_idx); } } XMLDoc.MoveToContent(); if(AttrName=="") { ((Hashtable)T[ID])[VarName] = VarValue; } else { if(((Hashtable)T[ID]).ContainsKey(VarName)==false) { ((Hashtable)T[ID])[VarName] = new Hashtable(); } if(((Hashtable)((Hashtable)T[ID])[VarName]).ContainsKey(AttrName)==false) { ((Hashtable)((Hashtable)T[ID])[VarName])[AttrName] = new Hashtable(); } ((Hashtable)((Hashtable)((Hashtable)T[ID])[VarName])[AttrName])[AttrValue] = VarValue; } } XMLDoc.Read(); XMLDoc.MoveToContent(); } } else { XMLDoc.Skip(); } XMLDoc.Read(); XMLDoc.MoveToContent(); } XMLDoc.Close(); IDictionaryEnumerator inEn = T.GetEnumerator(); IDictionaryEnumerator EvEn; Hashtable TT; string TempString; DText TempParser = new DText(); while(inEn.MoveNext()) { if(inEn.Key.ToString() == InstanceID) { TT = (Hashtable)inEn.Value; EvEn = TT.GetEnumerator(); while(EvEn.MoveNext()) { switch((string)EvEn.Key) { case "AVTransportURI": _AVTransportURI = (string)EvEn.Value; if(OnAVTransportURIChanged!=null) OnAVTransportURIChanged(this); break; case "TransportState": _PlayState = (string)EvEn.Value; if(OnPlayStateChanged!=null) OnPlayStateChanged(this); break; case "CurrentTrackDuration": TempString = (string)EvEn.Value; TempParser.ATTRMARK = ":"; TempParser[0] = TempString; try { this._CurrentDuration = new TimeSpan(int.Parse(TempParser[1]),int.Parse(TempParser[2]),int.Parse(TempParser[3])); } catch(Exception) {} if(this.OnCurrentPositionChanged!=null) this.OnCurrentPositionChanged(this); break; case "RelativeTimePosition": TempString = (string)EvEn.Value; TempParser.ATTRMARK = ":"; TempParser[0] = TempString; this._CurrentPosition = new TimeSpan(int.Parse(TempParser[1]),int.Parse(TempParser[2]),int.Parse(TempParser[3])); if(this.OnCurrentPositionChanged!=null) this.OnCurrentPositionChanged(this); break; case "NumberOfTracks": try { _NumberOfTracks = UInt32.Parse((string)EvEn.Value); if(OnNumberOfTracksChanged!=null) OnNumberOfTracksChanged(this); } catch(Exception) {} break; case "CurrentTrack": try { _CurrentTrack = UInt32.Parse((string)EvEn.Value); if(OnCurrentTrackChanged!=null) OnCurrentTrackChanged(this); } catch(Exception) {} break; case "CurrentTrackURI": _TrackURI = (string)EvEn.Value; if(OnTrackURIChanged!=null) OnTrackURIChanged(this); break; case "TransportStatus": _TransportStatus = (string)EvEn.Value; if(OnTransportStatusChanged!=null) OnTransportStatusChanged(this); break; case "AVTransportURIMetaData": _AVTransportMetaData = (string)EvEn.Value; if(this.OnCurrentURIMetaDataChanged!=null) OnCurrentURIMetaDataChanged(this); break; case "CurrentPlayMode": _CurrentPlayMode = (string)EvEn.Value; if(this.OnCurrentPlayModeChanged!=null) OnCurrentPlayModeChanged(this); break; } } } } }
// Methods. public bool Initialize(DSystemConfiguration configuration, IntPtr windowHandle) { try { // Create the input object. The input object will be used to handle reading the keyboard and mouse input from the user. Input = new DInput(); // Initialize the input object. if (!Input.Initialize(configuration, windowHandle)) { return(false); } // #region Initialize System // Create the Direct3D object. D3D = new DDX11(); // Initialize the Direct3D object. if (!D3D.Initialize(configuration, windowHandle)) { return(false); } // Create the camera object Camera = new DCamera(); // Initialize a base view matrix with the camera for 2D user interface rendering. Camera.SetPosition(0.0f, 0.0f, -1.0f); Camera.Render(); Matrix baseViewMatrix = Camera.ViewMatrix; // Set the initial position of the camera. Camera.SetPosition(50.0f, 2.0f, -7.0f); // Create the model object. Terrain = new DTerrain(); // Initialize the terrain object. if (!Terrain.Initialize(D3D.Device)) { return(false); } // Create the color shader object. ColorShader = new DColorShader(); // Initialize the color shader object. if (!ColorShader.Initialize(D3D.Device, windowHandle)) { return(false); } // Create the position object. Position = new DPosition(); // Set the initial position of the viewer to the same as the initial camera position. Position.SetPosition(Camera.GetPosition().X, Camera.GetPosition().Y, Camera.GetPosition().Z); // Create the fps object. FPS = new DFPS(); // Initialize the fps object. FPS.Initialize(); // Create the cpu object. CPU = new DCPU(); // Initialize the cpu object. CPU.Initialize(); // Create the font shader object. FontShader = new DFontShader(); // Initialize the font shader object. if (!FontShader.Initialize(D3D.Device, windowHandle)) { return(false); } // Create the text object. Text = new DText(); // Initialize the text object. if (!Text.Initialize(D3D.Device, D3D.DeviceContext, windowHandle, configuration.Width, configuration.Height, baseViewMatrix)) { return(false); } // Set the video card information in the text object. if (!Text.SetVideoCard(D3D.VideoCardDescription, D3D.VideoCardMemory, D3D.DeviceContext)) { return(false); } return(true); } catch (Exception ex) { MessageBox.Show("Could not initialize Direct3D\nError is '" + ex.Message + "'"); return(false); } }
protected void PollSink(CpAVTransport sender, UInt32 InstanceID, UInt32 Track, string TrackDuration, string TrackMetaData, string TrackURI, string RelTime, string AbsTime, int RelCount, int AbsCount, UPnPInvokeException e, object Handle) { DText p = new DText(); p.ATTRMARK = ":"; TimeSpan ts; try { p[0]= RelTime; _CurrentPosition = new TimeSpan(int.Parse(p[1]),int.Parse(p[2]),int.Parse(p[3])); if (this._CurrentTrack != Track) { this._CurrentTrack = Track; if (this.OnCurrentTrackChanged != null) { this.OnCurrentTrackChanged(this); } } p[0] = TrackDuration; ts = new TimeSpan(int.Parse(p[1]), int.Parse(p[2]), int.Parse(p[3])); if (this._CurrentDuration != ts) { this._CurrentDuration = ts; } if (this._TrackURI.CompareTo(TrackURI) != 0) { this._TrackURI = TrackURI; if (this.OnCurrentTrackChanged != null) { this.OnCurrentTrackChanged(this); } } if (this._AVTransportMetaData.CompareTo(TrackMetaData) != 0) { this._AVTransportMetaData = TrackMetaData; if (this.OnCurrentURIMetaDataChanged != null) { this.OnCurrentURIMetaDataChanged(this); } } } catch(Exception) { } if(OnCurrentPositionChanged!=null) OnCurrentPositionChanged(this); }
public void Accept(DText type, TType x, List <ResourceInfo> y) { }
public bool Accept(DText type) { return(string.IsNullOrEmpty(type.Value)); }
protected void PositionInfoSink(CpAVTransport sender, UInt32 InstanceID, UInt32 Track, string TrackDuration, string TrackMetaData, string TrackURI, string RelTime, string AbsTime, int RelCount, int AbsCount, UPnPInvokeException e, object Handle) { DText p = new DText(); p.ATTRMARK = ":"; try { p[0] = TrackDuration; _CurrentDuration = new TimeSpan(int.Parse(p[1]),int.Parse(p[2]),int.Parse(p[3])); } catch(Exception) { } try { p[0]= RelTime; _CurrentPosition = new TimeSpan(int.Parse(p[1]),int.Parse(p[2]),int.Parse(p[3])); } catch(Exception) { } if(OnCurrentPositionChanged!=null) OnCurrentPositionChanged(this); _CurrentTrack = Track; this._TrackURI = HTTPMessage.UnEscapeString(TrackURI); if(this.OnTrackURIChanged!=null) OnTrackURIChanged(this); if(OnCurrentTrackChanged!=null) OnCurrentTrackChanged(this); lock(this) { --StateCounter; if(StateCounter==0) { if(OnReady!=null)OnReady(this); } } }
public void Accept(DText type, RawTextTable x) { x.AddText(ValidatorContext.CurrentVisitor.CurrentValidateRecord, type.Key, type.RawValue); }
public override string Accept(DText type) { return($"\"{type.Key}#{type.TextOfCurrentAssembly}\""); }
protected bool GenerateEx(UPnPDevice device, DirectoryInfo outputDirectory, Hashtable serviceNames) { string sampleService = "Sample"; StreamWriter writer; ServiceNames = serviceNames; DText dt = new DText(); dt.ATTRMARK = ":"; dt[0] = device.DeviceURN; // *** Generate Main Code Log("Writing main stack module..."); IDictionaryEnumerator en = serviceNames.GetEnumerator(); while (en.MoveNext()) { string servicename = (string)en.Value; sampleService = servicename; UPnPService service = (UPnPService)en.Key; string servicexml = new UTF8Encoding().GetString(service.GetSCPDXml()); Log("Generating service class for " + servicename); OpenSource.UPnP.ServiceGenerator.GenerateCP("Cp" + servicename, nspace, outputDirectory.FullName + "\\Cp" + servicename + ".cs", service.ServiceURN, servicexml); } CodeProcessor cs = new CodeProcessor(new StringBuilder(), true); StringBuilder cs2; cs.Comment("UPnP .NET Framework Control Point Stack, Discovery Module"); cs.Comment(VersionString); cs.Append(cl); cs.Append("using System;" + cl); cs.Append("using System.Net;" + cl); cs.Append("using OpenSource.UPnP;" + cl); cs.Append("using OpenSource.Utilities;" + cl); cs.Append("using " + nspace + ";" + cl); cs.Append(cl); cs.Append("namespace " + nspace + cl); cs.Append("{" + cl); cs.Append(" /// <summary>" + cl); cs.Append(" /// Summary description for " + dt[4] + "Discovery." + cl); cs.Append(" /// </summary>" + cl); cs.Append(" class " + dt[4] + "Discovery" + cl); cs.Append(" {" + cl); cs.Append(" private UPnPSmartControlPoint scp;"+ cl); cs.Append(" private WeakEvent AddEvent = new WeakEvent();"+ cl); cs.Append(" private WeakEvent RemoveEvent = new WeakEvent();"+ cl); cs.Append(cl); cs.Append(" public delegate void DiscoveryHandler("+ dt[4] + "Discovery sender, UPnPDevice dev);" + cl); cs.Append(" public event DiscoveryHandler OnAddedDevice"+ cl); cs.Append(" {"+ cl); cs.Append(" add"+ cl); cs.Append(" {"+ cl); cs.Append(" AddEvent.Register(value);"+ cl); cs.Append(" }"+ cl); cs.Append(" remove"+ cl); cs.Append(" {"+ cl); cs.Append(" AddEvent.UnRegister(value);"+ cl); cs.Append(" }"+ cl); cs.Append(" }"+ cl); cs.Append(cl); cs.Append(" public event DiscoveryHandler OnRemovedDevice"+ cl); cs.Append(" {"+ cl); cs.Append(" add"+ cl); cs.Append(" {"+ cl); cs.Append(" RemoveEvent.Register(value);"+ cl); cs.Append(" }"+ cl); cs.Append(" remove"+ cl); cs.Append(" {"+ cl); cs.Append(" RemoveEvent.UnRegister(value);"+ cl); cs.Append(" }"+ cl); cs.Append(" }"+ cl); cs.Append(cl); cs.Append(" public "+ dt[4] + "Discovery()" + cl); cs.Append(" {"+ cl); cs.Append(" }"+ cl); cs.Append(cl); cs.Append(" public void Start()"+ cl); cs.Append(" {"+ cl); cs.Append(" scp = new UPnPSmartControlPoint(new UPnPSmartControlPoint.DeviceHandler(OnAddSink), null ,\""+ device.DeviceURN + "\");" + cl); cs.Append(" scp.OnRemovedDevice += new UPnPSmartControlPoint.DeviceHandler(OnRemoveSink);"+ cl); cs.Append(" }"+ cl); cs.Append(cl); cs.Append(" public void ReScan()"+ cl); cs.Append(" {"+ cl); cs.Append(" scp.Rescan();"+ cl); cs.Append(" }"+ cl); cs.Append(cl); cs.Append(" public void UnicastSearch(IPAddress address)"+ cl); cs.Append(" {"+ cl); cs.Append(" scp.UnicastSearch(address);"+ cl); cs.Append(" }"+ cl); cs.Append(cl); cs.Append(" public void ForceDisposeDevice(UPnPDevice dev)"+ cl); cs.Append(" {"+ cl); cs.Append(" if (dev.ParentDevice != null)"+ cl); cs.Append(" {"+ cl); cs.Append(" ForceDisposeDevice(dev.ParentDevice);"+ cl); cs.Append(" }"+ cl); cs.Append(" else"+ cl); cs.Append(" {"+ cl); cs.Append(" scp.ForceDisposeDevice(dev);"+ cl); cs.Append(" }"+ cl); cs.Append(" }"+ cl); cs.Append(cl); cs.Append(" private void OnAddSink(UPnPSmartControlPoint sender, UPnPDevice d)"+ cl); cs.Append(" {"+ cl); cs.Append(" AddEvent.Fire(this, d);"+ cl); cs.Append(" }"+ cl); cs.Append(cl); cs.Append(" private void OnRemoveSink(UPnPSmartControlPoint sender, UPnPDevice d)"+ cl); cs.Append(" {"+ cl); cs.Append(" RemoveEvent.Fire(this, d);"+ cl); cs.Append(" }"+ cl); cs.Append(" }" + cl); cs.Append("}" + cl); cs.Append(cl); writer = File.CreateText(outputDirectory.FullName + "\\" + dt[4] + "Discovery.cs"); writer.Write(cs.ToString()); writer.Close(); cs = new CodeProcessor(new StringBuilder(), true); cs.Comment("UPnP .NET Framework Control Point Stack, Core Module"); cs.Comment(VersionString); cs.Append(cl); cs.Append("using System;" + cl); cs.Append("using OpenSource.UPnP;" + cl); cs.Append("using " + nspace + ";" + cl); cs.Append(cl); cs.Append("namespace " + nspace + cl); cs.Append("{" + cl); cs.Append(" /// <summary>" + cl); cs.Append(" /// Summary description for Main." + cl); cs.Append(" /// </summary>" + cl); cs.Append(" class SampleDeviceMain" + cl); cs.Append(" {" + cl); cs.Append(" /// <summary>"+ cl); cs.Append(" /// The main entry point for the application."+ cl); cs.Append(" /// </summary>"+ cl); cs.Append(" [STAThread]"+ cl); cs.Append(" static void Main(string[] args)"+ cl); cs.Append(" {"+ cl); cs.Append(" System.Console.WriteLine(\"UPnP .NET Framework Stack\");"+ cl); cs.Append(" System.Console.WriteLine(\"StackBuilder Build#"+ this.VersionString + "\");" + cl); cs.Append(" "+ cl); cs.Append(" "+ dt[4] + "Discovery disco = new " + dt[4] + "Discovery();" + cl); cs.Append(" disco.OnAddedDevice += new "+ dt[4] + "Discovery.DiscoveryHandler(AddSink);" + cl); cs.Append(" disco.OnRemovedDevice += new "+ dt[4] + "Discovery.DiscoveryHandler(RemoveSink);" + cl); cs.Append(" "+ cl); cs.Append(" System.Console.WriteLine(\"Press return to stop CP.\");"+ cl); cs.Append(" disco.Start();"+ cl); cs.Append(" "+ cl); cs.Append(" System.Console.ReadLine();"+ cl); cs.Append(" }"+ cl); cs.Append(" "+ cl); cs.Append(" private static void AddSink("+ dt[4] + "Discovery sender, UPnPDevice d)" + cl); cs.Append(" {"+ cl); cs.Append(" Console.WriteLine(\"Added Device: \" + d.FriendlyName);"+ cl); cs.Append(cl); cs.Comment("To interace with a service, instantiate the appropriate wrapper class on the appropriate service"); cs.Comment("Traverse the device heirarchy to the correct device, and invoke 'GetServices', passing in the static field 'SERVICE_NAME'"); cs.Comment("of the appropriate wrapper class. This method returns an array of all services with this service type. For most purposes,"); cs.Comment("there will only be one service, in which case you can use array index 0."); cs.Comment("Save a reference to this instance of the wrapper class for later use."); cs.Append(" //Cp"+ sampleService + " " + sampleService + " = new Cp" + sampleService + "(d.GetServices(Cp" + sampleService + ".SERVICE_NAME)[0]);" + cl); cs.Append(cl); cs.Comment("To subscribe to Events, call the '_subscribe' method of the wrapper class. The only parameter is"); cs.Comment("the duration of the event. A good value is 300 seconds."); cs.Append(" //"+ sampleService + "._subscribe(300);" + cl); cs.Append(cl); cs.Comment("The wrapper class exposes all the evented state variables through events in the form 'OnStateVariable_xx', where xx is the variable name."); cs.Append(cl); cs.Comment("The wrapper class exposes methods in two formats. Asyncronous and Syncronous. The Async method calls are exposed simply"); cs.Comment("by the name of the method. The Syncronous version is the same, except with the word, 'Sync_' prepended to the name."); cs.Comment("Asyncronous responses to th async method calls are dispatched through the event in the format, 'OnResult_x' where x is the method name."); cs.Append(cl); cs.Comment("Note: All arguments are automatically type checked. Allowed Values are abstracted through enumerations, that are defined in the wrapper class."); cs.Comment("To access the list of allowed values or ranges for a given device, refer to the property 'Values_XXX' for a list of the allowed values for a"); cs.Comment("given state variable. Similarly, refer to the properties 'HasMaximum_XXX', 'HasMinimum_XXX', 'Maximum_XXX', and 'Minimum_XXX' where XXX is the variable name, for the Max/Min values."); cs.Append(cl); cs.Comment("To determine if a given service implements a particular StateVariable or Method, use the properties, 'HasStateVariableXXX' and 'HasActionXXX' where XXX is the method/variable name."); cs.Append(" }"+ cl); cs.Append(" private static void RemoveSink("+ dt[4] + "Discovery sender, UPnPDevice d)" + cl); cs.Append(" {"+ cl); cs.Append(" Console.WriteLine(\"Removed Device: \" + d.FriendlyName);"+ cl); cs.Append(" }"+ cl); cs.Append(cl); cs.Append(" }" + cl); cs.Append("}" + cl); cs.Append(cl); writer = File.CreateText(outputDirectory.FullName + "\\Main.cs"); writer.Write(cs.ToString()); writer.Close(); Log("Generating Visual Studio 7 Solution"); cs2 = new StringBuilder(); cs2.Append("Microsoft Visual Studio Solution File, Format Version 7.00" + cl); cs2.Append("Project(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"SampleDevice\", \"SampleDevice.csproj\", \"{FE5FA3F9-E2EA-40BE-8CF4-27F33CF6454E}\"" + cl); cs2.Append("EndProject" + cl); cs2.Append("Global" + cl); cs2.Append(" GlobalSection(SolutionConfiguration) = preSolution"+ cl); cs2.Append(" ConfigName.0 = Debug"+ cl); cs2.Append(" ConfigName.1 = Release"+ cl); cs2.Append(" EndGlobalSection"+ cl); cs2.Append(" GlobalSection(ProjectDependencies) = postSolution"+ cl); cs2.Append(" EndGlobalSection"+ cl); cs2.Append(" GlobalSection(ProjectConfiguration) = postSolution"+ cl); cs2.Append(" {FE5FA3F9-E2EA-40BE-8CF4-27F33CF6454E}.Debug.ActiveCfg = Debug|.NET"+ cl); cs2.Append(" {FE5FA3F9-E2EA-40BE-8CF4-27F33CF6454E}.Debug.Build.0 = Debug|.NET"+ cl); cs2.Append(" {FE5FA3F9-E2EA-40BE-8CF4-27F33CF6454E}.Release.ActiveCfg = Release|.NET"+ cl); cs2.Append(" {FE5FA3F9-E2EA-40BE-8CF4-27F33CF6454E}.Release.Build.0 = Release|.NET"+ cl); cs2.Append(" EndGlobalSection"+ cl); cs2.Append(" GlobalSection(ExtensibilityGlobals) = postSolution"+ cl); cs2.Append(" EndGlobalSection"+ cl); cs2.Append(" GlobalSection(ExtensibilityAddIns) = postSolution"+ cl); cs2.Append(" EndGlobalSection"+ cl); cs2.Append("EndGlobal" + cl); writer = File.CreateText(outputDirectory.FullName + "\\SampleDevice.sln"); writer.Write(cs2.ToString()); writer.Close(); Log("Generating Assembly Info"); cs2 = new StringBuilder(); cs2.Append("using System.Reflection;" + cl); cs2.Append("using System.Runtime.CompilerServices;" + cl); cs2.Append(cl); cs2.Append("[assembly: AssemblyTitle(\"\")]" + cl); cs2.Append("[assembly: AssemblyDescription(\"\")]" + cl); cs2.Append("[assembly: AssemblyConfiguration(\"\")]" + cl); cs2.Append("[assembly: AssemblyCompany(\"\")]" + cl); cs2.Append("[assembly: AssemblyProduct(\"\")]" + cl); cs2.Append("[assembly: AssemblyCopyright(\"\")]" + cl); cs2.Append("[assembly: AssemblyTrademark(\"\")]" + cl); cs2.Append("[assembly: AssemblyCulture(\"\")]" + cl); cs2.Append("[assembly: AssemblyVersion(\"1.0.*\")]" + cl); cs2.Append("[assembly: AssemblyDelaySign(false)]" + cl); cs2.Append("[assembly: AssemblyKeyFile(\"\")]" + cl); cs2.Append("[assembly: AssemblyKeyName(\"\")]" + cl); writer = File.CreateText(outputDirectory.FullName + "\\AssemblyInfo.cs"); writer.Write(cs2.ToString()); writer.Close(); Log("Generating Visual Studio 7 Project"); cs2 = new StringBuilder(); cs2.Append("<VisualStudioProject>" + cl); cs2.Append(" <CSHARP" + cl); cs2.Append(" ProjectType = \"Local\"" + cl); cs2.Append(" ProductVersion = \"7.0.9466\"" + cl); cs2.Append(" SchemaVersion = \"1.0\"" + cl); cs2.Append(" ProjectGuid = \"{FE5FA3F9-E2EA-40BE-8CF4-27F33CF6454E}\"" + cl); cs2.Append(" >" + cl); cs2.Append(" <Build>" + cl); cs2.Append(" <Settings" + cl); cs2.Append(" ApplicationIcon = \"\"" + cl); cs2.Append(" AssemblyKeyContainerName = \"\"" + cl); cs2.Append(" AssemblyName = \"SampleDevice\"" + cl); cs2.Append(" AssemblyOriginatorKeyFile = \"\"" + cl); cs2.Append(" DefaultClientScript = \"JScript\"" + cl); cs2.Append(" DefaultHTMLPageLayout = \"Grid\"" + cl); cs2.Append(" DefaultTargetSchema = \"IE50\"" + cl); cs2.Append(" DelaySign = \"false\"" + cl); cs2.Append(" OutputType = \"Exe\"" + cl); cs2.Append(" RootNamespace = \"SampleDevice\"" + cl); cs2.Append(" StartupObject = \"\"" + cl); cs2.Append(" >" + cl); cs2.Append(" <Config" + cl); cs2.Append(" Name = \"Debug\"" + cl); cs2.Append(" AllowUnsafeBlocks = \"false\"" + cl); cs2.Append(" BaseAddress = \"285212672\"" + cl); cs2.Append(" CheckForOverflowUnderflow = \"false\"" + cl); cs2.Append(" ConfigurationOverrideFile = \"\"" + cl); cs2.Append(" DefineConstants = \"DEBUG;TRACE\"" + cl); cs2.Append(" DocumentationFile = \"\"" + cl); cs2.Append(" DebugSymbols = \"true\"" + cl); cs2.Append(" FileAlignment = \"4096\"" + cl); cs2.Append(" IncrementalBuild = \"true\"" + cl); cs2.Append(" Optimize = \"false\"" + cl); cs2.Append(" OutputPath = \"bin\\Debug\\\"" + cl); cs2.Append(" RegisterForComInterop = \"false\"" + cl); cs2.Append(" RemoveIntegerChecks = \"false\"" + cl); cs2.Append(" TreatWarningsAsErrors = \"false\"" + cl); cs2.Append(" WarningLevel = \"4\"" + cl); cs2.Append(" />" + cl); cs2.Append(" <Config" + cl); cs2.Append(" Name = \"Release\"" + cl); cs2.Append(" AllowUnsafeBlocks = \"false\"" + cl); cs2.Append(" BaseAddress = \"285212672\"" + cl); cs2.Append(" CheckForOverflowUnderflow = \"false\"" + cl); cs2.Append(" ConfigurationOverrideFile = \"\"" + cl); cs2.Append(" DefineConstants = \"TRACE\"" + cl); cs2.Append(" DocumentationFile = \"\"" + cl); cs2.Append(" DebugSymbols = \"false\"" + cl); cs2.Append(" FileAlignment = \"4096\"" + cl); cs2.Append(" IncrementalBuild = \"false\"" + cl); cs2.Append(" Optimize = \"true\"" + cl); cs2.Append(" OutputPath = \"bin\\Release\\\"" + cl); cs2.Append(" RegisterForComInterop = \"false\"" + cl); cs2.Append(" RemoveIntegerChecks = \"false\"" + cl); cs2.Append(" TreatWarningsAsErrors = \"false\"" + cl); cs2.Append(" WarningLevel = \"4\"" + cl); cs2.Append(" />" + cl); cs2.Append(" </Settings>" + cl); cs2.Append(" <References>" + cl); cs2.Append(" <Reference" + cl); cs2.Append(" Name = \"System\"" + cl); cs2.Append(" AssemblyName = \"System\"" + cl); cs2.Append(" HintPath = \"..\\..\\WINDOWS\\Microsoft.NET\\Framework\\v1.0.3705\\System.dll\"" + cl); cs2.Append(" />" + cl); cs2.Append(" <Reference" + cl); cs2.Append(" Name = \"System.Data\"" + cl); cs2.Append(" AssemblyName = \"System.Data\"" + cl); cs2.Append(" HintPath = \"..\\..\\WINDOWS\\Microsoft.NET\\Framework\\v1.0.3705\\System.Data.dll\"" + cl); cs2.Append(" />" + cl); cs2.Append(" <Reference" + cl); cs2.Append(" Name = \"System.XML\"" + cl); cs2.Append(" AssemblyName = \"System.Xml\"" + cl); cs2.Append(" HintPath = \"..\\..\\WINDOWS\\Microsoft.NET\\Framework\\v1.0.3705\\System.XML.dll\"" + cl); cs2.Append(" />" + cl); cs2.Append(" <Reference" + cl); cs2.Append(" Name = \"UPnP\"" + cl); cs2.Append(" AssemblyName = \"UPnP\"" + cl); cs2.Append(" HintPath = \"UPnP.dll\"" + cl); cs2.Append(" />" + cl); cs2.Append(" </References>" + cl); cs2.Append(" </Build>" + cl); cs2.Append(" <Files>" + cl); cs2.Append(" <Include>" + cl); cs2.Append(" <File" + cl); cs2.Append(" RelPath = \"AssemblyInfo.cs\"" + cl); cs2.Append(" SubType = \"Code\"" + cl); cs2.Append(" BuildAction = \"Compile\"" + cl); cs2.Append(" />" + cl); en.Reset(); while (en.MoveNext()) { UPnPService service = (UPnPService)en.Key; cs2.Append(" <File" + cl); cs2.Append(" RelPath = \"Cp" + (string)en.Value + ".cs\"" + cl); cs2.Append(" SubType = \"Code\"" + cl); cs2.Append(" BuildAction = \"Compile\"" + cl); cs2.Append(" />" + cl); } cs2.Append(" <File" + cl); cs2.Append(" RelPath = \"" + dt[4] + "Discovery.cs\"" + cl); cs2.Append(" SubType = \"Code\"" + cl); cs2.Append(" BuildAction = \"Compile\"" + cl); cs2.Append(" />" + cl); cs2.Append(" <File" + cl); cs2.Append(" RelPath = \"Main.cs\"" + cl); cs2.Append(" SubType = \"Code\"" + cl); cs2.Append(" BuildAction = \"Compile\"" + cl); cs2.Append(" />" + cl); cs2.Append(" </Include>" + cl); cs2.Append(" </Files>" + cl); cs2.Append(" </CSHARP>" + cl); cs2.Append("</VisualStudioProject>" + cl); writer = File.CreateText(outputDirectory.FullName + "\\SampleDevice.csproj"); writer.Write(cs2.ToString()); writer.Close(); Log("Copying UPnP.dll."); System.IO.File.Copy(AppStartPath + "\\UPnP.dll", outputDirectory.FullName + "\\UPnP.dll", true); Log("UPnP Stack Generation Complete."); return(true); }
/// <summary> /// This method gets called when a new Request is received /// </summary> /// <param name="request"></param> /// <param name="WebSession"></param> protected void ReceiveSink(HTTPMessage request, HTTPSession WebSession) { HTTPMessage rsp = new HTTPMessage(); UTF8Encoding U = new UTF8Encoding(); if ((request.Directive == "HEAD") || (request.Directive == "GET")) { if (request.DirectiveObj == "/item.m3u") {/* rsp.StatusCode = 200; rsp.StatusData = "OK"; rsp.ContentType = "audio/mpegurl"; rsp.StringBuffer = M3UString; */ string r = request.GetTag("Range"); if (r == "") { rsp.StatusCode = 200; rsp.StatusData = "OK"; rsp.ContentType = "audio/mpegurl"; rsp.StringBuffer = M3UString; } else { rsp.StatusCode = 206; rsp.StatusData = "Partial Content"; rsp.ContentType = "audio/mpegurl"; DText rp0 = new DText(); rp0.ATTRMARK = "="; rp0[0] = r; DText rp = new DText(); rp.ATTRMARK = "-"; rp[0] = rp0[2].Trim(); if (rp[1] == "") { // LastBytes try { if (int.Parse(rp[2]) > M3UString.Length) { rsp.AddTag("Content-Range", "bytes 0-" + M3UString.Length.ToString() + "/" + M3UString.Length.ToString()); rsp.StringBuffer = M3UString; } else { rsp.AddTag("Content-Range", "bytes " + (M3UString.Length - int.Parse(rp[2])).ToString() + "-" + M3UString.Length.ToString() + "/" + M3UString.Length.ToString()); rsp.StringBuffer = M3UString.Substring(M3UString.Length - int.Parse(rp[2])); } } catch (Exception) { rsp = new HTTPMessage(); rsp.StatusCode = 400; rsp.StatusData = "Bad Request"; } } else if (rp[2] == "") { // Offset till end try { rsp.AddTag("Content-Range", "bytes " + rp[1] + "-" + M3UString.Length.ToString() + "/" + M3UString.Length.ToString()); rsp.StringBuffer = M3UString.Substring(int.Parse(rp[1])); } catch (Exception) { rsp = new HTTPMessage(); rsp.StatusCode = 400; rsp.StatusData = "Bad Request"; } } else { // Range try { if (int.Parse(rp[2]) > M3UString.Length + 1) { rsp.AddTag("Content-Range", "bytes " + rp[1] + "-" + (M3UString.Length - 1).ToString() + "/" + M3UString.Length.ToString()); rsp.StringBuffer = M3UString.Substring(int.Parse(rp[1])); } else { rsp.AddTag("Content-Range", "bytes " + rp[1] + "-" + rp[2] + "/" + M3UString.Length.ToString()); rsp.StringBuffer = M3UString.Substring(int.Parse(rp[1]), 1 + int.Parse(rp[2]) - int.Parse(rp[1])); } } catch (Exception) { rsp = new HTTPMessage(); rsp.StatusCode = 400; rsp.StatusData = "Bad Request"; } } } } else { try { int i = request.DirectiveObj.LastIndexOf("/"); string tmp = request.DirectiveObj.Substring(1, i - 1); bool hasRange = true; if (tmp.IndexOf("/") != -1) { tmp = tmp.Substring(0, tmp.IndexOf("/")); } if (FileInfoTable.ContainsKey(tmp)) { FileInfo f; if (FileInfoTable[tmp].GetType() == typeof(string)) { f = new FileInfo((string)FileInfoTable[tmp]); FileInfoTable[tmp] = f; } else { f = (FileInfo)FileInfoTable[tmp]; } ProtocolInfoString pis = ProtocolInfoString.CreateHttpGetProtocolInfoString(f); rsp.StatusCode = 200; rsp.StatusData = "OK"; rsp.ContentType = pis.MimeType; if (request.Directive == "HEAD") { rsp.AddTag("Content-Length", f.Length.ToString()); rsp.OverrideContentLength = true; } else { HTTPSession.Range[] RNG = null; if (request.GetTag("Range") != "") { long x, y; ArrayList RList = new ArrayList(); DText rp = new DText(); rp.ATTRMARK = "="; rp.MULTMARK = ","; rp.SUBVMARK = "-"; rp[0] = request.GetTag("Range"); for (int I = 1; I <= rp.DCOUNT(2); ++I) { if (rp[2, I, 1] == "") { // Final Bytes y = long.Parse(rp[2, I, 2].Trim()); x = f.Length - y; y = x + y; } else if (rp[2, I, 2] == "") { // Offset till end x = long.Parse(rp[2, I, 1].Trim()); y = f.Length - x; } else { // Full Range x = long.Parse(rp[2, I, 1].Trim()); y = long.Parse(rp[2, I, 2].Trim()); } RList.Add(new HTTPSession.Range(x, 1 + y - x)); } RNG = (HTTPSession.Range[])RList.ToArray(typeof(HTTPSession.Range)); } else { hasRange = false; } if (request.Version == "1.0") { WebSession.OnStreamDone += new HTTPSession.StreamDoneHandler(DoneSink); } // ((HTTPMessage)(new UPnPDebugObject(WebSession)).GetField("Headers")).Version = "1.0"; if (hasRange) { WebSession.SendStreamObject(f.OpenRead(), RNG, pis.MimeType); } else { FileStream fs = f.OpenRead(); long length = fs.Length; WebSession.SendStreamObject(fs, length, pis.MimeType); } return; } } else { rsp.StatusCode = 404; rsp.StatusData = "Not Found"; } } catch (Exception) { rsp.StatusCode = 404; rsp.StatusData = "Not Found"; } } WebSession.Send(rsp); return; } rsp.StatusCode = 500; rsp.StatusData = "Not implemented"; WebSession.Send(rsp); }
// Methods. public bool Initialize(DSystemConfiguration configuration, IntPtr windowHandle) { try { // Create the input object. The input object will be used to handle reading the keyboard and mouse input from the user. Input = new DInput(); // Initialize the input object. if (!Input.Initialize(configuration, windowHandle)) { return(false); } // #region Initialize System // Create the Direct3D object. D3D = new DDX11(); // Initialize the Direct3D object. if (!D3D.Initialize(configuration, windowHandle)) { return(false); } // Create the camera object Camera = new DCamera(); // Initialize a base view matrix with the camera for 2D user interface rendering. Camera.SetPosition(0.0f, 0.0f, -10.0f); Camera.RenderBaseViewMatrix(); Matrix baseViewMatrix = Camera.BaseViewMatrix; // Set the initial position of the camera. (Since the ViewMatrix is already created from a base position.) 250.0f Camera.SetPosition(100.0f, 2.0f, 250.0f); Camera.SetRotation(0, 180.0f, 0); // Create the model object. TerrainModel = new DTerrainHeightMap(); // Initialize the terrain object. if (!TerrainModel.Initialize(D3D.Device, "heightmap01.bmp", "dirt02.bmp", "bump.bmp")) { return(false); } // Create the position object. Position = new DPosition(); // Set the initial position of the viewer to the same as the initial camera position. Position.SetPosition(Camera.GetPosition().X, Camera.GetPosition().Y, Camera.GetPosition().Z); Position.SetRotation(Camera.GetRotation().X, Camera.GetRotation().Y, Camera.GetRotation().Z); // Create the fps object. FPS = new DFPS(); // Initialize the fps object. FPS.Initialize(); // Create the cpu object. CPU = new DCPU(); // Initialize the cpu object. CPU.Initialize(); // Create the text object. Text = new DText(); // Initialize the text object. if (!Text.Initialize(D3D.Device, D3D.DeviceContext, windowHandle, configuration.Width, configuration.Height, baseViewMatrix)) { return(false); } // Set the video card information in the text object. if (!Text.SetVideoCard(D3D.VideoCardDescription, D3D.VideoCardMemory, D3D.DeviceContext)) { return(false); } // Create the color shader object. TerrainBumpMapShader = new DBumpMapShader(); // Initialize the color shader object. if (!TerrainBumpMapShader.Initialize(D3D.Device, windowHandle)) { return(false); } // Create the light object. Light = new DLight(); // Initialize the light object. Light.SetDiffuseColor(1.0f, 1.0f, 1.0f, 1.0f); Light.Direction = new Vector3(0.75f, -0.5f, 0.0f); return(true); } catch (Exception ex) { MessageBox.Show("Could not initialize Direct3D\nError is '" + ex.Message + "'"); return(false); } }
// Methods. public bool Initialize(DSystemConfiguration configuration, IntPtr windowHandle) { try { // Create the input object. The input object will be used to handle reading the keyboard and mouse input from the user. Input = new DInput(); // Initialize the input object. if (!Input.Initialize(configuration, windowHandle)) { return(false); } // #region Initialize System // Create the Direct3D object. D3D = new DDX11(); // Initialize the Direct3D object. if (!D3D.Initialize(configuration, windowHandle)) { return(false); } // Create the position object. Position = new DPosition(); // Set the initial position and rotation of the viewer. Position.SetPosition(280.379f, 24.5225f, 367.018f); Position.SetRotation(19.6834f, 222.013f, 0.0f); // Create the camera object Camera = new DCamera(); // Initialize a base view matrix with the camera for 2D user interface rendering. Camera.SetPosition(0.0f, 0.0f, -10.0f); Camera.RenderBaseViewMatrix(); Matrix baseViewMatrix = Camera.BaseViewMatrix; // Create the light object. Light = new DLight(); // Initialize the light object. Light.SetDiffuseColor(1.0f, 1.0f, 1.0f, 1.0f); Light.Direction = new Vector3(0.5f, -0.75f, 0.25f); // Create the model object. TerrainModel = new DTerrainHeightMap(); // Initialize the terrain object. if (!TerrainModel.Initialize(D3D.Device, "hm.bmp", "cm.bmp", 20.0f, "dirt04.bmp", "normal01.bmp")) { return(false); } // Create the color shader object. TerrainShader = new DTerrainShader(); //// Initialize the color shader object. if (!TerrainShader.Initialize(D3D.Device, windowHandle)) { return(false); } // Create the sky dome object. SkyDome = new DSkyDome(); // Initialize the sky dome object. if (!SkyDome.Initialize(D3D.Device)) { return(false); } // Create the sky dome shader object. SkyDomeShader = new DSkyDomeShader(); // Initialize the sky dome shader object. if (!SkyDomeShader.Initialize(D3D.Device, windowHandle)) { return(false); } // Create the sky plane object. SkyPlane = new DSkyPlane(); // Initialize the sky plane object. if (!SkyPlane.Initialze(D3D.Device, "cloud001.bmp", "perturb001.bmp")) { return(false); } // Create the sky plane shader object. SkyPlaneShader = new DSkyPlaneShader(); // Initialize the sky plane shader object. if (!SkyPlaneShader.Initialize(D3D.Device, windowHandle)) { return(false); } // Create the fps object. FPS = new DFPS(); // Initialize the fps object. FPS.Initialize(); // Create the cpu object. CPU = new DCPU(); // Initialize the cpu object. CPU.Initialize(); // Create the text object. Text = new DText(); // Initialize the text object. if (!Text.Initialize(D3D.Device, D3D.DeviceContext, windowHandle, configuration.Width, configuration.Height, baseViewMatrix)) { return(false); } // Set the video card information in the text object. if (!Text.SetVideoCard(D3D.VideoCardDescription, D3D.VideoCardMemory, D3D.DeviceContext)) { return(false); } // Create the refraction render to texture object. RefractionTexture = new DRenderTexture(); // Initialize the refraction render to texture object. if (!RefractionTexture.Initialize(D3D.Device, configuration)) { return(false); } // Create the reflection render to texture object. ReflectionTexture = new DRenderTexture(); // Initialize the reflection render to texture object. if (!ReflectionTexture.Initialize(D3D.Device, configuration)) { return(false); } // Create the reflection shader object. ReflectionShader = new DReflectionShader(); // Initialize the reflection shader object. if (!ReflectionShader.Initialize(D3D.Device, windowHandle)) { return(false); } // Create the water object. WaterModel = new DWater(); // Initialize the water object. if (!WaterModel.Initilize(D3D.Device, "waternormal.bmp", 3.75f, 110.0f)) { return(false); } // Create the water shader object. WaterShader = new DWaterShader(); // Initialize the water shader object. if (!WaterShader.Initialize(D3D.Device, windowHandle)) { return(false); } return(true); } catch (Exception ex) { MessageBox.Show("Could not initialize Direct3D\nError is '" + ex.Message + "'"); return(false); } }