示例#1
0
        /// <summary>
        /// Récupére un fichier en privilégiant la version du repository central
        /// </summary>
        /// <param name="category"></param>
        /// <param name="path"></param>
        /// <param name="targetFileName"></param>
        /// <returns></returns>
        public bool GetFileFromRepository(RepositoryCategory category, string path, string targetFileName)
        {
            if (_wsRepository != null)
            {
                if (_wsRepository.GetFile(category, path, targetFileName) != RepositoryServerItemStatus.NotFound)
                {
                    return(true);
                }
            }

            if (_localRepository != null)
            {
                if (_localRepository.GetFile(category, path, targetFileName) != RepositoryServerItemStatus.NotFound)
                {
                    return(true);
                }
            }

            // Si toujours pas, on va lire dans les autres serveurs
            foreach (IRepositoryProvider provider in _providers)
            {
                if (provider != _wsRepository && provider != _localRepository)
                {
                    if (provider.GetFile(category, path, targetFileName) != RepositoryServerItemStatus.NotFound)
                    {
                        return(true);
                    }
                }
            }
            return(false);
        }
示例#2
0
        /// <summary>
        /// S'assure que la version locale correspond à la dernière version du serveur
        /// </summary>
        public bool Synchronize()
        {
            // Si la dernière initialisation s'est mal passée, ce n'est pas la peine de continuer.
            // Si le fichier de strategie n'existe plus (parce qu'il a pu être supprimé par l'utilisateur
            // depuis la dernière initialisation), on re-synchronise.
            if (_initialized && (File.Exists(FullName) || !_isValid))
            {
                return(_isValid);
            }

            _isValid = true; // Par défaut

            ILogger logger = ServiceLocator.Instance.GetService <ILogger>();

            // Récupération du provider du serveur
            IRepositoryProvider ws = RepositoryManager.Instance.GetRemoteRepository(_serverUrl);

            if (ws != null)
            {
                try
                {
                    RepositoryServerItemStatus status = RepositoryServerItemStatus.NotModified;
                    // TODO tester le cache
                    status = ws.GetFile(RepositoryCategory.Strategies, _name, FullName);

                    switch (status)
                    {
                    case RepositoryServerItemStatus.NotModified:
                        Initialize();
                        return(true);

                    case RepositoryServerItemStatus.NotFound:

                        // COMMENT-BEGIN : Non pas de suppression car cette stratégie
                        // est peut-être utilisé ailleurs et on veut la garder
                        // On se contente d'émettre un message

                        // Suppression du fichier package
                        //Utils.DeleteFile(FullName);
                        // Puis suppression du répertoire.
                        // Nota : Il peut arriver que la suppression du répertoire ne se fasse
                        // pas complétement car l'assembly est vérouillé. Pour résoudre ce cas,
                        // à chaque chargement du StrategyManager, on supprimera tous les répertoires
                        // qui n'ont pas de fichier package associé.
                        //Utils.RemoveDirectory(PackageFolder);
                        // COMMENT-END
                        if (logger != null)
                        {
                            logger.Write("Strategy Synchronization",
                                         String.Format("Warning : Le package {0} n'existe plus sur le serveur",
                                                       _name), LogType.Warning);
                        }

                        if (File.Exists(FullName))
                        {
                            // Si il existe on le prend tel quel
                            Initialize();
                            return(true);
                        }

                        // Sinon on indique qu'on a rien
                        _isValid = false;
                        return(false);

                    case RepositoryServerItemStatus.Loaded:
                        if (logger != null)
                        {
                            logger.Write("Strategy Synchronization",
                                         String.Format("Getting new version for strategy {0}", _name), LogType.Info);
                        }
                        // Extraction des fichiers
                        ExtractAndInitialize();
                        return(true);
                    }
                }
                catch (Exception ex)
                {
                    if (logger != null)
                    {
                        logger.WriteError("Synchronize", String.Format("Synchronize package {0}", _name), ex);
                    }
                    Initialize(); // Pour avoir un package propre
                }
            }
            else
            {
                ExtractAndInitialize();
                // Ne pas oublier de faire au moins Initialize() si on met du cache
            }
            return(true);
        }