/// <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); }
/// <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); }