示例#1
0
        public static void WriteCache(this TabPageEntity page)
        {
            string path = page.GetRecordPath(true);

            System.IO.StringWriter sw = new System.IO.StringWriter();
            //创建一个序列化对像
            System.Xml.Serialization.XmlSerializer xmlSerializer = new System.Xml.Serialization.XmlSerializer(typeof(TabPageEntity));
            //写入缓存文件
            System.IO.File.WriteAllBytes(path, Compression.Compress(System.Text.UnicodeEncoding.Unicode.GetBytes(sw.ToString())));

            page.Modifyd = false;
            page.Issync  = true;
        }
示例#2
0
        /// <summary>
        /// 得到生成页面文件的路径
        /// </summary>
        /// <param name="page">页面文件代码</param>
        /// <param name="IsCacheFile">是不是返回页面缓存文件的路径 默认为false</param>
        /// <returns>返回生成页面文件的路径</returns>
        public static string GetRecordPath(this TabPageEntity page, bool IsCacheFile = false)
        {
            //得到生成文件的路径
            //基本路径
            string basePath  = AppDomain.CurrentDomain.BaseDirectory + page.Record.分类标识.ToPingYing() + "/" + page.Record.书名.ToPingYing() + "/" + page.Record.ID;
            string htmlPage  = System.IO.Path.GetFullPath(basePath + ".html");
            string cachePage = System.IO.Path.GetFullPath(basePath + ".zip");

            if (IsCacheFile)
            {
                return(cachePage);
            }
            return(htmlPage);
        }
示例#3
0
 /// <summary>
 /// 更新页面记录
 /// </summary>
 /// <param name="page"></param>
 public void UpdateRecord(TabPageEntity page)
 {
     //如果文件不同步则
     if (!page.IsTabPageEntitySync())
     {
         try
         {
             //将记录写入缓存
             page.WriteCache();
         }
         //如果写入失败则过一会儿再写入
         catch
         {
             System.Threading.Tasks.Task.Factory.StartNew(() => { System.Threading.Thread.Sleep(1); page.WriteCache(); });
         }
     }
 }
