internal void SetupUPnPServer()
        {
            _CurrentUser = null;
            _ItemMap     = new Dictionary <string, List <string> >();

            Logger.Info("UPnP Server Starting");
            this._Upnp = new Platinum.UPnP();

            if (Plugin.Instance.Configuration.DlnaPortNumber.HasValue)
            {
                _PlatinumServer = new Platinum.MediaConnect(Plugin.Instance.Configuration.FriendlyDlnaName, UPnPServerUuid, Plugin.Instance.Configuration.DlnaPortNumber.Value);
            }
            else
            {
                _PlatinumServer = new Platinum.MediaConnect(Plugin.Instance.Configuration.FriendlyDlnaName, UPnPServerUuid, 0); //Passing zero allows us to set the uuid but still have a randomised port number
            }
            _PlatinumServer.BrowseMetadata       += server_BrowseMetadata;
            _PlatinumServer.BrowseDirectChildren += server_BrowseDirectChildren;
            _PlatinumServer.ProcessFileRequest   += server_ProcessFileRequest;
            _PlatinumServer.SearchContainer      += server_SearchContainer;
            //AddIcons(_PlatinumServer);

            _Upnp.AddDeviceHost(_PlatinumServer);
            _Upnp.Start();
            Logger.Info("UPnP Server Started");
        }
        //private void AddIcons(Platinum.MediaConnect server)
        //{
        //    AddIcon(server, "MediaBrowser.Plugins.Dlna.Images.logo-120.jpeg", "image/jpeg", 120, 120, 24, "images/logo-120.jpeg");
        //    AddIcon(server, "MediaBrowser.Plugins.Dlna.Images.logo-48.jpeg", "image/jpeg", 48, 48, 24, "images/logo-48.jpeg");
        //    AddIcon(server, "MediaBrowser.Plugins.Dlna.Images.logo-120.jpeg", "image/png", 120, 120, 24, "images/logo-120.png");
        //    AddIcon(server, "MediaBrowser.Plugins.Dlna.Images.logo-48.jpeg", "image/png", 48, 48, 24, "images/logo-48.png");
        //}
        //private void AddIcon(Platinum.MediaConnect server, string resourceName, string mimeType, int width, int height, int depth,string urlPath)
        //{
        //    byte[] icon;
        //    using (var source = GetType().Assembly.GetManifestResourceStream(resourceName))
        //    {
        //        var length = (int)source.Length;
        //        icon = new byte[length];
        //        source.Read(icon, 0, length-1);
        //        source.Close();
        //    }
        //    server.AddIcon(new Platinum.DeviceIcon(mimeType, width, height, depth, urlPath), icon);
        //}

        internal void CleanupUPnPServer()
        {
            Logger.Info("UPnP Server Stopping");
            if (_Upnp != null && _Upnp.Running)
            {
                _Upnp.Stop();
            }

            if (_PlatinumServer != null)
            {
                _PlatinumServer.BrowseMetadata       -= server_BrowseMetadata;
                _PlatinumServer.BrowseDirectChildren -= server_BrowseDirectChildren;
                _PlatinumServer.ProcessFileRequest   -= server_ProcessFileRequest;
                _PlatinumServer.SearchContainer      -= server_SearchContainer;

                _PlatinumServer.Dispose();
                _PlatinumServer = null;
            }

            if (_Upnp != null)
            {
                _Upnp.Dispose();
                _Upnp = null;
            }
            if (_ItemMap != null)
            {
                _ItemMap.Clear();
                _ItemMap = null;
            }
            Logger.Info("UPnP Server Stopped");
        }
        internal void SetupUPnPServer()
        {
            _CurrentUser = null;
            _ItemMap = new Dictionary<string, List<string>>();

            Logger.Info("UPnP Server Starting");
            this._Upnp = new Platinum.UPnP();

            if (Plugin.Instance.Configuration.DlnaPortNumber.HasValue)
                _PlatinumServer = new Platinum.MediaConnect(Plugin.Instance.Configuration.FriendlyDlnaName, UPnPServerUuid, Plugin.Instance.Configuration.DlnaPortNumber.Value);
            else
                _PlatinumServer = new Platinum.MediaConnect(Plugin.Instance.Configuration.FriendlyDlnaName, UPnPServerUuid, 0); //Passing zero allows us to set the uuid but still have a randomised port number


            _PlatinumServer.BrowseMetadata += server_BrowseMetadata;
            _PlatinumServer.BrowseDirectChildren += server_BrowseDirectChildren;
            _PlatinumServer.ProcessFileRequest += server_ProcessFileRequest;
            _PlatinumServer.SearchContainer += server_SearchContainer;
            //AddIcons(_PlatinumServer);

            _Upnp.AddDeviceHost(_PlatinumServer);
            _Upnp.Start();
            Logger.Info("UPnP Server Started");
        }
        //private void AddIcons(Platinum.MediaConnect server)
        //{
        //    AddIcon(server, "MediaBrowser.Plugins.Dlna.Images.logo-120.jpeg", "image/jpeg", 120, 120, 24, "images/logo-120.jpeg");
        //    AddIcon(server, "MediaBrowser.Plugins.Dlna.Images.logo-48.jpeg", "image/jpeg", 48, 48, 24, "images/logo-48.jpeg");
        //    AddIcon(server, "MediaBrowser.Plugins.Dlna.Images.logo-120.jpeg", "image/png", 120, 120, 24, "images/logo-120.png");
        //    AddIcon(server, "MediaBrowser.Plugins.Dlna.Images.logo-48.jpeg", "image/png", 48, 48, 24, "images/logo-48.png");
        //}
        //private void AddIcon(Platinum.MediaConnect server, string resourceName, string mimeType, int width, int height, int depth,string urlPath)
        //{
        //    byte[] icon;
        //    using (var source = GetType().Assembly.GetManifestResourceStream(resourceName))
        //    {
        //        var length = (int)source.Length;
        //        icon = new byte[length];
        //        source.Read(icon, 0, length-1);
        //        source.Close();
        //    }
        //    server.AddIcon(new Platinum.DeviceIcon(mimeType, width, height, depth, urlPath), icon);
        //}

        internal void CleanupUPnPServer()
        {
            Logger.Info("UPnP Server Stopping");
            if (_Upnp != null && _Upnp.Running)
                _Upnp.Stop();

            if (_PlatinumServer != null)
            {
                _PlatinumServer.BrowseMetadata -= server_BrowseMetadata;
                _PlatinumServer.BrowseDirectChildren -= server_BrowseDirectChildren;
                _PlatinumServer.ProcessFileRequest -= server_ProcessFileRequest;
                _PlatinumServer.SearchContainer -= server_SearchContainer;

                _PlatinumServer.Dispose();
                _PlatinumServer = null;
            }

            if (_Upnp != null)
            {
                _Upnp.Dispose();
                _Upnp = null;
            }
            if (_ItemMap != null)
            {
                _ItemMap.Clear();
                _ItemMap = null;
            }
            Logger.Info("UPnP Server Stopped");
        }