/// <summary> /// 进程结束时提供异步处理 End 方法。 /// </summary> /// <param name="result">包含有关进程状态信息的 System.IAsyncResult。</param> public void EndProcessRequest(IAsyncResult result) { PushPipe pipe = result as PushPipe; if (pipe != null && pipe.Context != null) { pipe.Context.Flush(pipe.Data); } }
/// <summary> /// 通过用户PUSH通道将数据PUSH给用户 /// </summary> /// <param name="userId"></param> /// <param name="pushData"></param> public static void Push(this int userId, byte[] pushData) { PushPipe pipe = userId.GetPipes(); if (null != pipe) { pipe.Data = pushData; pipe.Push(); } userId.RemovePipes(); }
/// <summary> /// 记录用户PUSH通道 /// </summary> /// <param name="pipe"></param> /// <param name="userId"></param> public static void SetPipe(this PushPipe pipe, int userId) { string cacheKey = string.Format("PIPE_{0}", userId); object userPipe = PipeCacheName.GetCache(cacheKey); if (null != PipeCacheName.GetCache(cacheKey)) { userId.RemovePipes(); } PipeCacheName.SetCache(cacheKey, new Tuple <PushPipe, DateTime>(pipe, DateTime.Now)); }
/// <summary> /// 启动对 HTTP 处理程序的异步调用。 /// </summary> /// <param name="httpContext">一个 System.Web.HttpContext 对象,该对象提供对用于向 HTTP 请求提供服务的内部服务器对象(如 Request、Response、Session 和 Server)的引用。</param> /// <param name="callback">异步方法调用完成时要调用的 System.AsyncCallback。如果 cb 为 null,则不调用委托。</param> /// <param name="extraData">处理该请求所需的所有额外数据。</param> /// <returns>包含有关进程状态信息的 System.IAsyncResult。</returns> public IAsyncResult BeginProcessRequest(HttpContext httpContext, AsyncCallback callback, object extraData) { IContext context = httpContext.Items[Constants.ContextKey] as IContext; if (context != null && context is SyncContext) { SyncContext syncContext = context as SyncContext; PushPipe pipe = new PushPipe(httpContext, callback, syncContext); pipe.SetPipe(syncContext.UserId); // syncContext.Execute(syncContext); // return(pipe); } httpContext.Response.Close(); return(null); }