Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
cdy816
Mars
提交
831de722
Mars
项目概览
cdy816
/
Mars
通知
3
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
Mars
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
831de722
编写于
8月 17, 2020
作者:
cdy816
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
RDDC 功能更新
上级
72b418e0
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
364 addition
and
131 deletion
+364
-131
Common/Cdy.Tag/DatabaseSerise.cs
Common/Cdy.Tag/DatabaseSerise.cs
+18
-0
RunTime/DBRuntime/His/Compress/CompressEnginer2.cs
RunTime/DBRuntime/His/Compress/CompressEnginer2.cs
+20
-15
RunTime/DBRuntime/His/HisEnginer2.cs
RunTime/DBRuntime/His/HisEnginer2.cs
+53
-67
RunTime/DBRuntime/His/SeriseEnginer2.cs
RunTime/DBRuntime/His/SeriseEnginer2.cs
+33
-37
RunTime/DBRuntime/RDDC/DataSync.cs
RunTime/DBRuntime/RDDC/DataSync.cs
+125
-0
RunTime/DBRuntime/RDDC/RDDCManager.cs
RunTime/DBRuntime/RDDC/RDDCManager.cs
+46
-10
RunTime/DBRuntime/Runner.cs
RunTime/DBRuntime/Runner.cs
+69
-2
未找到文件。
Common/Cdy.Tag/DatabaseSerise.cs
浏览文件 @
831de722
...
@@ -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
...
...
...
RunTime/DBRuntime/His/Compress/CompressEnginer2.cs
浏览文件 @
831de722
...
@@ -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
...
...
...
RunTime/DBRuntime/His/HisEnginer2.cs
浏览文件 @
831de722
...
@@ -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
...
...
...
RunTime/DBRuntime/His/SeriseEnginer2.cs
浏览文件 @
831de722
...
@@ -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>
p
rivate
void
Init
()
p
ublic
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
...
}
}
...
...
RunTime/DBRuntime/RDDC/DataSync.cs
0 → 100644
浏览文件 @
831de722
//==============================================================
// 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
...
}
}
RunTime/DBRuntime/RDDC/RDDCManager.cs
浏览文件 @
831de722
...
@@ -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>
...
...
RunTime/DBRuntime/Runner.cs
浏览文件 @
831de722
...
@@ -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.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录