Ignore:
Timestamp:
Aug 27, 2014, 5:35:51 PM (10 years ago)
Author:
alloc
Message:

Fixes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • binary-improvements/7dtd-server-fixes/src/NetConnections/Servers/Web/StaticHandler.cs

    r133 r134  
    33using System.IO;
    44using System.Net;
     5using System.Threading;
    56
    67namespace AllocsFixes.NetConnections.Servers.Web
     
    1112                private string staticPart;
    1213                private bool cache;
     14                private bool logMissingFiles;
    1315                private Dictionary<string, byte[]> fileCache = new Dictionary<string, byte[]> ();
    1416
    15                 public StaticHandler (string staticPart, string filePath, bool cache)
     17                public StaticHandler (string staticPart, string filePath, bool cache, bool logMissingFiles)
    1618                {
    1719                        this.staticPart = staticPart;
    1820                        this.datapath = filePath;
    1921                        this.cache = cache;
     22                        this.logMissingFiles = logMissingFiles;
    2023                }
    2124
    22                 public override void HandleRequest (HttpListenerRequest req, HttpListenerResponse resp)
     25                public override void HandleRequest (HttpListenerRequest req, HttpListenerResponse resp, HttpListenerBasicIdentity user)
    2326                {
    2427                        try {
     
    2730                                byte[] content;
    2831                                if (cache) {
    29                                         if (!fileCache.ContainsKey (fn)) {
    30                                                 if (!File.Exists (datapath + "/" + fn)) {
    31                                                         resp.StatusCode = (int)HttpStatusCode.NotFound;
    32                                                         return;
     32                                        Monitor.Enter (fileCache);
     33                                        try {
     34                                                if (!fileCache.ContainsKey (fn)) {
     35                                                        if (!File.Exists (datapath + "/" + fn)) {
     36                                                                resp.StatusCode = (int)HttpStatusCode.NotFound;
     37                                                                if (logMissingFiles)
     38                                                                        Log.Out ("Web:Static:FileNotFound: " + req.Url.AbsolutePath);
     39                                                                return;
     40                                                        }
     41
     42                                                        fileCache.Add (fn, File.ReadAllBytes (datapath + "/" + fn));
    3343                                                }
    3444
    35                                                 fileCache.Add (fn, File.ReadAllBytes (datapath + "/" + fn));
     45                                                content = fileCache [fn];
     46                                        } finally {
     47                                                Monitor.Exit (fileCache);
    3648                                        }
    37 
    38                                         content = fileCache [fn];
    3949                                } else {
    4050                                        if (!File.Exists (datapath + "/" + fn)) {
    4151                                                resp.StatusCode = (int)HttpStatusCode.NotFound;
     52                                                if (logMissingFiles)
     53                                                        Log.Out ("Web:Static:FileNotFound: " + req.Url.AbsolutePath);
    4254                                                return;
    4355                                        }
Note: See TracChangeset for help on using the changeset viewer.