public PlaybackControl(IUPnP sink)
 {
     UPnPSink = sink;
     Player = new MPlayerWrapper();
     PlayQueueHandler = new PlayqueueHandler();
     XMLconverter = new XMLReader1();
     SubscribeToWrapper();
     SubscribeToSink();
 }
 /// <summary>
 /// Constructor. Creates Audio Player Wrapper, XMLreader and XMLwriter and subscribes to wrapper and UPnP Sink
 /// </summary>
 /// <param name="sink">UPnP Sink</param>
 /// <param name="pqhandl">Playqueue Handler</param>
 public PlaybackControl(IUPnP sink, IPlayqueueHandler pqhandl)
 {
     UPnPSink = sink;
     Player = new MPlayerWrapper();
     PlayQueueHandler = pqhandl;
     XMLconverter = new XMLReader.XMLReader();
     wr = new XMLWriter();
     SubscribeToWrapper();
     SubscribeToSink();
     _TransportState = "STOPPED";
 }
        /// <summary>
        /// Function for executing the strategy.
        /// 
        /// Strategy implements getting the "all" container id. 
        /// It also implements the "playqueue" container id.
        /// This is a dirty fix and will be revised to take full advantage of the strategy pattern.
        /// 
        /// </summary>
        /// <param name="args">Arguments to pass to the inner functionality</param>
        /// <param name="cb">callback to answer back to the UPnP Device</param>
        /// <param name="writer">XMLWriter for writing tracks from the database to sendable to XML</param>
        /// <param name="pqhandl">The playqueue handler containing the playlist</param>
        public void Handle(List<UPnPArg> args, CallBack cb, XMLWriter writer, IPlayqueueHandler pqhandl)
        {
            Console.WriteLine ("Browse Was called (BrowseStrat)");
            List<UPnPArg> retArgs = null;

            string containerId = GetContainerID (args);

            if (containerId == "all")
            {
                retArgs = new List<UPnPArg>();
                List<ITrack> containingList = _dbLookup.Browse (containerId);
                int NumberReturned = containingList.Count;

                string retVal = writer.ConvertITrackToXML (containingList);

                retArgs.Add (new UPnPArg ("Result", retVal));
                //retArgs.Add (new UPnPArg("Result", "<DIDL-Lite> music stuff </DIDL-Lite>"));
                retArgs.Add (new UPnPArg ("NumberReturned", NumberReturned.ToString ()));
                retArgs.Add (new UPnPArg ("TotalMatches", NumberReturned.ToString ()));
                retArgs.Add (new UPnPArg ("UpdateID", "12"));

                cb (retArgs, "Browse");
            }
            else if (containerId == "playqueue")
            {
                retArgs = new List<UPnPArg>();
                List<ITrack> lis = new List<ITrack>();

                string retVal = writer.ConvertITrackToXML(pqhandl.GetQueue());

                retArgs.Add (new UPnPArg ("Result", retVal));
                retArgs.Add (new UPnPArg ("NumberReturned", pqhandl.GetQueue().Count.ToString()));
                retArgs.Add (new UPnPArg ("TotalMatches", pqhandl.GetQueue().Count.ToString()));
                retArgs.Add (new UPnPArg ("UpdateID", "12"));

                cb(retArgs, "Browse");
            }
            else
            {

                cb (retArgs, "Browse");
            }
        }
        //public event PropertyChangedDel propEvent;
        /// <summary>
        /// Constructor 
        /// Creates associations between the class, The UPnP device and the playqueue handler.
        /// </summary>
        /// <param name="sourceDevice">UPnP Source device communicating with control points</param>
        /// <param name="pqhandl">Handler containing and managing the playqueue</param>
        public DBHandle(IUPnP sourceDevice, IPlayqueueHandler pqhandl)
        {
            _sourceDevice = sourceDevice;
            _sourceDevice.ActionEvent += _sourceDevice_ActionEvent;

            _dbXmlWriter = new XMLWriter();
            _dbLookup = new DBLookup();

            _PQHandler = pqhandl;

            CreateDictionary();
        }