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;
        }
Ejemplo n.º 8
0
 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();
 }
Ejemplo n.º 9
0
        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));
        }
Ejemplo n.º 10
0
 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);
 }
Ejemplo n.º 11
0
        /// <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);
            }
        }
Ejemplo n.º 14
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());
        }
Ejemplo n.º 17
0
        /// <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();
        }
Ejemplo n.º 18
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 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;
        }
Ejemplo n.º 21
0
        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);
        }
Ejemplo n.º 23
0
		/// <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();
		}
Ejemplo n.º 24
0
		/// <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();
        }
Ejemplo n.º 26
0
 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);
        }
Ejemplo n.º 30
0
 public void Accept(DText type, TType x, List <ResourceInfo> y)
 {
 }
Ejemplo n.º 31
0
 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);
                }
            }
        }
Ejemplo n.º 33
0
 public void Accept(DText type, RawTextTable x)
 {
     x.AddText(ValidatorContext.CurrentVisitor.CurrentValidateRecord, type.Key, type.RawValue);
 }
Ejemplo n.º 34
0
 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);
        }
Ejemplo n.º 36
0
        /// <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);
            }
        }