/// <summary> /// Saves the specified configuration. /// </summary> /// <param name="configuration">The configuration.</param> public void Save(ConnectServerDefinition configuration) { try { Log.Info($"requested to save configuration of connect server {configuration.ServerId}"); DataModel.Configuration.ConnectServerDefinition currentConfiguration = null; if (this.servers.OfType <IConnectServer>().FirstOrDefault(s => s.Settings.GetId() == configuration.GetId()) is { } server) { currentConfiguration = server.Settings as DataModel.Configuration.ConnectServerDefinition; } bool isNew = false; using (var configContext = this.persistenceContextProvider.CreateNewContext()) { if (currentConfiguration != null) { configContext.Attach(currentConfiguration); } else { currentConfiguration = configContext.CreateNew <DataModel.Configuration.ConnectServerDefinition>(); currentConfiguration.ServerId = configuration.ServerId; var existingConfigs = configContext.Get <DataModel.Configuration.ConnectServerDefinition>().ToList(); if (existingConfigs.Count > 0) { var newId = existingConfigs.Max(c => c.ServerId) + 1; currentConfiguration.ServerId = (byte)newId; } isNew = true; } configuration.Adapt(currentConfiguration); if (!Equals(currentConfiguration.Client, configuration.Client)) { currentConfiguration.Client = configContext.GetById <DataModel.Configuration.GameClientDefinition>(configuration.Client.GetId()); } configContext.SaveChanges(); } if (isNew) { this.changeListener?.ConnectionServerAdded(currentConfiguration); } else { this.changeListener?.ConnectionServerChanged(currentConfiguration); } } catch (Exception ex) { Log.Error($"An unexpected exception occured during saving the connect server configuration for server id {configuration.ServerId}", ex); throw; } }
public ActionResult <Guid> Save([FromBody] ConnectServerDefinitionDto configuration) { try { Log.Info($"requested to save configuration of connect server {configuration.ServerId}"); DataModel.Configuration.ConnectServerDefinition currentConfiguration = null; if (this.servers.OfType <IConnectServer>().FirstOrDefault(s => s.Settings.GetId() == configuration.Id) is IConnectServer server) { currentConfiguration = server.Settings as DataModel.Configuration.ConnectServerDefinition; } bool isNew = false; using (var configContext = this.persistenceContextProvider.CreateNewContext()) { if (currentConfiguration != null) { configContext.Attach(currentConfiguration); } else { currentConfiguration = configContext.CreateNew <DataModel.Configuration.ConnectServerDefinition>(); currentConfiguration.ServerId = configuration.ServerId; var existingConfigs = configContext.Get <DataModel.Configuration.ConnectServerDefinition>().ToList(); if (existingConfigs.Count > 0) { var newId = existingConfigs.Max(c => c.ServerId) + 1; currentConfiguration.ServerId = (byte)newId; } isNew = true; } currentConfiguration.CheckMaxConnectionsPerAddress = configuration.CheckMaxConnectionsPerAddress; currentConfiguration.ListenerBacklog = configuration.ListenerBacklog; currentConfiguration.MaxConnections = configuration.MaxConnections; currentConfiguration.MaxConnectionsPerAddress = configuration.MaxConnectionsPerAddress; currentConfiguration.MaxFtpRequests = configuration.MaxFtpRequests; currentConfiguration.MaxIpRequests = configuration.MaxIpRequests; currentConfiguration.MaximumReceiveSize = configuration.MaximumReceiveSize; currentConfiguration.MaxServerListRequests = configuration.MaxServerListRequests; currentConfiguration.ClientListenerPort = configuration.ClientListenerPort; currentConfiguration.CurrentPatchVersion = configuration.CurrentPatchVersion; currentConfiguration.Timeout = configuration.Timeout; currentConfiguration.PatchAddress = configuration.PatchAddress; currentConfiguration.Description = configuration.Description; currentConfiguration.DisconnectOnUnknownPacket = configuration.DisconnectOnUnknownPacket; if (!Equals(currentConfiguration.Client, configuration.GameClient)) { currentConfiguration.Client = configContext.GetById <DataModel.Configuration.GameClientDefinition>(configuration.GameClient.Id); } configContext.SaveChanges(); } if (isNew) { this.changeListener?.ConnectionServerAdded(currentConfiguration); } else { this.changeListener?.ConnectionServerChanged(currentConfiguration); } if (this.serverListHubContext != null) { Task.Run(() => ServerListHub.InitializeAllClients(this.serverListHubContext, this.servers, this.persistenceContextProvider).ConfigureAwait(false)); } return(this.Ok(currentConfiguration.GetId())); } catch (Exception ex) { Log.Error($"An unexpected exception occured during saving the connect server configuration for server id {configuration.ServerId}", ex); throw; } }