提交 814d25a8 编写于 作者: cdy816's avatar cdy816

Merge branch 'master' of https://github.com/cdy816/mars

......@@ -67,10 +67,13 @@ namespace Cdy.Tag
get { return mIsConnected; }
set
{
mIsConnected = value;
if (PropertyChanged != null)
if (mIsConnected != value)
{
Task.Run(() => { PropertyChanged(this, new PropertyChangedEventArgs("IsConnected")); });
mIsConnected = value;
if (PropertyChanged != null)
{
Task.Run(() => { PropertyChanged(this, new PropertyChangedEventArgs("IsConnected")); });
}
}
}
}
......
......@@ -330,15 +330,17 @@ namespace Cdy.Tag
internal void Registor(IChannelHandlerContext channel)
{
string sname = GetClientId(channel);
if (!mClients.ContainsKey(sname))
lock (mClients)
{
mClients[sname] = channel;
}
else
{
mClients.Add(sname, channel);
if (!mClients.ContainsKey(sname))
{
mClients[sname] = channel;
}
else
{
mClients.Add(sname, channel);
}
}
OnClientConnected(sname);
}
......
......@@ -2,7 +2,7 @@
"profiles": {
"DBInRun": {
"commandName": "Executable",
"executablePath": "C:\\Users\\chongdaoyang\\source\\repos\\mars\\Output\\DBInRun.exe"
"executablePath": "C:\\Users\\cdy81\\source\\repos\\mars\\Output\\DBInRun.exe"
}
}
}
\ No newline at end of file
......@@ -92,7 +92,8 @@ namespace Cdy.Tag
/// </summary>
public void Start()
{
foreach(var vv in mDrivers.Values)
LoggerService.Service.Info("DriverManager", "start to Start");
foreach (var vv in mDrivers.Values)
{
vv.Start(mTagDriverService);
}
......@@ -103,6 +104,7 @@ namespace Cdy.Tag
/// </summary>
public void Stop()
{
LoggerService.Service.Info("DriverManager", "start to stop");
foreach (var vv in mDrivers.Values)
{
vv.Stop();
......
......@@ -149,6 +149,7 @@ namespace Cdy.Tag
/// </summary>
public void Start()
{
LoggerService.Service.Info("CompressEnginer", "start to Start");
mIsClosed = false;
//Init();
resetEvent = new ManualResetEvent(false);
......@@ -163,6 +164,8 @@ namespace Cdy.Tag
/// </summary>
public void Stop()
{
LoggerService.Service.Info("CompressEnginer", "start to stop");
mIsClosed = true;
resetEvent.Set();
closedEvent.WaitOne();
......
......@@ -736,6 +736,7 @@ namespace Cdy.Tag
/// </summary>
public void Start()
{
LoggerService.Service.Info("HisEnginer", "start to Start");
mIsClosed = false;
mMegerProcessIsClosed = false;
LoggerService.Service.Info("Record", "历史变量个数: " + this.mHisTags.Count);
......@@ -1133,9 +1134,10 @@ namespace Cdy.Tag
/// </summary>
public void Stop()
{
mRecordTimer.Stop();
LoggerService.Service.Info("HisEnginer", "start to stop");
if(mRecordTimer!=null)
{
mRecordTimer.Stop();
mRecordTimer.Elapsed -= MRecordTimer_Elapsed;
mRecordTimer.Dispose();
mRecordTimer = null;
......
......@@ -194,6 +194,7 @@ namespace Cdy.Tag
/// </summary>
public void Start()
{
LoggerService.Service.Info("SeriseEnginer", "start to Start");
mIsClosed = false;
//Init();
resetEvent = new ManualResetEvent(false);
......@@ -208,6 +209,7 @@ namespace Cdy.Tag
/// </summary>
public void Stop()
{
LoggerService.Service.Info("SeriseEnginer", "start to stop");
mIsClosed = true;
resetEvent.Set();
closedEvent.WaitOne();
......
......@@ -57,6 +57,11 @@ namespace DBRuntime.RDDC
}
/// <summary>
///
/// </summary>
public bool Enable { get; set; }
#endregion ...Properties...
#region ... Methods ...
......@@ -78,7 +83,7 @@ namespace DBRuntime.RDDC
{
while(!mIsStoped)
{
if (mClient.IsConnected)
if (mClient.IsConnected && Enable)
{
SyncData();
Thread.Sleep(100);
......@@ -98,9 +103,15 @@ namespace DBRuntime.RDDC
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);
if (realenginer != null)
{
var block = mClient.SyncRealData();
if (block != null)
{
var size = block.ReadInt();
Buffer.BlockCopy(block.Array, block.ArrayOffset + block.ReaderIndex, (realenginer as RealEnginer).Memory, 0, size);
}
}
}
catch(Exception ex)
{
......
......@@ -9,6 +9,7 @@
using Cdy.Tag;
using DotNetty.Buffers;
using DotNetty.Common;
using System;
using System.Collections.Generic;
using System.Diagnostics;
......@@ -69,6 +70,8 @@ namespace DBRuntime.RDDC
private IByteBuffer mRealDataSyncData;
private object mWorkStateLockObj = new object();
#endregion ...Variables...
#region ... Events ...
......@@ -153,21 +156,25 @@ namespace DBRuntime.RDDC
/// <returns></returns>
public DateTime? GetStartTime(int timeout = 5000)
{
var mb = GetBuffer(WorkStateFun,1);
mb.WriteByte(GetStartTimeFun);
mWorkStateEvent.Reset();
Send(mb);
try
lock (mWorkStateLockObj)
{
if (mWorkStateEvent.WaitOne(timeout))
var mb = GetBuffer(WorkStateFun, 1);
mb.WriteByte(GetStartTimeFun);
mWorkStateEvent.Reset();
Send(mb);
try
{
return DateTime.FromBinary(mWorkStateData.ReadLong());
if (mWorkStateEvent.WaitOne(timeout))
{
return DateTime.FromBinary(mWorkStateData.ReadLong());
}
}
}
finally
{
finally
{
}
}
return null;
}
......@@ -178,20 +185,23 @@ namespace DBRuntime.RDDC
/// <returns></returns>
public WorkState? GetWorkState(int timeout = 5000)
{
var mb = GetBuffer(WorkStateFun, 1);
mb.WriteByte(GetStateFun);
mWorkStateEvent.Reset();
Send(mb);
try
lock (mWorkStateLockObj)
{
if (mWorkStateEvent.WaitOne(timeout))
var mb = GetBuffer(WorkStateFun, 1);
mb.WriteByte(GetStateFun);
mWorkStateEvent.Reset();
Send(mb);
try
{
return (WorkState)mWorkStateData.ReadByte();
if (mWorkStateEvent.WaitOne(timeout))
{
return (WorkState)mWorkStateData.ReadByte();
}
}
}
finally
{
finally
{
}
}
return null;
}
......@@ -203,20 +213,23 @@ namespace DBRuntime.RDDC
/// <returns></returns>
public bool? SwitchToPrimary(int timeout = 5000)
{
var mb = GetBuffer(WorkStateFun, 1);
mb.WriteByte(ChangeToPrimaryFun);
mWorkStateEvent.Reset();
Send(mb);
try
lock (mWorkStateLockObj)
{
if (mWorkStateEvent.WaitOne(timeout))
var mb = GetBuffer(WorkStateFun, 1);
mb.WriteByte(ChangeToPrimaryFun);
mWorkStateEvent.Reset();
Send(mb);
try
{
return mWorkStateData.ReadByte()>0;
if (mWorkStateEvent.WaitOne(timeout))
{
return mWorkStateData.ReadByte() > 0;
}
}
}
finally
{
finally
{
}
}
return false;
}
......@@ -229,20 +242,23 @@ namespace DBRuntime.RDDC
/// <returns></returns>
public bool? SwitchToStandby(int timeout = 5000)
{
var mb = GetBuffer(WorkStateFun, 1);
mb.WriteByte(ChangeToStandbyFun);
mWorkStateEvent.Reset();
Send(mb);
try
lock (mWorkStateLockObj)
{
if (mWorkStateEvent.WaitOne(timeout))
var mb = GetBuffer(WorkStateFun, 1);
mb.WriteByte(ChangeToStandbyFun);
mWorkStateEvent.Reset();
Send(mb);
try
{
return mWorkStateData.ReadByte() > 0;
if (mWorkStateEvent.WaitOne(timeout))
{
return mWorkStateData.ReadByte() > 0;
}
}
}
finally
{
finally
{
}
}
return false;
}
......
......@@ -37,6 +37,12 @@ namespace DBRuntime
private object mLockObj = new object();
private WorkState mCurrentState = WorkState.Unknow;
private bool mIsClosed = false;
private Thread mScanThread;
#endregion ...Variables...
#region ... Events ...
......@@ -45,6 +51,9 @@ namespace DBRuntime
#region ... Constructor...
/// <summary>
///
/// </summary>
public RDDCManager()
{
......@@ -62,7 +71,25 @@ namespace DBRuntime
/// <summary>
/// 当前状态
/// </summary>
public WorkState CurrentState { get; set; } = WorkState.Unknow;
public WorkState CurrentState
{
get { return mCurrentState; }
set
{
mCurrentState = value;
if (mSync != null)
{
if (value == WorkState.Standby)
{
mSync.Enable = true;
}
else
{
mSync.Enable = false;
}
}
}
}
/// <summary>
///
......@@ -122,6 +149,11 @@ namespace DBRuntime
mSync = new DataSync() { Client = mClient };
mSync.Start();
//mScanThread = new Thread(ThreadPro);
//mScanThread.IsBackground = true;
//mScanThread.Start();
CheckWorkState();
}
else
......@@ -150,12 +182,30 @@ namespace DBRuntime
/// </summary>
public void Stop()
{
mIsClosed = true;
mSync.Stop();
mServer.Stop();
mClient.PropertyChanged -= MClient_PropertyChanged;
mClient.Close();
}
private void ThreadPro()
{
while (!mIsClosed)
{
if (mClient.NeedReConnected)
{
mClient.Connect(RemoteIp,Port);
Thread.Sleep(500);
}
else
{
Thread.Sleep(1000);
}
}
}
/// <summary>
///
/// </summary>
......@@ -164,7 +214,9 @@ namespace DBRuntime
if (!mClient.IsConnected)
{
if(CurrentState != WorkState.Primary)
SwitchTo(WorkState.Primary);
{
SwitchTo(WorkState.Primary);
}
}
else
{
......@@ -207,6 +259,9 @@ namespace DBRuntime
CurrentState = WorkState.Standby;
}
}
LoggerService.Service.Info("RDDCManager", "running in " + CurrentState.ToString(), ConsoleColor.Cyan);
}
/// <summary>
......@@ -219,7 +274,7 @@ namespace DBRuntime
{
if (state == WorkState.Standby)
{
if(mClient.SwitchToPrimary().Value)
if(mClient.SwitchToPrimary(60000).Value)
{
return SwitchTo(WorkState.Standby);
}
......@@ -230,7 +285,7 @@ namespace DBRuntime
}
else
{
if(mClient.SwitchToStandby().Value)
if(mClient.SwitchToStandby(60000).Value)
{
return SwitchTo(WorkState.Primary);
}
......@@ -261,6 +316,7 @@ namespace DBRuntime
/// <returns></returns>
public bool SwitchTo(WorkState state)
{
if (CurrentState == WorkState.Switching) return true;
lock (mLockObj)
{
var olds = CurrentState;
......
......@@ -7,6 +7,7 @@
// 种道洋
//==============================================================
using Cdy.Tag;
using DBRuntime.Api;
using DotNetty.Buffers;
using System;
......@@ -74,19 +75,21 @@ namespace DBRuntime.RDDC
break;
case ChangeToPrimary:
var re = ProcessSwichToPrimary();
Parent.AsyncCallback(client, ToByteBuffer(GetStartTime, re ? 1 : 0));
byte bval = re ? (byte)1 : (byte)0;
Parent.AsyncCallback(client, ToByteBuffer(FunId, bval));
break;
case ChangeToStandby:
re = ProcessSwichToStandby();
Parent.AsyncCallback(client, ToByteBuffer(GetStartTime, re ? 1 : 0));
bval = re ? (byte)1 : (byte)0;
Parent.AsyncCallback(client, ToByteBuffer(FunId, bval));
break;
case GetState:
var state = (byte)RDDCManager.Manager.CurrentState;
Parent.AsyncCallback(client, ToByteBuffer(GetStartTime, state));
Parent.AsyncCallback(client, ToByteBuffer(FunId, state));
break;
}
base.ProcessSingleData(client, data);
//base.ProcessSingleData(client, data);
}
/// <summary>
......@@ -103,7 +106,15 @@ namespace DBRuntime.RDDC
/// <returns></returns>
private bool ProcessSwichToPrimary()
{
return RDDCManager.Manager.SwitchTo(Cdy.Tag.WorkState.Primary);
try
{
LoggerService.Service.Info("WorkStateServer", "Receive remote call to switch to primary,Start to switch!", ConsoleColor.Yellow);
return RDDCManager.Manager.SwitchTo(Cdy.Tag.WorkState.Primary);
}
finally
{
LoggerService.Service.Info("WorkStateServer", "Completely to switch", ConsoleColor.Yellow);
}
}
/// <summary>
......@@ -112,7 +123,15 @@ namespace DBRuntime.RDDC
/// <returns></returns>
private bool ProcessSwichToStandby()
{
return RDDCManager.Manager.SwitchTo(Cdy.Tag.WorkState.Standby);
try
{
LoggerService.Service.Info("WorkStateServer", "Receive remote call to switch to standby!", ConsoleColor.Yellow);
return RDDCManager.Manager.SwitchTo(Cdy.Tag.WorkState.Standby);
}
finally
{
LoggerService.Service.Info("WorkStateServer", "Completely to switch", ConsoleColor.Yellow);
}
}
#endregion ...Methods...
......
......@@ -86,14 +86,30 @@ namespace Cdy.Tag
{
RDDCManager.Manager.SwitchWorkStateAction = new Func<WorkState, bool>((state) =>
{
if(state == WorkState.Primary)
if (mIsStarted)
{
return SwitchToPrimary();
if (state == WorkState.Primary)
{
return SwitchToPrimary();
}
else
{
return SwitchToStandby();
}
}
else
{
return SwitchToStandby();
while (!mIsStarted) System.Threading.Thread.Sleep(100);
if (state == WorkState.Primary)
{
return SwitchToPrimary();
}
else
{
return SwitchToStandby();
}
}
});
}
......@@ -184,8 +200,6 @@ namespace Cdy.Tag
CurrentDatabase = mRealDatabase.Name;
CurrentDatabaseLastUpdateTime = mRealDatabase.UpdateTime;
RDDCManager.Manager.Load(mDatabaseName);
sw.Stop();
LoggerService.Service.Info("LoadDatabase", "load " +mDatabaseName +" take " + sw.ElapsedMilliseconds.ToString() +" ms");
}
......@@ -362,6 +376,8 @@ namespace Cdy.Tag
LoggerService.Service.EnableLogger = true;
LoggerService.Service.Info("Runner", " 数据库 " + database+" 开始启动");
RDDCManager.Manager.Load(database);
RDDCManager.Manager.Start();
var re = await InitAsync(database);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册