예제 #1
0
        public void MonitoringItemAsync()
        {
            AsyncManager.OutstandingOperations.Increment();
            //初始化
            CometWaitRequest cometWaitRequest = new CometWaitRequest(SendUserId);

            cometWaitRequest.execute = new CometWaitRequest.Execute(EndExecute);
            CometThreadPool.QueueCometWaitRequest(cometWaitRequest);
        }
예제 #2
0
        protected void Application_Start()
        {
            //初始化引擎上下文环境
            EngineContext.Initialize(false);
            //数据库是否已经安装
            bool databaseInstalled = true;// DataSettingsHelper.DatabaseIsInstalled();
            //设置依赖项解析器
            var dependencyResolver = new OceanDependencyResolver();

            DependencyResolver.SetResolver(dependencyResolver);
            //模型绑定
            ModelBinders.Binders.Add(typeof(BaseOceanModel), new OceanModelBinder());
            //移除所有视图引擎
            if (databaseInstalled)
            {
                ViewEngines.Engines.Clear();
                //使用自定义ThemeableRazorViewEngine视图引擎
                ViewEngines.Engines.Add(new ThemeableRazorViewEngine());
            }
            //添加一些功能默认ModelMetadataProvider之上
            ModelMetadataProviders.Current = new OceanMetadataProvider();
            //注册ASP.NET MVC应用程序中的所有区域
            AreaRegistration.RegisterAllAreas();
            //注册筛选器
            RegisterGlobalFilters(GlobalFilters.Filters);
            //注册路由
            RegisterRoutes(RouteTable.Routes);
            ////注册虚拟路径提供者为嵌入式视图
            //var embeddedViewResolver = EngineContext.Current.Resolve<IEmbeddedViewResolver>();
            //var embeddedProvider = new EmbeddedViewVirtualPathProvider(embeddedViewResolver.GetEmbeddedViews());
            //HostingEnvironment.RegisterVirtualPathProvider(embeddedProvider);
            //开始任务调度
            //TaskManager.Instance.Initialize();
            //TaskManager.Instance.Start();

            #region 初始化消息处理线程
            //初始化消息处理线程
            CometThreadPool.CreateThreads(5);
            #endregion
        }
예제 #3
0
        public override void ExecuteNotice(CallerContext callerContext, string[] args, ref string message)
        {
            int type = int.Parse(args[1]);

            //客服离线
            if (type == 1)
            {
                Guid kfNumberId = new Guid(args[0]);
                //移除缓存中的客服
                MessageManager.Instance.RemoveCacheKF(kfNumberId);
                //离线时清理线程中的客服端(防止第一条离线信息丢失)
                CometThreadPool.DequeueCometWaitRequest(kfNumberId);
                //断开与所有访客的会话
                IKfNumberService         kfNumberService         = EngineContext.Current.Resolve <IKfNumberService>();
                IKfMeetingService        kfMeetingService        = EngineContext.Current.Resolve <IKfMeetingService>();
                IKfMeetingMessageService kfMeetingMessageService = EngineContext.Current.Resolve <IKfMeetingMessageService>();
                IMpUserService           mpUserService           = EngineContext.Current.Resolve <IMpUserService>();
                IList <KfMeeting>        listMeeting             = kfMeetingService.GetALL().Where(m => m.KfNumberId == kfNumberId && m.IsEnd == false).ToList();

                foreach (KfMeeting kfMeeting in listMeeting)
                {
                    kfMeeting.RecordCount = kfMeetingMessageService.GetCount(" where KfMeetingId='" + kfMeeting.Id + "'");
                    kfMeeting.EndDate     = DateTime.Now;
                    kfMeeting.IsEnd       = true;
                    kfMeetingService.Update(kfMeeting);
                    base.SendPrivateMessage(kfNumberId, kfMeeting.MpUserId, "本次会话已被断开,您可以重新发起会话请求");
                    //发送给微信
                    MpUser mpUser = mpUserService.GetById(kfMeeting.MpUserId);

                    if (mpUser != null && !string.IsNullOrWhiteSpace(mpUser.OpenID))
                    {
                        mpUserService.SendMessage(mpUser.OpenID, "本次会话已被断开,您可以重新发起会话请求");
                    }
                    //更新用户状态
                    mpUserService.ChangeMpUserState(kfMeeting.MpUserId, 0);
                }
                //把客服设置成离线
                KfNumber kfNumber = kfNumberService.GetById(kfNumberId);
                kfNumber.IsOnline = false;
                kfNumberService.Update(kfNumber);
            }

            //访客离线
            if (type == 2)
            {
                Guid mpUserId = new Guid(args[0]);
                //离线时清理线程中的访客端(防止第一条离线信息丢失)
                CometThreadPool.DequeueCometWaitRequest(mpUserId);
                //断开与客服的会话
                IKfMeetingService        kfMeetingService        = EngineContext.Current.Resolve <IKfMeetingService>();
                IKfMeetingMessageService kfMeetingMessageService = EngineContext.Current.Resolve <IKfMeetingMessageService>();
                IList <KfMeeting>        listMeeting             = kfMeetingService.GetALL().Where(m => m.MpUserId == mpUserId && m.IsEnd == false).ToList();

                foreach (KfMeeting kfMeeting in listMeeting)
                {
                    kfMeeting.RecordCount = kfMeetingMessageService.GetCount(" where KfMeetingId='" + kfMeeting.Id + "'");
                    kfMeeting.EndDate     = DateTime.Now;
                    kfMeeting.IsEnd       = true;
                    kfMeetingService.Update(kfMeeting);
                    base.SendNotice(mpUserId, "访客_" + new Random().Next(100), kfMeeting.KfNumberId, 3, 0, mpUserId.ToString());
                }
            }
        }