Session分三级做处理。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using  System.Web.SessionState;
using System.Configuration;
namespace RuleEngine.Tool
{
    /// <summary>
    /// Sessionmodel实体类
    /// </summary>
    /// <remarks>如果出现数据未读到的情况,则设置标识本次运行完成后5分钟后再次允许一遍。</remarks>
    public class SessionModel
    {
        private string _sessionNo;
        private DateTime _sessionInTime= DateTime.Now;
        private int _currentlevel=0;//不为0是代表停止
        private int _oncelevel=0;
        /// <summary>
        /// session标志--一个推理的标志
        /// </summary>
        public string SessionNo
        {
            get { return _sessionNo; }
            set { _sessionNo = value; }
        }
        /// <summary>
        /// 推理进入时间
        /// </summary>
        public DateTime SessionInTime
        {
            get { return _sessionInTime; }
        }
        /// <summary>
        /// 当前推理级别
        /// </summary>
        /// <remarks> 数据延迟---每次重新执行推理时设置为0,不为0是代表停止</remarks>
        public int Currentlevel
        {
            get { return _currentlevel; }
            set { _currentlevel = value; }
        }
        /// <summary>
        /// 曾经级别
        /// </summary>
        public int Oncelevel
        {
            get { return _oncelevel; }
            set { _oncelevel = value; }
        }
    }

    /// <summary>
    /// Session管理类
    /// </summary>
    public class SessionHelper : IHttpHandler,IRequiresSessionState
    {
        private HttpSessionState curSession;
        private List<SessionModel> list = new List<SessionModel>();
        private int oneleveltime = int.Parse(System.Configuration.ConfigurationManager.AppSettings["1"]);
        private int twoleveltime = int.Parse(System.Configuration.ConfigurationManager.AppSettings["2"]);
        private int threeleveltime = int.Parse(System.Configuration.ConfigurationManager.AppSettings["3"]);


        public SessionHelper(HttpSessionState session)
        {
            this.curSession = session;
        }
        public void ProcessRequest(HttpContext context)
        {
        }

        public bool IsReusable
        {
            get { return true; }
        }

        //3.操作Session 时间。 供Global中定时刷新Global使用。 修改Session等级,负责启动推理流程。
        //4.删除Session  把具体中间结果移到备份数据表中。
        //5.停止Session
        //6.设置30分钟过期的Session,如果规则存在则,对应中间结果设置为停止,并移除中间结果,存入备份库中。Session中也移除,不再进入计算。推送中间结果。

        /// <summary>
        /// 加入Session List中
        /// </summary>
        /// <param name="model"></param>
        public void Add(string SessionNo)
        {
            SessionModel model = new SessionModel();
            model.SessionNo = SessionNo;
            list.Add(model);
            curSession["List"] = list;
        }

        /// <summary>
        /// 读取Session List
        /// </summary>
        /// <param name="SessionNo"></param>
        /// <returns></returns>
        public SessionModel Query(string SessionNo)
        {
            list = (List<SessionModel>)curSession["List"];
            return list.Find(
            delegate(SessionModel m)
            {
                return m.SessionNo == SessionNo;
            });
         
        }

        /// <summary>
        /// 读取Session索引
        /// </summary>
        /// <param name="SessionNo"></param>
        /// <returns></returns>
        public int QueryListIndex(string SessionNo)
        {
            list = (List<SessionModel>)curSession["List"];
            return list.FindIndex (
             delegate(SessionModel m)
             {
                 return m.SessionNo == SessionNo;
             });
        }


        public void Oper(SessionModel model)
        {
            SessionModel m = model;
            //操作Session 时间。 供Global中定时刷新Global使用。 修改Session等级,负责启动推理流程。
            //操作时间  -- 根据过去等级 进行开始时间与当前时间比对。

            if (model.Currentlevel>0)//停止
            {
                switch(model.Oncelevel)
                {
                    case 1:
                        if ((DateTime.Now - model.SessionInTime).Minutes.CompareTo(oneleveltime)>=0)
                        {
                            model.Currentlevel = 0;
                        
                        }
                        break;
                    case 2:
                        if ((DateTime.Now - model.SessionInTime).Minutes.CompareTo(twoleveltime)>=0)
                        {
                            model.Currentlevel = 0;
                        }
                        break;
                    case 3:
                        if ((DateTime.Now - model.SessionInTime).Minutes.CompareTo(threeleveltime)>=0)
                        {
                            model.Currentlevel = 0;
                        }
                        break;
                    default:
                           break;
                }
            
            }

        }

        public void Set(string SessionNo)
        {
            list = (List<SessionModel>)curSession["List"];
            int index = QueryListIndex(SessionNo);
            SessionModel m = list[index];
            //设置等级,不停止推理, 标志+1,当前值为标志值。
            if (m.Oncelevel >= 3)
            {


            }
            else
            {
                m.Oncelevel= m.Oncelevel + 1;
                m.Currentlevel = m.Oncelevel;
            }

            curSession["List"] = list;
        }
    }

}

本人声明:沐海(http://my.oschina.net/mahaisong) 以上文章是经过本人设计实践和阅读其他文档得出。如果需要探讨或指教可以留言!欢迎交流!

转载于:https://my.oschina.net/mahaisong/blog/147957

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值