using Aitex.Core.RT.Fsm;
using Aitex.Core.RT.Log;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CyberX8_RT.Schedulers
{
public class SchedulerPostMsg
{
private enum Step
{
PostMsg,
CheckMsg
}
#region 内部变量
private Step _step = Step.CheckMsg;
private DateTime _postMsgTime = DateTime.Now;
#endregion
///
/// 构造函数
///
///
public SchedulerPostMsg()
{
}
///
/// 重置
///
public void Reset()
{
_step = Step.CheckMsg;
_postMsgTime = DateTime.Now;
}
///
/// 发送方法
///
///
///
///
///
///
///
///
///
///
///
public bool PostMsg(Entity entity,int currentState,eEvent eEvent, string moduleName, int msg, int confirmState, params object[] args)
{
if (_step == Step.PostMsg)
{
bool result =entity.CheckToPostMessage(eEvent, moduleName, msg, args);
if (result)
{
_postMsgTime = DateTime.Now;
_step = Step.CheckMsg;
}
}
else
{
if (currentState == confirmState)
{
return true;
}
else if (DateTime.Now.Subtract(_postMsgTime).TotalMilliseconds >= 1000)
{
_step = Step.PostMsg;
}
}
return false;
}
}
}