134 lines
2.5 KiB
C#
134 lines
2.5 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
using XericLibrary.Runtime.Type;
|
|
|
|
namespace XericLibrary.Runtime.Security
|
|
{
|
|
/// <summary>
|
|
/// 程序流程保全
|
|
/// </summary>
|
|
public class ProgramFlowSecurity : WeaklyObject
|
|
{
|
|
#region 字段属性
|
|
|
|
/// <summary>
|
|
/// 保护标志位
|
|
/// </summary>
|
|
private int conservativeFlag;
|
|
|
|
/// <summary>
|
|
/// 单步标志位
|
|
/// </summary>
|
|
private int DoOnceFlag;
|
|
|
|
#endregion
|
|
|
|
#region 构造
|
|
|
|
public ProgramFlowSecurity()
|
|
{
|
|
conservativeFlag = 0;
|
|
DoOnceFlag = 0;
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region 方法
|
|
|
|
/// <summary>
|
|
/// 标志一段程序的开始
|
|
/// </summary>
|
|
/// <typeparam name="T"></typeparam>
|
|
/// <param name="site"></param>
|
|
public void Start<T>(T site)
|
|
where T : struct, Enum
|
|
{
|
|
conservativeFlag |= Convert.ToInt32(site);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 标志一段程序的结束
|
|
/// </summary>
|
|
/// <typeparam name="T"></typeparam>
|
|
/// <param name="site"></param>
|
|
public void Finish<T>(T site)
|
|
where T : struct, Enum
|
|
{
|
|
conservativeFlag &= ~Convert.ToInt32(site);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 尝试开始一段程序
|
|
/// </summary>
|
|
/// <typeparam name="T"></typeparam>
|
|
/// <param name="site"></param>
|
|
/// <returns></returns>
|
|
public bool TryStart<T>(T site)
|
|
where T : struct, Enum
|
|
{
|
|
if(GetFlag(site))
|
|
return false;
|
|
Start(site);
|
|
return true;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 开始执行一次
|
|
/// </summary>
|
|
/// <typeparam name="T"></typeparam>
|
|
/// <param name="site"></param>
|
|
/// <returns></returns>
|
|
public bool DoOnceStart<T>(T site)
|
|
where T : struct, Enum
|
|
{
|
|
if(GetFlag(site))
|
|
return false;
|
|
DoOnceFlag |= Convert.ToInt32(site);
|
|
return true;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 复位执行一次的标志
|
|
/// </summary>
|
|
/// <typeparam name="T"></typeparam>
|
|
/// <param name="site"></param>
|
|
public void ResetDoOnce<T>(T site)
|
|
where T : struct, Enum
|
|
{
|
|
DoOnceFlag &= ~Convert.ToInt32(site);
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
/// 获取一段程序的标志位
|
|
/// </summary>
|
|
/// <typeparam name="T"></typeparam>
|
|
/// <param name="site"></param>
|
|
/// <returns></returns>
|
|
private bool GetFlag<T>(T site)
|
|
where T : struct, Enum
|
|
{
|
|
return (conservativeFlag & Convert.ToInt32(site)) > 0;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取一段程序的标志位
|
|
/// </summary>
|
|
/// <typeparam name="T"></typeparam>
|
|
/// <param name="site"></param>
|
|
/// <returns></returns>
|
|
private bool GetDoOnce<T>(T site)
|
|
where T : struct, Enum
|
|
{
|
|
return (DoOnceFlag & Convert.ToInt32(site)) > 0;
|
|
}
|
|
|
|
|
|
|
|
#endregion
|
|
}
|
|
} |