예제 #1
0
 /// <summary>
 /// Возвращает информацию о сессии
 /// </summary>
 /// <param name="fileName">Имя файла сессии</param>
 /// <returns>Информация о сессии</returns>
 public BalanceSessionInfo LoadSessionInfo(string fileName, int versionNumber = 1)
 {
     try
     {
         if (versionNumber == 1)
         {
             using (System.IO.Packaging.Package package = System.IO.Packaging.Package.Open(fileName, FileMode.Open))
             {
                 return(LoadSessionInfoFromPackage(package.GetPart(System.IO.Packaging.PackUriHelper.CreatePartUri(new Uri(PART_Info, UriKind.Relative)))));
             }
         }
         else
         if (versionNumber == 0)
         {
             return(LoadSessionInfoFromOldFileFormat(fileName));
         }
         else
         {
             throw new ArgumentOutOfRangeException("Session file version number");
         }
     }
     catch (FileFormatException)
     {
         return(LoadSessionInfoFromOldFileFormat(fileName));
     }
     catch (IOException ioe)
     {
         EmcosSiteWrapperApp.LogException(ioe);
         return(null);
     }
     catch { return(null); }
 }
예제 #2
0
        /// <summary>
        /// Загрузка данных
        /// </summary>
        /// <returns>True если загрузка произошла успешно</returns>
        public bool Load()
        {
            bool result = false;
            // имя файла с сессией
            string sessionFileNameToLoad = null;

            // проверка есть файл, с которым работали в последний раз
            if (File.Exists(Path.Combine(SESSIONS_FOLDER, "lastsession")))
            {
                EmcosSiteWrapperApp.LogInfo("Обнаружен файл с именем файла последней сессии.");
                var lastusedfile = string.Empty;
                try
                {
                    EmcosSiteWrapperApp.LogInfo("Попытка чтения имени файла последней сессии.");
                    // чтение имени файла
                    lastusedfile = File.ReadAllText(Path.Combine(SESSIONS_FOLDER, "lastsession")).Trim();
                    EmcosSiteWrapperApp.LogInfo("Имя файла последней сессии получено.");
                    if (File.Exists(lastusedfile))
                    {
                        sessionFileNameToLoad = lastusedfile;
                        EmcosSiteWrapperApp.LogInfo("Файл последней сессии существует, попытаемся его загрузить.");
                    }
                    else
                    {
                        EmcosSiteWrapperApp.LogInfo("Указанный файл последней сессии не найден.");
                    }
                }
                catch (System.IO.IOException ex)
                {
                    EmcosSiteWrapperApp.LogInfo("Ошибка при чтении имени файла последней сессии.");
                    _callBackAction(ex);
                }
            }
            else
            {
                if (String.IsNullOrWhiteSpace(BALANCE_SESSION_FILENAME) || File.Exists(Path.Combine(SESSIONS_FOLDER, BALANCE_SESSION_FILENAME + SESSION_FILE_EXTENSION)) == false)
                {
                    EmcosSiteWrapperApp.LogInfo("Сессия не обнаружена.");
                    return(false);
                }
            }
            //
            if (LoadSessionData(sessionFileNameToLoad))
            {
                EmcosSiteWrapperApp.LogInfo("Сессия обнаружена и загружена.");
                ActiveSession.Info.IsLoaded = true;
                Loaded?.Invoke(null, EventArgs.Empty);
                result = true;
            }
            else
            {
                EmcosSiteWrapperApp.LogInfo(String.Format("Не удалось загрузить сессию. Файл [{0}].",
                                                          sessionFileNameToLoad ?? BALANCE_SESSION_FILENAME + SESSION_FILE_EXTENSION));
            }
            return(result);
        }
예제 #3
0
        /// <summary>
        /// Инициализация - загрузка точек измерений, загрузка последней сессии
        /// </summary>
        public void Init()
        {
            try
            {
                // Проверка наличия папок согласно настроек и наличия файла с описанием точек
                if (System.IO.Directory.Exists(SESSIONS_FOLDER) == false)
                {
                    Directory.CreateDirectory(SESSIONS_FOLDER);
                }

                if (System.IO.Directory.Exists(SETTINGS_FOLDER) == false)
                {
                    Directory.CreateDirectory(SETTINGS_FOLDER);
                }

                if (File.Exists(CONFIGURATION_FILENAME) == false)
                {
                    EmcosSiteWrapperApp.LogInfo("Файл с точками не найден.");
                    // попытка построить дерево точек из сервиса

                    int rootCode = _settings.RootEmcosPointCode;


                    //var bytes = Properties.Resources.DataModel_xml_gz;
                    //Stream stream = new MemoryStream(bytes);
                    //var gzip = new System.IO.Compression.GZipStream(stream, System.IO.Compression.CompressionMode.Decompress, false);
                    //using (FileStream fs = new FileStream(LIST_Balance_POINTS_FILENAME, FileMode.Create))
                    //{
                    //    gzip.CopyTo(fs);
                    //}
                    //File.WriteAllBytes(LIST_Balance_POINTS_FILENAME, Properties.Resources.DataModel_xml_gz);
                }
            }
            catch (Exception ex)
            {
                _callBackAction(ex);
            }
            // создание в фоне списка сессий
            var task = System.Threading.Tasks.Task.Factory.StartNew(() => FillSessionsList());

            // чтение конфигурации
            if (LoadConfiguration() == false)
            {
                EmcosSiteWrapperApp.LogWarning("Конфигурация не загружена");
            }
            else
            {
                EmcosSiteWrapperApp.LogWarning("Конфигурация загружена");
            }

            // загрузка сессии
            Load();
        }
