/// <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); }
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); }