123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- using BestHTTP.PlatformSupport.FileSystem;
- using System;
- using System.Collections.Generic;
- namespace BestHTTP.Core
- {
- public static class HostManager
- {
- private const int Version = 1;
- private static string LibraryPath = string.Empty;
- private static bool IsSaveAndLoadSupported = false;
- private static bool IsLoaded = false;
- private static Dictionary<string, HostDefinition> hosts = new Dictionary<string, HostDefinition>();
- public static HostDefinition GetHost(string hostStr)
- {
- HostDefinition host;
- if (!hosts.TryGetValue(hostStr, out host))
- hosts.Add(hostStr, host = new HostDefinition(hostStr));
- return host;
- }
- public static void RemoveAllIdleConnections()
- {
- HTTPManager.Logger.Information("HostManager", "RemoveAllIdleConnections");
- foreach (var host_kvp in hosts)
- foreach (var variant_kvp in host_kvp.Value.hostConnectionVariant)
- variant_kvp.Value.RemoveAllIdleConnections();
- }
- public static void TryToSendQueuedRequests()
- {
- foreach (var kvp in hosts)
- kvp.Value.TryToSendQueuedRequests();
- }
- public static void Shutdown()
- {
- HTTPManager.Logger.Information("HostManager", "Shutdown initiated!");
- foreach (var kvp in hosts)
- kvp.Value.Shutdown();
- }
- public static void Clear()
- {
- HTTPManager.Logger.Information("HostManager", "Clearing hosts!");
- hosts.Clear();
- }
- private static void SetupFolder()
- {
- if (string.IsNullOrEmpty(LibraryPath))
- {
- try
- {
- LibraryPath = System.IO.Path.Combine(HTTPManager.GetRootCacheFolder(), "Hosts");
- HTTPManager.IOService.FileExists(LibraryPath);
- IsSaveAndLoadSupported = true;
- }
- catch
- {
- IsSaveAndLoadSupported = false;
- HTTPManager.Logger.Warning("HostManager", "Save and load Disabled!");
- }
- }
- }
- public static void Save()
- {
- if (!IsSaveAndLoadSupported || string.IsNullOrEmpty(LibraryPath))
- return;
- try
- {
- using (var fs = HTTPManager.IOService.CreateFileStream(LibraryPath, FileStreamModes.Create))
- using (var bw = new System.IO.BinaryWriter(fs))
- {
- bw.Write(Version);
- bw.Write(hosts.Count);
- foreach (var kvp in hosts)
- {
- bw.Write(kvp.Key.ToString());
- kvp.Value.SaveTo(bw);
- }
- }
- HTTPManager.Logger.Information("HostManager", hosts.Count + " hosts saved!");
- }
- catch
- { }
- }
- public static void Load()
- {
- if (IsLoaded)
- return;
- IsLoaded = true;
- SetupFolder();
- if (!IsSaveAndLoadSupported || string.IsNullOrEmpty(LibraryPath) || !HTTPManager.IOService.FileExists(LibraryPath))
- return;
- try
- {
- using (var fs = HTTPManager.IOService.CreateFileStream(LibraryPath, FileStreamModes.OpenRead))
- using (var br = new System.IO.BinaryReader(fs))
- {
- int version = br.ReadInt32();
- int hostCount = br.ReadInt32();
- for (int i = 0; i < hostCount; ++i)
- {
- GetHost(br.ReadString())
- .LoadFrom(version, br);
- }
- HTTPManager.Logger.Information("HostManager", hostCount.ToString() + " HostDefinitions loaded!");
- }
- }
- catch
- {
- try
- {
- HTTPManager.IOService.FileDelete(LibraryPath);
- }
- catch
- { }
- }
- }
- }
- }
|