예제 #4
0
        /// <summary>
        /// Возвращает версию файла сессии
        /// </summary>
        /// <param name="fileName">Имя файла сессии</param>
        /// <returns>-1 - файл не поддреживается, 0 - файл старого формата, 1 - нового</returns>
        public int GetSessionVersion(string fileName)
        {
            byte[] zipHeader     = { 0x1F, 0x8B, 0x08 };
            byte[] packageHeader = { 0x50, 0x4B, 0x03, 0x04, 0x14 };

            if (Path.GetExtension(fileName) == SESSION_FILE_EXTENSION)
            {
                byte[] bytes = new byte[5];
                using (System.IO.FileStream fs = new System.IO.FileStream(fileName, System.IO.FileMode.Open, System.IO.FileAccess.Read))
                    using (System.IO.MemoryStream mso = new System.IO.MemoryStream())
                    {
                        fs.Read(bytes, 0, bytes.Length);
                        mso.Write(bytes, 0, bytes.Length);
                    }
                if (bytes.Take(3).SequenceEqual(zipHeader))
                {
                    return(IsSupportedSessionVersion(LoadVersionFromZip(fileName)) ? 0 : -1);
                }
                else
                if (bytes.Take(5).SequenceEqual(packageHeader))
                {
                    try
                    {
                        BalanceSessionInfo info = LoadSessionInfo(fileName);
                        return(IsSupportedSessionVersion(info.Version) ? 1 : -1);
                    }
                    catch (IOException ioe)
                    {
                        EmcosSiteWrapperApp.LogException(ioe);
                        return(-1);
                    }
                    catch (FileFormatException ffe)
                    {
                        EmcosSiteWrapperApp.LogException(ffe);
                        return(-1);
                    }
                    catch { return(-1); }
                }
                else
                {
                    return(-1);
                }
            }
            else
            {
                return(-1);
            }
        }
예제 #5
0
        /// <summary>
        /// Загрузка сессии
        /// </summary>
        /// <param name="fileName">Имя файла, если не указано, то загрузка из стандартного файла <see cref="BALANCE_SESSION_FILENAME"/></param>
        /// <returns>True если загрузка произошла успешно</returns>
        private bool LoadSessionData(string fileName = null)
        {
            bool mustStoreLastSessionFileName = true;

            try
            {
                if (String.IsNullOrWhiteSpace(fileName))
                {
                    fileName = BALANCE_SESSION_FILENAME + SESSION_FILE_EXTENSION;
                    mustStoreLastSessionFileName = false;
                }
                else
                if (Path.GetExtension(fileName).ToLowerInvariant() != SESSION_FILE_EXTENSION)
                {
                    fileName = fileName + SESSION_FILE_EXTENSION;
                }

                var fi = new FileInfo(Path.Combine(SESSIONS_FOLDER, fileName));
                if (fi.Exists == false)
                {
                    return(false);
                }

                BalanceSession balanceSession = null;

                bool isOldVersionFile = false;
                try
                {
                    if (Path.IsPathRooted(fileName) == false)
                    {
                        fileName = Path.Combine(SESSIONS_FOLDER, fileName);
                    }

                    // попытка прочитать файл как пакет
                    using (System.IO.Packaging.Package package = System.IO.Packaging.Package.Open(fileName, FileMode.Open, FileAccess.Read))
                    {
                        BalanceSessionInfo info = LoadSessionInfoFromPackage(package.GetPart(System.IO.Packaging.PackUriHelper.CreatePartUri(new Uri(PART_Info, UriKind.Relative))));
                        if (IsSupportedSessionVersion(info.Version))
                        {
                            void unknownVersion()
                            {
                                string msg = String.Format("Файл '{1}'\nнеизвестной версии - {0}\nЗагрузка невозможна.\nОбновите программу или обратитесь к разработчику.", info.Version, fi.FullName);

                                EmcosSiteWrapperApp.LogError(msg);
                                EmcosSiteWrapperApp.ShowError(msg);
                            }

                            switch (info.Version.Major)
                            {
                            case 1:
                                switch (info.Version.Minor)
                                {
                                case 0:
                                    isOldVersionFile = true;
                                    break;

                                case 1:
                                    balanceSession = LoadDataFromFileVersion_1_1(package);
                                    break;

                                default:
                                    unknownVersion();
                                    return(false);
                                }
                                break;

                            default:
                                unknownVersion();
                                return(false);
                            }
                        }
                    }
                }
                catch (IOException ioe)
                {
                    EmcosSiteWrapperApp.LogException(ioe);
                    isOldVersionFile = true;
                }
                catch (Exception e) { isOldVersionFile = true; }

                if (isOldVersionFile)
                {
                    balanceSession = LoadDataFromFileVersion_1_0(fi.FullName);
                }

                if (mustStoreLastSessionFileName)
                {
                    File.WriteAllText(Path.Combine(SESSIONS_FOLDER, "lastsession"), fileName);
                }

                ActiveSession = balanceSession;
                return(balanceSession != null);
            }
            catch (Exception ex)
            {
                _callBackAction(ex);
                ActiveSession = null;
                return(false);
            }
        }