Пример #1
0
        /// <summary>
        /// 发送已缓存
        /// </summary>
        /// <param name="requestData"></param>
        /// <param name="cache"></param>
        private static void SendCache(RequestData requestData, CacheManager.Cache cache)
        {
            if (String.Compare(requestData.GetEtag(), cache.Key, StringComparison.OrdinalIgnoreCase) == 0 || requestData.IfModifiedSince() == cache.LastWriteTime)
            {
                byte[] array = ResultFactory.BuildCacheResult(cache.Key, cache.LastWriteTime, requestData.IsKeepAlive(), 0);
                requestData.Socket.Write(array, new Action <OwinSocket, int, Exception, object>(SendCompleteCallback), requestData);
                return;
            }
            Tuple <int, int> tuple = requestData.IfRange();

            if (tuple != null)
            {
                int num;
                int num2;
                GetNextSize(tuple, cache.FileBytes.Length, out num, out num2);
                byte[] array2 = new byte[num2];
                Buffer.BlockCopy(cache.FileBytes, num, array2, 0, num2);
                string s2 = ResultFactory.BuildResult(206, cache.HttpMimeType, "", num, checked (num + num2), cache.FileBytes.Length, false, requestData.IsKeepAlive());
                requestData.Socket.WriteForPost(Encoding.ASCII.GetBytes(s2), array2, new Action <OwinSocket, int, Exception, object>(SendCompleteCallback), requestData);
                return;
            }
            byte[] array3 = (cache.FileBytesCompress != null) ? cache.FileBytesCompress : cache.FileBytes;
            byte[] array4 = ResultFactory.BuildSuccessResult(cache.HttpMimeType, array3.Length, cache.Key, cache.LastWriteTime, requestData.IsKeepAlive(), cache.FileBytesCompress != null);
            requestData.Socket.WriteForPost(array4, array3, new Action <OwinSocket, int, Exception, object>(SendCompleteCallback), requestData);
        }
Пример #2
0
        public bool Process(RequestData requestData)
        {
            if (_NoFileRequest.ContainsKey(requestData.RequestUrl))
            {
                //不存在的请求文件
                return(false);
            }
            CacheManager.Cache cache = CacheManager.GetCache(requestData.RequestUrl);
            if (cache != null && cache.FileBytes != null && cache.FileBytes.Length > 0)
            {
                //已有缓存
                SendCache(requestData, cache);
                return(true);
            }
            string fileFullPath = null;

            try
            {
                fileFullPath = GetFileFullPath(requestData.SafeRequestUrl);
            }
            catch
            {
                fileFullPath = null;
            }
            if (string.IsNullOrEmpty(fileFullPath))
            {
                RequestCheck.Expect(requestData.SafeRequestUrl);//排除掉
                EndRequest(requestData.Socket, 400, string.Format("Bad Request:{0}", requestData.SafeRequestUrl));
                requestData.SaveToPoll();
                return(true);
            }
            if (!File.Exists(fileFullPath))
            {
                if (!_NoFileRequest.ContainsKey(requestData.RequestUrl))
                {
                    _NoFileRequest[requestData.RequestUrl] = true;
                }
                return(false);
            }
            try
            {
                RealProcess(requestData, fileFullPath);
            }
            catch (Exception arg)
            {
                Console.WriteLine("http worker error:{0}", arg);
                requestData.Socket.Dispose();
                requestData.SaveToPoll();
            }
            return(true);
        }