示例#4
0
        /// <summary>
        /// 比较当前记录是不是与硬盘上的记录相等
        /// </summary>
        /// <param name="page">页对像实体</param>
        /// <param name="path">文件所在的路径</param>
        /// <returns></returns>
        public static bool IsTabPageEntitySync(this TabPageEntity page)
        {
            //如果文件不存在直接返回 false
            if (!System.IO.File.Exists(page.GetRecordPath(true)))
            {
                return(false);
            }
            //实始化buff
            byte[] bytearr = new byte[10];

            //锁住读写文件时使用
            lock (page)
            {
                //读取缓存文件内容
                //如果多线程操作可能会引发文件访问异常,这里需要对,访问对象进行控制
                bytearr = System.IO.File.ReadAllBytes(page.GetRecordPath(true));
            }

            //得到Zip文件解压缩后的数据
            bytearr = Compression.DeCompress(bytearr);
            //得到需要序列化的字符串
            string Text = System.Text.UnicodeEncoding.Unicode.GetString(bytearr);

            //创建一个序列化对像
            System.Xml.Serialization.XmlSerializer xmlSerializer = new System.Xml.Serialization.XmlSerializer(typeof(TabPageEntity));

            //得到文中得到的Page 对象
            TabPageEntity diskPage = (TabPageEntity)xmlSerializer.Deserialize(new System.IO.StringReader(Text));

            if (
                diskPage.Book.Record.GUID == page.Book.Record.GUID
                &&
                diskPage.Book.Record.ID == page.Book.Record.ID
                &&
                diskPage.Book.Record.创建时间 == page.Book.Record.创建时间
                &&
                diskPage.Book.Record.分类标识 == page.Book.Record.分类标识
                &&
                diskPage.Book.Record.分类表ID == page.Book.Record.分类表ID
                &&
                diskPage.Book.Record.书名 == page.Book.Record.书名
                &&
                diskPage.Book.Record.说明 == page.Book.Record.说明
                &&
                diskPage.Book.Record.完本 == page.Book.Record.完本
                &&
                diskPage.Book.Record.周点击 == page.Book.Record.周鲜花
                &&
                diskPage.Book.Record.周鲜花 == page.Book.Record.周鲜花
                &&
                diskPage.Book.Record.总点击 == page.Book.Record.总点击
                &&
                diskPage.Book.Record.总鲜花 == page.Book.Record.总鲜花
                &&
                diskPage.Book.Record.最后更新时间 == page.Book.Record.最后更新时间
                //分类比较结束 开始内容比较
                &&
                diskPage.Record.ID == page.Record.ID
                &&
                diskPage.Record.本记录GUID == page.Record.本记录GUID
                &&
                diskPage.Record.最后访问时间 == page.Record.最后访问时间
                )
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
示例#5
0
        public void UpdateRecord(RecordType recordType, string sign)
        {
            //得到枚举选项
            List <RecordType> result = EnumExtendMethod.GetEnumArray <RecordType>(recordType);

            decimal d;

            if (result.Count > 0)
            {
                switch (result[0])
                {
                case RecordType.Page:
                    Func <TygModel.文章表, bool> fun = null;
                    //如果是数据ID
                    if (decimal.TryParse(sign, out d))
                    {
                        fun = p => p.ID == d;
                    }
                    else
                    {
                        fun = p => p.GUID == Guid.Parse(sign);
                    }

                    //得到对应的记录
                    var records = tygdb.文章表.Where(fun);

                    //初始化当前访问的页面
                    TabPageEntity page = null;

                    if (records.Count() > 0)
                    {
                        var record = records.FirstOrDefault();

                        #region 初始化页面对象数据
                        //如果当前缓存记录中存在这条记录
                        if (!BooksCache.ContainsKey(record.书名表.GUID.ToString()))
                        {
                            //页面所在的分类
                            TabClassEntity Typeclass = null;
                            //如果包括分类
                            if (ClassesCache.ContainsKey(record.书名表.分类表.ID))
                            {
                                Typeclass = ClassesCache[record.书名表.分类表.ID];
                            }
                            else
                            {
                                Typeclass = new TabClassEntity()
                                {
                                    Modifyd = true,
                                };
                                Typeclass.Record = record.书名表.分类表;


                                //添加到分类表
                                ClassesCache.TryAdd(Typeclass.Record.ID, Typeclass);
                            }
                            //实例化书对像
                            TabBookEntity book = new TabBookEntity()
                            {
                                Record    = record.书名表,
                                Typeclass = Typeclass,
                                Modifyd   = true,
                            };

                            //尝试添加到数据中
                            ClassesCache[record.书名表.分类表.ID].Books.TryAdd(record.书名表.GUID.ToString(), book);


                            //如果不包含
                            if (!book.Pages.ContainsKey(sign))
                            {
                                page = new TabPageEntity()
                                {
                                    Book    = book,
                                    Issync  = false,
                                    Modifyd = true,
                                    Record  = record
                                };

                                //将页面添加到缓存集合
                                book.Pages.TryAdd(record.本记录GUID.ToString(), page);
                            }
                            //添加到书的缓存集合
                            BooksCache.TryAdd(record.书名表.GUID.ToString(), book);
                        }
                        #endregion

                        //得到书本对象的数据
                        page = BooksCache[record.书名表.GUID.ToString()].Pages[record.本记录GUID.ToString()];
                        page.Record.总访问次数++;
                        page.Record.最后访问时间 = DateTime.Now;
                        page.Record.书名表.总点击++;
                        page.Record.书名表.周点击++;
                    }

                    break;

                case RecordType.Book:

                    Func <TygModel.书名表, bool> bookfun = null;
                    //如果是数据ID
                    if (decimal.TryParse(sign, out d))
                    {
                        bookfun = p => p.ID == d;
                    }
                    else
                    {
                        bookfun = p => p.GUID == Guid.Parse(sign);
                    }
                    //得到对应的记录
                    var bookrecords = tygdb.书名表.Where(bookfun);
                    if (bookrecords.Count() > 0)
                    {
                        var record = bookrecords.FirstOrDefault();
                        #region 初始化页面对象数据
                        //如果当前缓存记录中存在这条记录
                        if (!BooksCache.ContainsKey(record.GUID.ToString()))
                        {
                            //页面所在的分类
                            TabClassEntity Typeclass = null;
                            //如果包括分类
                            if (ClassesCache.ContainsKey(record.分类表.ID))
                            {
                                Typeclass = ClassesCache[record.分类表.ID];
                            }
                            else
                            {
                                Typeclass = new TabClassEntity()
                                {
                                    Modifyd = true,
                                };
                                Typeclass.Record = record.分类表;

                                //添加到分类表
                                ClassesCache.TryAdd(Typeclass.Record.ID, Typeclass);
                            }
                            //实例化书对像
                            TabBookEntity book = new TabBookEntity()
                            {
                                Record    = record,
                                Typeclass = Typeclass,
                                Modifyd   = true,
                            };
                            BooksCache.TryAdd(record.GUID.ToString(), book);
                        }
                        //更新状态
                        BooksCache[record.GUID.ToString()].Modifyd = true;

                        #endregion
                        record.总点击++;
                        record.周点击++;
                    }


                    break;

                case RecordType.ClassEntity:

                    break;
                }
            }

            #region 查看记录不是不和缓存数据中的记录相等 如果不相当则更新较旧的记录

            #endregion
        }