OSDN Git Service

proxy.pacのキャッシュを回避する
authorKazuhiro Fujieda <fujieda@users.osdn.me>
Sun, 11 Feb 2018 09:12:23 +0000 (18:12 +0900)
committerKazuhiro Fujieda <fujieda@users.osdn.me>
Sun, 11 Feb 2018 09:12:23 +0000 (18:12 +0900)
KancolleSniffer/ProxyManager.cs

index af4b9ee..56ad515 100644 (file)
@@ -30,6 +30,7 @@ namespace KancolleSniffer
         private int _autoConfigRetryCount;\r
         private readonly Timer _timer = new Timer {Interval = 1000};\r
         private bool _initiated;\r
+        private DateTime _pacFileTime;\r
 \r
         public ProxyManager(Config config, Control parent)\r
         {\r
@@ -167,9 +168,11 @@ namespace KancolleSniffer
 \r
         private void SetAutoConfigUrl()\r
         {\r
-            var count = _autoConfigRetryCount == 0 ? "" : _autoConfigRetryCount.ToString();\r
+            var suffix = (DateTime.Now - _pacFileTime < TimeSpan.FromHours(6)\r
+                ? (int)_pacFileTime.TimeOfDay.TotalSeconds\r
+                : 0) + _autoConfigRetryCount;\r
             _systemProxy.SetAutoConfigUrl(\r
-                $"http://localhost:{_config.Proxy.Listen}/proxy{count}.pac");\r
+                $"http://localhost:{_config.Proxy.Listen}/proxy{(suffix == 0 ? "" : suffix.ToString("x"))}.pac");\r
         }\r
 \r
         private void RestoreSystemProxy()\r
@@ -180,11 +183,12 @@ namespace KancolleSniffer
 \r
         public void UpdatePacFile()\r
         {\r
-            var request = (HttpWebRequest)WebRequest.Create("https://kancollesniffer.osdn.jp/proxy.pac");\r
-            if (File.Exists("proxy.pac"))\r
+            var pacFile = "proxy.pac";\r
+            var request = (HttpWebRequest)WebRequest.Create($"https://kancollesniffer.osdn.jp/{pacFile}");\r
+            if (File.Exists(pacFile))\r
             {\r
-                var date = File.GetLastWriteTime("proxy.pac");\r
-                request.IfModifiedSince = date;\r
+                _pacFileTime = File.GetLastWriteTime(pacFile);\r
+                request.IfModifiedSince = _pacFileTime;\r
             }\r
             try\r
             {\r
@@ -193,8 +197,9 @@ namespace KancolleSniffer
                 using (var stream = response.GetResponseStream())\r
                     stream?.CopyTo(mem);\r
                 mem.Position = 0;\r
-                using (var file = new FileStream("proxy.pac", FileMode.Create))\r
+                using (var file = new FileStream(pacFile, FileMode.Create))\r
                     mem.CopyTo(file);\r
+                _pacFileTime = File.GetLastWriteTime(pacFile);\r
             }\r
             // ReSharper disable once EmptyGeneralCatchClause\r
             catch\r