Exemple #1
0
        /// <summary>
        /// Сериализация (сохранение) передаваемого экземпляра
        /// </summary>
        /// <typeparam name="TManifest">Тип сохраняемого манфиеста</typeparam>
        /// <param name="manifest">Сохраянемый экземпляр</param>
        /// <param name="pathName">Полный путь сохраняемого файла</param>
        /// <returns>Возвращает флаг успешного сохранения экземпляра</returns>
        protected internal static bool Serialize <TManifest>(TManifest manifest, string pathName) where TManifest : XmlManifest
        {
            try
            {
                XmlSerializer xs = GetSerializer <TManifest>();

                using (MutexLocker.Lock(typeof(TManifest).FullName))
                {
                    using (var fw = File.Create(pathName))
                        xs.Serialize(fw, manifest);
                }

                manifest.FileInfo = new FileInfo(pathName);

                return(true);
            }
            catch (Exception ex)
            {
                if (ThrowSerializeExceptions)
                {
                    throw;
                }

                if (LogExceptions)
                {
                    m_loger.Log("Возникло исключение при сериализации манифеста", ex
                                , new LogParameter("Тип манифеста", typeof(TManifest).FullName)
                                , new LogParameter("Путь к файлу", pathName));
                }

                return(false);
            }
        }
                public static MutexLocker FromBaseObject(BaseObject baseObj)
                {
                    if (baseObj == null || baseObj.NativeObject == IntPtr.Zero)
                    {
                        return(null);
                    }
                    MutexLocker obj = baseObj as  MutexLocker;

                    if (object.Equals(obj, null))
                    {
                        obj = new MutexLocker(CreatedWhenConstruct.CWC_NotToCreate);
                        obj.BindNativeObject(baseObj.NativeObject, "CMutexLocker");
                        obj.IncreaseCast();
                    }

                    return(obj);
                }
Exemple #3
0
        /// <summary>
        /// Десериализация манифеста из файла
        /// </summary>
        /// <typeparam name="TManifest">Тип манифеста</typeparam>
        /// <param name="pathName">Полный путь к десериализуемому файлу</param>
        /// <param name="rebuildOnEx">Перезапись существующего файла файлом по умолчанию в случае ошибки десериализации</param>
        /// <returns>Возвращает десериализованный экземпляр или экземпляр по умолчанию</returns>
        protected internal static TManifest Deserialize <TManifest>(string pathName, bool rebuildOnEx = false)
            where TManifest : XmlManifest, new()
        {
            try
            {
                TManifest manifest = null;
                if (string.IsNullOrEmpty(pathName))
                {
                    manifest = (TManifest) new TManifest().GetDefault();
                    pathName = manifest.GetDefaultFileName();
                }
                if (!File.Exists(pathName))
                {
                    manifest = (TManifest) new TManifest().GetDefault();

                    manifest.FileInfo = new FileInfo(pathName);

                    try
                    {
                        using (MutexLocker.Lock(typeof(TManifest).FullName))
                            manifest.Save(pathName);
                    }
                    catch (Exception ex)
                    {
                        m_loger.Log("Возникло исключение при генерации манифеста по умолчанию", ex, MessageType.Warning, new LogParameter("Файл", LogMessageBuilder.GetStringLogVal(pathName)));
                    }

                    return(manifest);
                }
                using (var sr = new StringReader(File.ReadAllText(pathName)))
                {
                    XmlSerializer xs = GetSerializer <TManifest>();

                    manifest          = xs.Deserialize(sr) as TManifest;
                    manifest.FileInfo = new FileInfo(pathName);
                    return(manifest);
                }
            }
            catch (Exception ex)
            {
                if (ThrowSerializeExceptions)
                {
                    throw;
                }

                if (LogExceptions)
                {
                    m_loger.Log("Возникло исключение при десериализации манифеста. Манифест будет удалён и перегенерирован заново.", ex
                                , new LogParameter("Тип манифеста", typeof(TManifest).FullName)
                                , new LogParameter("Путь к файлу", pathName));
                }

                TManifest newMon = null;

                if (!rebuildOnEx)
                {
                    return(newMon);
                }
                else
                {
                    try
                    {
                        //пересоздаём манифест по умолчанию
                        newMon = new TManifest();

                        if (File.Exists(pathName))
                        {
                            File.Delete(pathName);
                        }

                        using (MutexLocker.Lock(typeof(TManifest).FullName))
                            Serialize(newMon, pathName);

                        return(newMon);
                    }
                    catch (Exception subEx)
                    {
                        if (LogExceptions)
                        {
                            m_loger.Log("Возникло исключение при попытке сериализации манифеста по умолчанию. Возвращена пустая ссылка на манифест", subEx
                                        , new LogParameter("Тип манифеста", typeof(TManifest).FullName)
                                        , new LogParameter("Путь к файлу", pathName));
                        }

                        return(null);
                    }
                }
            }
        }
                public BaseObject Create()
                {
                    MutexLocker emptyInstance = new MutexLocker(CreatedWhenConstruct.CWC_NotToCreate);

                    return(emptyInstance);
                }