예제 #1
0
파일: DbManager.cs 프로젝트: cdy816/mars
        /// <summary>
        ///
        /// </summary>
        /// <param name="database"></param>
        public void ReLoad(string database)
        {
            string databasePath = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(this.GetType().Assembly.Location), "Data");

            if (System.IO.Directory.Exists(databasePath))
            {
                foreach (var vv in System.IO.Directory.EnumerateDirectories(databasePath))
                {
                    string sname = new System.IO.DirectoryInfo(vv).Name;

                    if (sname == database)
                    {
                        Cdy.Tag.Database db = new Cdy.Tag.DatabaseSerise().Load(sname);
                        if (!mDatabase.ContainsKey(db.Name))
                        {
                            mDatabase.Add(db.Name, db);
                        }
                        else
                        {
                            mDatabase[db.Name] = db;
                        }
                        break;
                    }
                }
            }
        }
예제 #2
0
파일: DbManager.cs 프로젝트: cdy816/mars
        /// <summary>
        ///
        /// </summary>
        /// <param name="database"></param>
        public void Reload(string database)
        {
            if (mDatabase.ContainsKey(database))
            {
                mDatabase.Remove(database);
            }

            Cdy.Tag.Database db = new Cdy.Tag.DatabaseSerise().Load(database);
            if (!mDatabase.ContainsKey(db.Name))
            {
                mDatabase.Add(db.Name, db);
            }
        }
예제 #3
0
        /// <summary>
        /// 重新加载数据库
        /// </summary>
        public void ReStartDatabase()
        {
            bool ischanged         = false;
            bool hischanged        = false;
            bool issecuritychanged = false;

            LoggerService.Service.Info("ReStartDatabase", "开始重新热启动数据库", ConsoleColor.DarkYellow);

            Stopwatch sw = new Stopwatch();

            sw.Start();

            var db = new DatabaseSerise().LoadDifference(mDatabaseName, this.Database.RealDatabase, new Func <HisTag, bool>((tag) => {
                if (this.hisEnginer.Tags.ContainsKey(tag.Id))
                {
                    return(this.hisEnginer.Tags[tag.Id].EqualsTo(tag));
                }
                else
                {
                    return(false);
                }
            }));

            List <Tagbase> ltmp = new List <Tagbase>();

            List <Tagbase> changedrealtag = new List <Tagbase>();

            List <HisTag> htmp          = new List <HisTag>();
            List <HisTag> changedhistag = new List <HisTag>();

            //
            foreach (var vv in db.RealDatabase.Tags)
            {
                if (mRealDatabase.Tags.ContainsKey(vv.Key))
                {
                    var tag = mRealDatabase.Tags[vv.Key];
                    if (tag.Type == vv.Value.Type)
                    {
                        changedrealtag.Add(vv.Value);
                        ischanged = true;
                    }
                }
                else
                {
                    ltmp.Add(vv.Value);
                    ischanged = true;
                }
            }

            //
            foreach (var vv in db.HisDatabase.HisTags)
            {
                if (this.hisEnginer.Tags.ContainsKey(vv.Key))
                {
                    var tag = this.hisEnginer.Tags[vv.Key];
                    if (tag.TagType == vv.Value.TagType)
                    {
                        changedhistag.Add(vv.Value);
                        hischanged = true;
                    }
                }
                else
                {
                    htmp.Add(vv.Value);
                    hischanged = true;
                }
            }

            LoggerService.Service.Info("ReStartDatabase", "加载 " + mDatabaseName + " 耗时: " + sw.ElapsedMilliseconds.ToString() + " ms");
            compressEnginer.WaitForReady();

            sw.Reset();
            sw.Start();

            var vids = htmp.Select(e => e.Id);

            compressEnginer.ReSizeTagCompress(vids);
            seriseEnginer.CheckAndAddSeriseFile(vids);


            //hisEnginer.Pause();
            realEnginer.UpdateTags(changedrealtag);
            realEnginer.AddTags(ltmp);

            hisEnginer.AddTags(htmp);
            hisEnginer.UpdateTags(changedhistag);

            if (db.HisDatabase != null)
            {
                mHisDatabase.Setting = db.HisDatabase.Setting;
            }

            //hisEnginer.Resume();

            //
            if (!mSecurityRunner.Document.Equals(db.Security))
            {
                mSecurityRunner.Document = db.Security;
                issecuritychanged        = true;
            }

            CurrentDatabaseVersion = db.Version;
            //CurrentDatabase = db.Name;
            CurrentDatabaseLastUpdateTime = mRealDatabase.UpdateTime;

            //RegistorInterface();
            sw.Stop();
            LoggerService.Service.Info("ReStartDatabase", "初始化数据库" + mDatabaseName + " 耗时: " + sw.ElapsedMilliseconds.ToString() + " ms");


            NotifyDatabaseChanged(ischanged, hischanged, issecuritychanged);

            DriverManager.Manager.NotifyRealTagChanged(ltmp.ToDictionary(e => e.Id, e => e.LinkAddress), changedrealtag.ToDictionary(e => e.Id, e => e.LinkAddress));
            DriverManager.Manager.NotifyHisTagChanged(htmp.Select(e => e.Id), changedhistag.Select(e => e.Id));


            LoggerService.Service.Info("ReStartDatabase", "热启动数据库完成", ConsoleColor.DarkYellow);
        }