/// <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);
            }
        }
示例#2
0
        /// <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();
        }
示例#3
0
        /// <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);
        }