public void MonitoringItemAsync() { AsyncManager.OutstandingOperations.Increment(); //初始化 CometWaitRequest cometWaitRequest = new CometWaitRequest(SendUserId); cometWaitRequest.execute = new CometWaitRequest.Execute(EndExecute); CometThreadPool.QueueCometWaitRequest(cometWaitRequest); }
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 }
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()); } } }