2019独角兽企业重金招聘Python工程师标准>>>

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

Session分三级做处理。相关推荐

  1. session共享怎么做的(分布式如何实现session共享)?

    session共享怎么做的(分布式如何实现session共享)?  问题描述:一个用户在登录成功以后会把用户信息存储在session当中,这时session所在服务器为server1,那 么用户在 s ...

  2. Ajax (部分二:prototype.js代码后半部分)自己做的,总结页面向后台传Form值、单个值和后台向前台传一个或是一组值...

    2019独角兽企业重金招聘Python工程师标准>>> Ajax (部分二:prototype.js代码后半部分)自己做的,总结页面向后台传Form值.单个值和后台向前台传一个或是一 ...

  3. 小学生除法检验,10道题,每小题10分,被除数和除数随机产生。被除数是20~200之间的数,除数是2~9之间的一位数。用户输入答案,计算机判卷,做对了加10分,做错了不允许重做,最后输出成绩;

    欢迎加qq群:453398542 学习讨论,会定期分享资料课程,解答问题. 1.         小学生除法检验,10道题,每小题10分,被除数和除数随机产生.被除数是20~200之间的数,除数是2~ ...

  4. FTP的控制连接和数据连接分别是做什么的?主动模式和被动模式有什么区别?

    你知道FTP的控制连接和数据连接分别是做什么的吗? 你知道FTP的主动模式和被动模式有什么区别吗? 你知道实际工作中,会使用主动FTP还是被动FTP吗?又是为什么呢? 一. FTP的两种连接 FTP( ...

  5. 成都敏之澳:拼多多直通车原理和提高质量分怎么做?

    拼多多想要获得好的流量,那么拼多多店铺就要做好直通车引流以及提高质量分来提高店铺权重等等,对于很多刚刚入行的人来说,就不知道拼多多直通车原理和提高质量分怎么做?下面就和成都敏之澳一起来看看吧,希望对大 ...

  6. 计算机网络技术三级做题技巧,三级网络技术——我的经历,我的技巧

    作者:liyunfei 大家好,我是华北工学院的,专业是经济学.马上就要上大四了,现在已经拿到三级证书.作为过来人,对于网络考试,我有一些自己的感受,想和大家做个交流,供正在努力中的朋友们做个参考,希 ...

  7. 心得体会:分治法 || 做题也有模板

    二叉树的深度_牛客题霸_牛客网 (nowcoder.com)https://www.nowcoder.com/practice/435fb86331474282a3499955f0a41e8b?tpI ...

  8. 董军宇教授应邀在中国计算机应用大会智慧海洋分论坛做报告

    7月29日-31日,第37届中国计算机应用大会(CCF NCCA 2022)在广州市花都区召开.大会以"聚焦智能应用 产研互动,助力数字经济转型升级"为主题,邀请计算机行业内诸多顶 ...

  9. 分秒钟做款App:细数国内外在线DIY应用网站

    摘要:本文详细介绍了国内外14个在线自助制作移动App的网站,让你无需任何编程.设计基础,即可在非常短的时间内就开发出一款iPhone或Android应用,在应用完成之后,还会帮你将应用上架到各个应用 ...

最新文章

  1. python Tkinter学习笔记 menu控件 02
  2. 生物学专业_北京交通大学617生物化学20082011历年考研专业课真题汇编
  3. 概述nodejs核心机制
  4. LeetCode 92. 反转链表 II(双指针)
  5. vue中用watch监听路由信息
  6. [转]ASP.NET面试题
  7. JAVA注解行_java注解
  8. 美食杂志排行榜_百度知道
  9. 两计算机之间怎样快速传输数据,两个局域网之间怎么互相传输文件有什么快速方法...
  10. HBuilder开发APP(二)——网络请求
  11. 直播平台怎么搭建直播特效,实现原理与难点是什么
  12. 两个音轨合并_怎样将两个音频合并在一起?超详细教程!
  13. 5.信道带宽、信道容量、香农公式
  14. linux系统修改启动logo的步骤
  15. 使用Mathpix snip软件 快捷复制PDF/图片中公式到Latex和word
  16. python 北上资金_python爬虫技术:北向资金数据自动爬取!
  17. 全景感知、智能融合|视图计算平台全新发布
  18. 进阶高级自动化测试测试,Docker 常遇问题整理(带解决方案)
  19. python+selenium框架跳过https安全隐私问题解决方案
  20. fastadmin中使用 x-editable

热门文章

  1. hive拉链表实现方案一
  2. NLTK简单入门和数据清洗
  3. 前端折线图中背景,Chart.js折线图设置背景颜色
  4. RabbitMQ-镜像队列配置相关
  5. 为什么说车联网安全将成为热门产业
  6. 一个OA解决方案的经典模板
  7. fileziller 恢复 站点管理器 内的ftp帐号方法
  8. strcat与strncat的C/C++实现
  9. 2012年CIO最关心的十大安全问题
  10. 16、document的_source元数据以及定制返回结果解析