/// <summary> /// </summary> public ICoreClient Create(string instanceName) { string cacheKey = null; string env = null; string servers = null; string protocols = null; bool debugRequests = false; TimeSpan requestTimeout = TimeSpan.Zero; TimeSpan offlineTimeout = TimeSpan.Zero; CoreModeEnum coreMode = CoreModeEnum.Standard; Assembly applAssembly = null; bool useFallbackServers = true; //bool cacheEnabled = false; _factoryState.Locked(state => { useFallbackServers = state.UseFallbackServers; //cacheEnabled = state.CacheEnabled; env = state.Env; servers = state.Servers; protocols = state.Protocols; debugRequests = state.DebugRequests; requestTimeout = state.RequestTimeout; offlineTimeout = state.OfflineTimeout; coreMode = state.CoreMode; applAssembly = state.ApplAssembly; cacheKey = $"[{env}][{(protocols ?? "").ToLower()}][{(servers ?? "").ToLower()}]"; if (state.SettingsCache.TryGetValue(cacheKey, out var cachedSettings)) { env = cachedSettings.Env; servers = $"{cachedSettings.ServerAddress.Host}:{cachedSettings.ServerAddress.Port}"; protocols = cachedSettings.ServerAddress.Protocol; useFallbackServers = false; debugRequests = cachedSettings.DebugRequests; requestTimeout = cachedSettings.RequestTimeout; offlineTimeout = cachedSettings.OfflineTimeout; coreMode = cachedSettings.CoreMode; applAssembly = cachedSettings.ApplAssembly; //_Logger.LogDebug("Using cached settings: {0} --> {1}://{2}", cacheKey, scheme, servers); } }); ICoreClient client = new CoreClient( _loggerRef, instanceName, env, servers, protocols, useFallbackServers, debugRequests, requestTimeout, offlineTimeout, coreMode, applAssembly); // save settings _factoryState.Locked(state => { state.SettingsCache[cacheKey] = new ClientSettings { Env = EnvHelper.EnvName(client.ClientInfo.ConfigEnv), ServerAddress = client.ServerAddress, DebugRequests = debugRequests, RequestTimeout = requestTimeout, OfflineTimeout = offlineTimeout, CoreMode = coreMode, ApplAssembly = applAssembly }; }); return(client); }
/// <summary> /// Sets the default request timeout for clients created by the factory. /// </summary> /// <param name="coreMode">The coreMode.</param> /// <returns></returns> public CoreClientFactory SetCoreMode(CoreModeEnum coreMode) { CoreMode = coreMode; return(this); }