コード例 #1
0
        /// <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;
            }
        }
コード例 #2
0
        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;
            }
        }