/// <summary>
        /// 获取在线用户列表
        /// </summary>
        /// <param name="userInfo">用户</param>
        /// <returns>数据表</returns>
        public DataTable GetOnLineState(UserInfo userInfo)
        {
            var parameter = ParameterUtil.CreateWithLog(userInfo, MethodBase.GetCurrentMethod());

            ServiceUtil.ProcessRDIWriteDbWithLock(userInfo, parameter, locker, (dbProvider, getOnLine) =>
            {
                var manager = new PiUserLogOnManager(dbProvider);
                // 设置为在线状态
                manager.OnLine(userInfo.Id);
                if (MessageService.LastCheckOnLineState == DateTime.MinValue)
                {
                    getOnLine = true;
                }
                else
                {
                    TimeSpan timeSpan = DateTime.Now - MessageService.LastCheckOnLineState;
                    if ((timeSpan.Minutes * 60 + timeSpan.Seconds) >= SystemInfo.OnLineCheck)
                    {
                        getOnLine = true;
                    }
                }

                if (OnLineStateDT == null || getOnLine)
                {
                    // 检查用户在线状态(服务器专用)
                    manager.CheckOnLine();
                    // 获取在线状态列表
                    OnLineStateDT                       = manager.GetOnLineStateDT();
                    OnLineStateDT.TableName             = PiUserTable.TableName;
                    MessageService.LastCheckOnLineState = DateTime.Now;
                }
                return(getOnLine);
            });
            return(OnLineStateDT);
        }
Example #2
0
        /// <summary>
        /// 用户在线
        /// </summary>
        /// <param name="userInfo">用户</param>
        /// <param name="onLineState">用户在线状态</param>
        public void OnLine(UserInfo userInfo, int onLineState = 1)
        {
            var parameter = ParameterUtil.CreateWithLog(userInfo, MethodBase.GetCurrentMethod());

            ServiceUtil.ProcessRDIWriteDbWithLock(userInfo, parameter, locker, dbProvider =>
            {
                var manager = new PiUserLogOnManager(dbProvider, userInfo);
                manager.OnLine(userInfo.Id, onLineState);
            });
        }
        /// <summary>
        /// 检查在线状态
        /// </summary>
        /// <param name="userInfo">用户</param>
        /// <param name="onLineState">用户在线状态</param>
        /// <returns>离线人数</returns>
        public int CheckOnLine(UserInfo userInfo, int onLineState)
        {
            int returnValue = 0;
            var parameter   = ParameterUtil.CreateWithLog(userInfo, MethodBase.GetCurrentMethod());

            ServiceUtil.ProcessRDIReadDb(userInfo, parameter, dbProvider =>
            {
                var manager = new PiUserLogOnManager(dbProvider);
                // 设置为在线状态
                manager.OnLine(userInfo.Id, onLineState);
                returnValue = manager.CheckOnLine();
            });
            return(returnValue);
        }
        /// <summary>
        /// 获取消息状态
        /// </summary>
        /// <param name="userInfo">用户</param>
        /// <param name="onLineState">用户在线状态</param>
        /// <param name="lastChekDate">最后检查日期</param>
        /// <returns>消息状态数组</returns>
        public string[] MessageChek(UserInfo userInfo, int onLineState, string lastChekDate)
        {
            string[] returnValue = null;
            var      parameter   = ParameterUtil.CreateWithMessage(userInfo, MethodBase.GetCurrentMethod(), this.serviceName, RDIFrameworkMessage.MessageService_MessageChek);

            ServiceUtil.ProcessRDIReadDb(userInfo, parameter, dbProvider =>
            {
                // 设置为在线状态
                var manager = new PiUserLogOnManager(dbProvider, userInfo);
                manager.OnLine(userInfo.Id, onLineState);
                // 读取信息状态
                var messageManager = new CiMessageManager(dbProvider, userInfo);
                returnValue        = messageManager.MessageChek();
            });
            return(returnValue);
        }