提交 831de722 编写于 作者: cdy816's avatar cdy816

RDDC 功能更新

上级 72b418e0
...@@ -157,6 +157,24 @@ namespace Cdy.Tag ...@@ -157,6 +157,24 @@ namespace Cdy.Tag
new RealDatabaseSerise() { Database = Dbase.RealDatabase }.Save(); new RealDatabaseSerise() { Database = Dbase.RealDatabase }.Save();
new HisDatabaseSerise() { Database = Dbase.HisDatabase }.Save(); new HisDatabaseSerise() { Database = Dbase.HisDatabase }.Save();
new SecuritySerise() { Document = Dbase.Security }.Save(); new SecuritySerise() { Document = Dbase.Security }.Save();
SaveRDDCSecurity(Dbase.Name);
}
/// <summary>
///
/// </summary>
/// <param name="databaseName"></param>
private void SaveRDDCSecurity(string databaseName)
{
string sfile = PathHelper.helper.GetDataPath(databaseName, "RDDC.cfg");
if(!System.IO.File.Exists(sfile))
{
XElement xx = new XElement("RDDC");
xx.SetAttributeValue("Enable", false);
xx.SetAttributeValue("Port", 7000);
xx.SetAttributeValue("RemoteIp", "127.0.0.1");
xx.Save(sfile);
}
} }
#endregion ...Methods... #endregion ...Methods...
......
...@@ -19,7 +19,7 @@ namespace Cdy.Tag ...@@ -19,7 +19,7 @@ namespace Cdy.Tag
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>
public class CompressEnginer2 : IDataCompress2 public class CompressEnginer2 : IDataCompress2,IDisposable
{ {
#region ... Variables ... #region ... Variables ...
...@@ -84,7 +84,9 @@ namespace Cdy.Tag ...@@ -84,7 +84,9 @@ namespace Cdy.Tag
/// </summary> /// </summary>
public void Init() public void Init()
{ {
mHisTagService = ServiceLocator.Locator.Resolve<IHisEngine2>();
CompressMemory2.TagCountPerMemory = TagCountOneFile; CompressMemory2.TagCountPerMemory = TagCountOneFile;
foreach (var vm in mTargetMemorys) foreach (var vm in mTargetMemorys)
{ {
vm.Value.Dispose(); vm.Value.Dispose();
...@@ -146,15 +148,12 @@ namespace Cdy.Tag ...@@ -146,15 +148,12 @@ namespace Cdy.Tag
public void Start() public void Start()
{ {
mIsClosed = false; mIsClosed = false;
mHisTagService = ServiceLocator.Locator.Resolve<IHisEngine2>(); //Init();
Init();
resetEvent = new ManualResetEvent(false); resetEvent = new ManualResetEvent(false);
closedEvent = new ManualResetEvent(false); closedEvent = new ManualResetEvent(false);
mCompressThread = new Thread(ThreadPro); mCompressThread = new Thread(ThreadPro);
mCompressThread.IsBackground = true; mCompressThread.IsBackground = true;
mCompressThread.Start(); mCompressThread.Start();
} }
/// <summary> /// <summary>
...@@ -166,18 +165,8 @@ namespace Cdy.Tag ...@@ -166,18 +165,8 @@ namespace Cdy.Tag
resetEvent.Set(); resetEvent.Set();
closedEvent.WaitOne(); closedEvent.WaitOne();
mSourceMemory = null;
mHisTagService = null;
resetEvent.Dispose(); resetEvent.Dispose();
closedEvent.Dispose(); closedEvent.Dispose();
foreach(var vv in mTargetMemorys)
{
while (vv.Value.IsBusy()) Thread.Sleep(1);
vv.Value.Dispose();
}
mTargetMemorys.Clear();
} }
/// <summary> /// <summary>
...@@ -284,6 +273,22 @@ namespace Cdy.Tag ...@@ -284,6 +273,22 @@ namespace Cdy.Tag
} }
/// <summary>
///
/// </summary>
public void Dispose()
{
foreach (var vv in mTargetMemorys)
{
while (vv.Value.IsBusy()) Thread.Sleep(1);
vv.Value.Dispose();
}
mTargetMemorys.Clear();
mSourceMemory = null;
mHisTagService = null;
}
#endregion ...Methods... #endregion ...Methods...
#region ... Interfaces ... #region ... Interfaces ...
......
...@@ -20,7 +20,7 @@ namespace Cdy.Tag ...@@ -20,7 +20,7 @@ namespace Cdy.Tag
/// <summary> /// <summary>
/// 历史数据引擎2 /// 历史数据引擎2
/// </summary> /// </summary>
public class HisEnginer2 : IHisEngine2 public class HisEnginer2 : IHisEngine2,IDisposable
{ {
#region ... Variables ... #region ... Variables ...
...@@ -238,9 +238,7 @@ namespace Cdy.Tag ...@@ -238,9 +238,7 @@ namespace Cdy.Tag
sw.Start(); sw.Start();
if (mRealEnginer != null) if (mRealEnginer != null)
{ {
//if (mManager == null)
// mManager = new Cdy.Tag.HisDatabaseSerise().Load();
mLastProcesser = new TimerMemoryCacheProcesser2() { Id = 0 }; mLastProcesser = new TimerMemoryCacheProcesser2() { Id = 0 };
mRecordTimerProcesser.Clear(); mRecordTimerProcesser.Clear();
mRecordTimerProcesser.Add(mLastProcesser); mRecordTimerProcesser.Add(mLastProcesser);
...@@ -333,6 +331,12 @@ namespace Cdy.Tag ...@@ -333,6 +331,12 @@ namespace Cdy.Tag
} }
long ltmp = sw.ElapsedMilliseconds; long ltmp = sw.ElapsedMilliseconds;
AllocMemory(); AllocMemory();
if (LogManager != null)
{
LogManager.InitHeadData();
}
sw.Stop(); sw.Stop();
LoggerService.Service.Info("HisEnginer", "生成对象耗时:"+ltmp+" 内存分配耗时:"+(sw.ElapsedMilliseconds-ltmp)); LoggerService.Service.Info("HisEnginer", "生成对象耗时:"+ltmp+" 内存分配耗时:"+(sw.ElapsedMilliseconds-ltmp));
} }
...@@ -635,12 +639,9 @@ namespace Cdy.Tag ...@@ -635,12 +639,9 @@ namespace Cdy.Tag
var abuffer = new HisDataMemoryBlock(ss) { TimerAddress=0, ValueAddress = valueOffset, QualityAddress = qulityOffset,Id=1 }; var abuffer = new HisDataMemoryBlock(ss) { TimerAddress=0, ValueAddress = valueOffset, QualityAddress = qulityOffset,Id=1 };
var bbuffer = new HisDataMemoryBlock(ss) { TimerAddress = 0, ValueAddress = valueOffset, QualityAddress = qulityOffset,Id=2 }; var bbuffer = new HisDataMemoryBlock(ss) { TimerAddress = 0, ValueAddress = valueOffset, QualityAddress = qulityOffset,Id=2 };
//abuffer.Clear();
//bbuffer.Clear();
mMergeMemory1.AddTagAddress(vv.Value.Id, abuffer); mMergeMemory1.AddTagAddress(vv.Value.Id, abuffer);
mMergeMemory2.AddTagAddress(vv.Value.Id, bbuffer); mMergeMemory2.AddTagAddress(vv.Value.Id, bbuffer);
// addressoffset.Add(vv.Value.Id, new Tuple<long, int, int,int>(storeHeadSize,valueOffset, qulityOffset,ss));
storeHeadSize += ss; storeHeadSize += ss;
var css = CalCachDatablockSize(vv.Value.TagType, vv.Value.Type, blockheadsize, out valueOffset,out qulityOffset); var css = CalCachDatablockSize(vv.Value.TagType, vv.Value.Type, blockheadsize, out valueOffset,out qulityOffset);
...@@ -650,23 +651,12 @@ namespace Cdy.Tag ...@@ -650,23 +651,12 @@ namespace Cdy.Tag
vv.Value.HisValueMemory1 = cbuffer; vv.Value.HisValueMemory1 = cbuffer;
vv.Value.HisValueMemory2 = dbuffer; vv.Value.HisValueMemory2 = dbuffer;
//cbuffer.Clear();
//dbuffer.Clear();
mCachMemory1.AddTagAddress(vv.Value.Id, cbuffer); mCachMemory1.AddTagAddress(vv.Value.Id, cbuffer);
mCachMemory2.AddTagAddress(vv.Value.Id, dbuffer); mCachMemory2.AddTagAddress(vv.Value.Id, dbuffer);
//vv.Value.BlockHeadStartAddr = cachHeadSize;
//vv.Value.TimerValueStartAddr = vv.Value.BlockHeadStartAddr;
//vv.Value.HisValueStartAddr = vv.Value.BlockHeadStartAddr + valueOffset;
//vv.Value.HisQulityStartAddr = vv.Value.BlockHeadStartAddr + qulityOffset;
vv.Value.DataSize = css; vv.Value.DataSize = css;
cachHeadSize += css; cachHeadSize += css;
//vv.Value.Init();
} }
...@@ -676,25 +666,10 @@ namespace Cdy.Tag ...@@ -676,25 +666,10 @@ namespace Cdy.Tag
CurrentMemory = mCachMemory1; CurrentMemory = mCachMemory1;
ClearMemoryHisData(mCachMemory1);
ClearMemoryHisData(mCachMemory2);
ClearMemoryHisData(mMergeMemory1);
ClearMemoryHisData(mMergeMemory2);
//mCachMemory1.Clear();
//mCachMemory2.Clear();
//mMergeMemory.Clear();
} }
///// <summary>
/////
///// </summary>
//private void PrepareForReadyMemory()
//{
// //写入时间
// HisRunTag.StartTime = mLastProcessTime;
//}
private string FormateDatetime(DateTime datetime) private string FormateDatetime(DateTime datetime)
{ {
return datetime.ToString("yyyy-MM-dd HH:mm:ss.fff"); return datetime.ToString("yyyy-MM-dd HH:mm:ss.fff");
...@@ -729,7 +704,17 @@ namespace Cdy.Tag ...@@ -729,7 +704,17 @@ namespace Cdy.Tag
{ {
mIsClosed = false; mIsClosed = false;
mMegerProcessIsClosed = false; mMegerProcessIsClosed = false;
LoggerService.Service.Info("Record", "历史变量个数: " + this.mHisTags.Count);
ClearMemoryHisData(mCachMemory1);
ClearMemoryHisData(mCachMemory2);
ClearMemoryHisData(mMergeMemory1);
ClearMemoryHisData(mMergeMemory2);
mCachMemory1.MakeMemoryNoBusy();
mCachMemory2.MakeMemoryNoBusy();
mMergeMemory1.MakeMemoryNoBusy();
mMergeMemory2.MakeMemoryNoBusy();
foreach (var vv in mRecordTimerProcesser) foreach (var vv in mRecordTimerProcesser)
{ {
...@@ -741,13 +726,6 @@ namespace Cdy.Tag ...@@ -741,13 +726,6 @@ namespace Cdy.Tag
vv.Start(); vv.Start();
} }
LoggerService.Service.Info("Record", "历史变量个数: " + this.mHisTags.Count);
mCachMemory1.MakeMemoryNoBusy();
mCachMemory2.MakeMemoryNoBusy();
mMergeMemory1.MakeMemoryNoBusy();
mMergeMemory2.MakeMemoryNoBusy();
mLastProcessTime = DateTime.Now; mLastProcessTime = DateTime.Now;
HisRunTag.StartTime = mLastProcessTime; HisRunTag.StartTime = mLastProcessTime;
CurrentMemory = mCachMemory1; CurrentMemory = mCachMemory1;
...@@ -758,7 +736,6 @@ namespace Cdy.Tag ...@@ -758,7 +736,6 @@ namespace Cdy.Tag
if (LogManager != null) if (LogManager != null)
{ {
LogManager.InitHeadData();
LogManager.Start(); LogManager.Start();
} }
...@@ -819,8 +796,7 @@ namespace Cdy.Tag ...@@ -819,8 +796,7 @@ namespace Cdy.Tag
{ {
resetEvent.WaitOne(); resetEvent.WaitOne();
resetEvent.Reset(); resetEvent.Reset();
//if (mIsClosed) return;
if(mNeedSnapAllTag) if(mNeedSnapAllTag)
{ {
SnapeAllTag(); SnapeAllTag();
...@@ -1133,32 +1109,13 @@ namespace Cdy.Tag ...@@ -1133,32 +1109,13 @@ namespace Cdy.Tag
foreach (var vv in mRecordTimerProcesser) foreach (var vv in mRecordTimerProcesser)
{ {
vv.Stop(); vv.Stop();
vv.Dispose();
} }
mRecordTimerProcesser.Clear(); foreach (var vv in mValueChangedProcesser)
foreach(var vv in mValueChangedProcesser)
{ {
vv.Stop(); vv.Stop();
vv.Dispose();
} }
mValueChangedProcesser.Clear();
if (LogManager != null) LogManager.Stop();
SubmitLastDataToSave(); SubmitLastDataToSave();
if (LogManager != null) LogManager.Stop();
mIsClosed = true;
mLastValueChangedProcesser = null;
mLastProcesser = null;
mHisTags.Clear();
mCachMemory1?.Dispose();
mCachMemory2?.Dispose();
mMergeMemory1?.Dispose();
mMergeMemory2?.Dispose();
} }
/// <summary> /// <summary>
...@@ -1211,7 +1168,36 @@ namespace Cdy.Tag ...@@ -1211,7 +1168,36 @@ namespace Cdy.Tag
return mHisTags.Values.ToList(); return mHisTags.Values.ToList();
} }
/// <summary>
///
/// </summary>
public void Dispose()
{
foreach (var vv in mRecordTimerProcesser)
{
vv.Dispose();
}
mRecordTimerProcesser.Clear();
foreach (var vv in mValueChangedProcesser)
{
vv.Stop();
vv.Dispose();
}
mValueChangedProcesser.Clear();
mLastValueChangedProcesser = null;
mLastProcesser = null;
mHisTags.Clear();
mCachMemory1?.Dispose();
mCachMemory2?.Dispose();
mMergeMemory1?.Dispose();
mMergeMemory2?.Dispose();
}
#endregion ...Methods... #endregion ...Methods...
......
...@@ -38,7 +38,7 @@ namespace Cdy.Tag ...@@ -38,7 +38,7 @@ namespace Cdy.Tag
/// <summary> /// <summary>
/// 序列话引擎 /// 序列话引擎
/// </summary> /// </summary>
public class SeriseEnginer2 : IDataSerialize2 public class SeriseEnginer2 : IDataSerialize2, IDisposable
{ {
#region ... Variables ... #region ... Variables ...
...@@ -128,7 +128,7 @@ namespace Cdy.Tag ...@@ -128,7 +128,7 @@ namespace Cdy.Tag
/// <summary> /// <summary>
/// 当前工作的历史记录路径 /// 当前工作的历史记录路径
/// </summary> /// </summary>
public static string HisDataPath{ get; set; } public static string HisDataPath { get; set; }
#endregion ...Properties... #endregion ...Properties...
...@@ -143,7 +143,7 @@ namespace Cdy.Tag ...@@ -143,7 +143,7 @@ namespace Cdy.Tag
{ {
if (string.IsNullOrEmpty(HisDataPathPrimary) && string.IsNullOrEmpty(HisDataPathBack)) if (string.IsNullOrEmpty(HisDataPathPrimary) && string.IsNullOrEmpty(HisDataPathBack))
{ {
return PathHelper.helper.GetDataPath(this.DatabaseName,"HisData"); return PathHelper.helper.GetDataPath(this.DatabaseName, "HisData");
} }
else else
{ {
...@@ -161,7 +161,7 @@ namespace Cdy.Tag ...@@ -161,7 +161,7 @@ namespace Cdy.Tag
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>
private void Init() public void Init()
{ {
DataFileSeriserManager.manager.Init(); DataFileSeriserManager.manager.Init();
CompressUnitManager2.Manager.Init(); CompressUnitManager2.Manager.Init();
...@@ -182,23 +182,11 @@ namespace Cdy.Tag ...@@ -182,23 +182,11 @@ namespace Cdy.Tag
} }
} }
foreach(var vv in mSeriserFiles) foreach (var vv in mSeriserFiles)
{ {
vv.Value.FileWriter = DataFileSeriserManager.manager.GetSeriser(DataSeriser).New(); vv.Value.FileWriter = DataFileSeriserManager.manager.GetSeriser(DataSeriser).New();
vv.Value.Init(); vv.Value.Init();
} }
//var scount = tagCont / TagCountOneFile;
//scount = tagCont % TagCountOneFile > 0 ? scount + 1 : scount;
//mSeriseFile = new SeriseFileItem[scount];
//for(int i=0;i<mSeriseFile.Length;i++)
//{
// mSeriseFile[i] = new SeriseFileItem() { FileDuration = FileDuration, BlockDuration = BlockDuration, TagCountOneFile = TagCountOneFile, DatabaseName = DatabaseName, Id = i };
// mSeriseFile[i].FileWriter = DataFileSeriserManager.manager.GetSeriser(DataSeriser).New();
// mSeriseFile[i].Init();
//}
} }
/// <summary> /// <summary>
...@@ -207,7 +195,7 @@ namespace Cdy.Tag ...@@ -207,7 +195,7 @@ namespace Cdy.Tag
public void Start() public void Start()
{ {
mIsClosed = false; mIsClosed = false;
Init(); //Init();
resetEvent = new ManualResetEvent(false); resetEvent = new ManualResetEvent(false);
closedEvent = new ManualResetEvent(false); closedEvent = new ManualResetEvent(false);
mCompressThread = new Thread(ThreadPro); mCompressThread = new Thread(ThreadPro);
...@@ -223,14 +211,7 @@ namespace Cdy.Tag ...@@ -223,14 +211,7 @@ namespace Cdy.Tag
mIsClosed = true; mIsClosed = true;
resetEvent.Set(); resetEvent.Set();
closedEvent.WaitOne(); closedEvent.WaitOne();
if (mSeriserFiles != null)
{
foreach (var vv in mSeriserFiles)
{
vv.Value.Dispose();
}
mSeriserFiles.Clear();
}
resetEvent.Dispose(); resetEvent.Dispose();
closedEvent.Dispose(); closedEvent.Dispose();
...@@ -293,37 +274,52 @@ namespace Cdy.Tag ...@@ -293,37 +274,52 @@ namespace Cdy.Tag
2. 拷贝数据块 2. 拷贝数据块
3. 更新数据块指针 3. 更新数据块指针
*/ */
//#if DEBUG //#if DEBUG
Stopwatch sw = new Stopwatch(); Stopwatch sw = new Stopwatch();
sw.Start(); sw.Start();
LoggerService.Service.Info("SeriseEnginer", "********开始执行存储********",ConsoleColor.Cyan); LoggerService.Service.Info("SeriseEnginer", "********开始执行存储********", ConsoleColor.Cyan);
//#endif //#endif
HisDataPath = SelectHisDataPath(); HisDataPath = SelectHisDataPath();
List<CompressMemory2> mtmp; List<CompressMemory2> mtmp;
lock(mWaitForProcessMemory) lock (mWaitForProcessMemory)
{ {
mtmp = mWaitForProcessMemory.Values.ToList(); mtmp = mWaitForProcessMemory.Values.ToList();
mWaitForProcessMemory.Clear(); mWaitForProcessMemory.Clear();
} }
foreach(var vv in mtmp) foreach (var vv in mtmp)
{ {
mSeriserFiles[vv.Id].SaveToFile(vv, vv.CurrentTime); mSeriserFiles[vv.Id].SaveToFile(vv, vv.CurrentTime);
vv.Clear(); vv.Clear();
vv.MakeMemoryNoBusy(); vv.MakeMemoryNoBusy();
} }
//#if DEBUG //#if DEBUG
sw.Stop(); sw.Stop();
LoggerService.Service.Info("SeriseEnginer", ">>>>>>>>>完成执行存储>>>>>>> Count:"+ mtmp.Count + " ElapsedMilliseconds:" + sw.ElapsedMilliseconds, ConsoleColor.Cyan); LoggerService.Service.Info("SeriseEnginer", ">>>>>>>>>完成执行存储>>>>>>> Count:" + mtmp.Count + " ElapsedMilliseconds:" + sw.ElapsedMilliseconds, ConsoleColor.Cyan);
//#endif //#endif
} }
#endregion ...Methods... /// <summary>
///
/// </summary>
public void Dispose()
{
if (mSeriserFiles != null)
{
foreach (var vv in mSeriserFiles)
{
vv.Value.Dispose();
}
mSeriserFiles.Clear();
}
}
#region ... Interfaces ... #endregion ...Methods...
#endregion ...Interfaces... #region ... Interfaces ...
#endregion ...Interfaces...
} }
......
//==============================================================
// Copyright (C) 2020 Chongdaoyang Inc. All rights reserved.
//
//==============================================================
// Create by 种道洋 at 2020/8/17 20:23:20 .
// Version 1.0
// CDYWORK
//==============================================================
using Cdy.Tag;
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
namespace DBRuntime.RDDC
{
/// <summary>
///
/// </summary>
public class DataSync
{
#region ... Variables ...
private Thread mScanThread;
private RDDCClient mClient;
private bool mIsStoped = false;
#endregion ...Variables...
#region ... Events ...
#endregion ...Events...
#region ... Constructor...
#endregion ...Constructor...
#region ... Properties ...
/// <summary>
///
/// </summary>
public RDDCClient Client
{
get
{
return mClient;
}
set
{
mClient = value;
}
}
#endregion ...Properties...
#region ... Methods ...
/// <summary>
///
/// </summary>
public void Start()
{
mScanThread = new Thread(ThreadPro);
mScanThread.IsBackground = true;
mScanThread.Start();
}
/// <summary>
///
/// </summary>
private void ThreadPro()
{
while(!mIsStoped)
{
if (mClient.IsConnected)
{
SyncData();
Thread.Sleep(100);
}
else
{
Thread.Sleep(500);
}
}
}
/// <summary>
///
/// </summary>
private void SyncData()
{
try
{
var realenginer = ServiceLocator.Locator.Resolve<IRealTagConsumer>();
var block = mClient.SyncRealData();
var size = block.ReadInt();
Buffer.BlockCopy(block.Array, block.ArrayOffset + block.ReaderIndex, (realenginer as RealEnginer).Memory, 0, size);
}
catch(Exception ex)
{
LoggerService.Service.Erro("DataSync", ex.Message);
}
}
/// <summary>
///
/// </summary>
public void Stop()
{
mIsStoped = true;
}
#endregion ...Methods...
#region ... Interfaces ...
#endregion ...Interfaces...
}
}
...@@ -14,6 +14,7 @@ using System.Collections.Generic; ...@@ -14,6 +14,7 @@ using System.Collections.Generic;
using System.Text; using System.Text;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Xml.Linq;
namespace DBRuntime namespace DBRuntime
{ {
...@@ -30,6 +31,7 @@ namespace DBRuntime ...@@ -30,6 +31,7 @@ namespace DBRuntime
private RDDCClient mClient; private RDDCClient mClient;
private DataSync mSync;
private bool mIsInited = false; private bool mIsInited = false;
...@@ -52,6 +54,11 @@ namespace DBRuntime ...@@ -52,6 +54,11 @@ namespace DBRuntime
#region ... Properties ... #region ... Properties ...
/// <summary>
///
/// </summary>
public bool EnableRDDC { get; set; }
/// <summary> /// <summary>
/// 当前状态 /// 当前状态
/// </summary> /// </summary>
...@@ -68,7 +75,7 @@ namespace DBRuntime ...@@ -68,7 +75,7 @@ namespace DBRuntime
public int Port { get; set; } public int Port { get; set; }
/// <summary> /// <summary>
/// /// 备机IP
/// </summary> /// </summary>
public string RemoteIp { get; set; } public string RemoteIp { get; set; }
...@@ -81,19 +88,46 @@ namespace DBRuntime ...@@ -81,19 +88,46 @@ namespace DBRuntime
#region ... Methods ... #region ... Methods ...
/// <summary>
///
/// </summary>
/// <param name="databaseName"></param>
public void Load(string databaseName)
{
string spath = PathHelper.helper.GetDataPath(databaseName, "RDDC.cfg");
if(System.IO.File.Exists(spath))
{
XElement xx = XElement.Load(spath);
EnableRDDC = bool.Parse(xx.Attribute("Enable")?.Value);
this.Port = int.Parse(xx.Attribute("Port")?.Value);
this.RemoteIp = xx.Attribute("RemoteIp")?.Value;
}
}
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>
public void Start() public void Start()
{ {
mIsInited = false; mIsInited = false;
mServer = new RDDCDataService(); if (EnableRDDC)
mServer.Start(Port); {
mServer = new RDDCDataService();
mServer.Start(Port);
mClient = new RDDCClient();
mClient.Connect(RemoteIp, Port);
mClient.PropertyChanged += MClient_PropertyChanged;
mClient = new RDDCClient(); mSync = new DataSync() { Client = mClient };
mClient.Connect(RemoteIp, Port); mSync.Start();
mClient.PropertyChanged += MClient_PropertyChanged; CheckWorkState();
CheckWorkState(); }
else
{
CurrentState = WorkState.Primary;
}
mIsInited = true; mIsInited = true;
} }
...@@ -116,10 +150,15 @@ namespace DBRuntime ...@@ -116,10 +150,15 @@ namespace DBRuntime
/// </summary> /// </summary>
public void Stop() public void Stop()
{ {
mSync.Stop();
mServer.Stop(); mServer.Stop();
mClient.PropertyChanged -= MClient_PropertyChanged;
mClient.Close(); mClient.Close();
} }
/// <summary>
///
/// </summary>
private void ProcessClientConnectChanged() private void ProcessClientConnectChanged()
{ {
if (!mClient.IsConnected) if (!mClient.IsConnected)
...@@ -170,9 +209,6 @@ namespace DBRuntime ...@@ -170,9 +209,6 @@ namespace DBRuntime
} }
} }
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>
......
...@@ -85,6 +85,25 @@ namespace Cdy.Tag ...@@ -85,6 +85,25 @@ namespace Cdy.Tag
ValueConvertManager.manager.Registor(new LinerConvert()); ValueConvertManager.manager.Registor(new LinerConvert());
} }
/// <summary>
///
/// </summary>
public Runner()
{
RDDCManager.Manager.SwitchWorkStateAction = new Func<WorkState, bool>((state) =>
{
if(state == WorkState.Primary)
{
return SwitchToPrimary();
}
else
{
return SwitchToStandby();
}
});
}
#endregion ...Constructor... #endregion ...Constructor...
#region ... Properties ... #region ... Properties ...
...@@ -157,7 +176,10 @@ namespace Cdy.Tag ...@@ -157,7 +176,10 @@ namespace Cdy.Tag
CurrentDatabaseVersion = this.mRealDatabase.Version; CurrentDatabaseVersion = this.mRealDatabase.Version;
CurrentDatabase = mRealDatabase.Name; CurrentDatabase = mRealDatabase.Name;
CurrentDatabaseLastUpdateTime = mRealDatabase.UpdateTime; CurrentDatabaseLastUpdateTime = mRealDatabase.UpdateTime;
sw.Stop();
RDDCManager.Manager.Load(mDatabaseName);
sw.Stop();
LoggerService.Service.Info("LoadDatabase", "load " +mDatabaseName +" take " + sw.ElapsedMilliseconds.ToString() +" ms"); LoggerService.Service.Info("LoadDatabase", "load " +mDatabaseName +" take " + sw.ElapsedMilliseconds.ToString() +" ms");
} }
...@@ -256,12 +278,14 @@ namespace Cdy.Tag ...@@ -256,12 +278,14 @@ namespace Cdy.Tag
compressEnginer = new CompressEnginer2(); compressEnginer = new CompressEnginer2();
compressEnginer.TagCountOneFile = mHisDatabase.Setting.TagCountOneFile; compressEnginer.TagCountOneFile = mHisDatabase.Setting.TagCountOneFile;
compressEnginer.Init();
seriseEnginer = new SeriseEnginer2() { DatabaseName = database }; seriseEnginer = new SeriseEnginer2() { DatabaseName = database };
seriseEnginer.FileDuration = mHisDatabase.Setting.FileDataDuration; seriseEnginer.FileDuration = mHisDatabase.Setting.FileDataDuration;
seriseEnginer.BlockDuration = mHisDatabase.Setting.DataBlockDuration; seriseEnginer.BlockDuration = mHisDatabase.Setting.DataBlockDuration;
seriseEnginer.TagCountOneFile = mHisDatabase.Setting.TagCountOneFile; seriseEnginer.TagCountOneFile = mHisDatabase.Setting.TagCountOneFile;
seriseEnginer.DataSeriser = mHisDatabase.Setting.DataSeriser; seriseEnginer.DataSeriser = mHisDatabase.Setting.DataSeriser;
seriseEnginer.Init();
querySerivce = new QuerySerivce(this.mDatabaseName); querySerivce = new QuerySerivce(this.mDatabaseName);
...@@ -332,6 +356,7 @@ namespace Cdy.Tag ...@@ -332,6 +356,7 @@ namespace Cdy.Tag
public async void StartAsync(string database,int port = 14330) public async void StartAsync(string database,int port = 14330)
{ {
LoggerService.Service.Info("Runner", " 数据库 " + database+" 开始启动"); LoggerService.Service.Info("Runner", " 数据库 " + database+" 开始启动");
RDDCManager.Manager.Start(); RDDCManager.Manager.Start();
var re = await InitAsync(database); var re = await InitAsync(database);
...@@ -353,6 +378,44 @@ namespace Cdy.Tag ...@@ -353,6 +378,44 @@ namespace Cdy.Tag
LoggerService.Service.Info("Runner", " 数据库 " + database + " 启动完成"); LoggerService.Service.Info("Runner", " 数据库 " + database + " 启动完成");
} }
/// <summary>
///
/// </summary>
private bool SwitchToStandby()
{
try
{
hisEnginer.Stop();
compressEnginer.Stop();
seriseEnginer.Stop();
DriverManager.Manager.Stop();
}
catch
{
return false;
}
return true;
}
/// <summary>
///
/// </summary>
private bool SwitchToPrimary()
{
try
{
DriverManager.Manager.Start();
seriseEnginer.Start();
compressEnginer.Start();
hisEnginer.Start();
}
catch
{
return false;
}
return true;
}
/// <summary> /// <summary>
/// 停止 /// 停止
...@@ -364,7 +427,11 @@ namespace Cdy.Tag ...@@ -364,7 +427,11 @@ namespace Cdy.Tag
DriverManager.Manager.Stop(); DriverManager.Manager.Stop();
compressEnginer.Stop(); compressEnginer.Stop();
seriseEnginer.Stop(); seriseEnginer.Stop();
// mSecurityRunner.Stop();
hisEnginer.Dispose();
compressEnginer.Dispose();
seriseEnginer.Dispose();
mIsStarted = false; mIsStarted = false;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册