/*
 * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License").
 * You may not use this file except in compliance with the License.
 * A copy of the License is located at
 * 
 *  http://aws.amazon.com/apache2.0
 * 
 * or in the "license" file accompanying this file. This file is distributed
 * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
 * express or implied. See the License for the specific language governing
 * permissions and limitations under the License.
 */
/*
 * Do not modify this file. This file is generated from the gamelift-2015-10-01.normal.json service model.
 */
using System;
using System.Collections.Generic;
using System.Xml.Serialization;
using System.Text;
using System.IO;
using System.Net;
using Amazon.Runtime;
using Amazon.Runtime.Internal;
namespace Amazon.GameLift.Model
{
    /// 
    /// Describes a Amazon GameLift fleet of game hosting resources.
    /// 
    ///  
    /// 
    ///  Related actions 
    /// 
    /// 
    public partial class FleetAttributes
    {
        private AnywhereConfiguration _anywhereConfiguration;
        private string _buildArn;
        private string _buildId;
        private CertificateConfiguration _certificateConfiguration;
        private ComputeType _computeType;
        private DateTime? _creationTime;
        private string _description;
        private string _fleetArn;
        private string _fleetId;
        private FleetType _fleetType;
        private string _instanceRoleArn;
        private EC2InstanceType _instanceType;
        private List _logPaths = new List();
        private List _metricGroups = new List();
        private string _name;
        private ProtectionPolicy _newGameSessionProtectionPolicy;
        private OperatingSystem _operatingSystem;
        private ResourceCreationLimitPolicy _resourceCreationLimitPolicy;
        private string _scriptArn;
        private string _scriptId;
        private string _serverLaunchParameters;
        private string _serverLaunchPath;
        private FleetStatus _status;
        private List _stoppedActions = new List();
        private DateTime? _terminationTime;
        /// 
        /// Gets and sets the property AnywhereConfiguration.
        /// 
        public AnywhereConfiguration AnywhereConfiguration
        {
            get { return this._anywhereConfiguration; }
            set { this._anywhereConfiguration = value; }
        }
        // Check to see if AnywhereConfiguration property is set
        internal bool IsSetAnywhereConfiguration()
        {
            return this._anywhereConfiguration != null;
        }
        /// 
        /// Gets and sets the property BuildArn. 
        /// 
        ///  The Amazon Resource Name (ARN)
        /// associated with the Amazon GameLift build resource that is deployed on instances in
        /// this fleet. In a GameLift build ARN, the resource ID matches the BuildId
        /// value.
        /// 
        /// 
        public string BuildArn
        {
            get { return this._buildArn; }
            set { this._buildArn = value; }
        }
        // Check to see if BuildArn property is set
        internal bool IsSetBuildArn()
        {
            return this._buildArn != null;
        }
        /// 
        /// Gets and sets the property BuildId. 
        /// 
        /// A unique identifier for the build resource that is deployed on instances in this fleet.
        /// 
        /// 
        public string BuildId
        {
            get { return this._buildId; }
            set { this._buildId = value; }
        }
        // Check to see if BuildId property is set
        internal bool IsSetBuildId()
        {
            return this._buildId != null;
        }
        /// 
        /// Gets and sets the property CertificateConfiguration.
        /// 
        public CertificateConfiguration CertificateConfiguration
        {
            get { return this._certificateConfiguration; }
            set { this._certificateConfiguration = value; }
        }
        // Check to see if CertificateConfiguration property is set
        internal bool IsSetCertificateConfiguration()
        {
            return this._certificateConfiguration != null;
        }
        /// 
        /// Gets and sets the property ComputeType. 
        /// 
        /// The type of compute resource used to host your game servers. You can use your own
        /// compute resources with Amazon GameLift Anywhere or use Amazon EC2 instances with managed
        /// Amazon GameLift.
        /// 
        /// 
        public ComputeType ComputeType
        {
            get { return this._computeType; }
            set { this._computeType = value; }
        }
        // Check to see if ComputeType property is set
        internal bool IsSetComputeType()
        {
            return this._computeType != null;
        }
        /// 
        /// Gets and sets the property CreationTime. 
        /// 
        /// A time stamp indicating when this data object was created. Format is a number expressed
        /// in Unix time as milliseconds (for example "1469498468.057").
        /// 
        /// 
        public DateTime CreationTime
        {
            get { return this._creationTime.GetValueOrDefault(); }
            set { this._creationTime = value; }
        }
        // Check to see if CreationTime property is set
        internal bool IsSetCreationTime()
        {
            return this._creationTime.HasValue; 
        }
        /// 
        /// Gets and sets the property Description. 
        /// 
        /// A human-readable description of the fleet.
        /// 
        /// 
        [AWSProperty(Min=1, Max=1024)]
        public string Description
        {
            get { return this._description; }
            set { this._description = value; }
        }
        // Check to see if Description property is set
        internal bool IsSetDescription()
        {
            return this._description != null;
        }
        /// 
        /// Gets and sets the property FleetArn. 
        /// 
        /// The Amazon Resource Name (ARN)
        /// that is assigned to a Amazon GameLift fleet resource and uniquely identifies it. ARNs
        /// are unique across all Regions. Format is arn:aws:gamelift:<region>::fleet/fleet-a1234567-b8c9-0d1e-2fa3-b45c6d7e8912.
        /// In a GameLift fleet ARN, the resource ID matches the FleetId value.
        /// 
        /// 
        public string FleetArn
        {
            get { return this._fleetArn; }
            set { this._fleetArn = value; }
        }
        // Check to see if FleetArn property is set
        internal bool IsSetFleetArn()
        {
            return this._fleetArn != null;
        }
        /// 
        /// Gets and sets the property FleetId. 
        /// 
        /// A unique identifier for the fleet.
        /// 
        /// 
        public string FleetId
        {
            get { return this._fleetId; }
            set { this._fleetId = value; }
        }
        // Check to see if FleetId property is set
        internal bool IsSetFleetId()
        {
            return this._fleetId != null;
        }
        /// 
        /// Gets and sets the property FleetType. 
        /// 
        /// Indicates whether to use On-Demand or Spot instances for this fleet. By default, this
        /// property is set to ON_DEMAND. Learn more about when to use 
        /// On-Demand versus Spot Instances. This property cannot be changed after the fleet
        /// is created.
        /// 
        /// 
        public FleetType FleetType
        {
            get { return this._fleetType; }
            set { this._fleetType = value; }
        }
        // Check to see if FleetType property is set
        internal bool IsSetFleetType()
        {
            return this._fleetType != null;
        }
        /// 
        /// Gets and sets the property InstanceRoleArn. 
        /// 
        /// A unique identifier for an IAM role that manages access to your Amazon Web Services
        /// services. With an instance role ARN set, any application that runs on an instance
        /// in this fleet can assume the role, including install scripts, server processes, and
        /// daemons (background processes). Create a role or look up a role's ARN by using the
        /// IAM dashboard in the Amazon Web
        /// Services Management Console. Learn more about using on-box credentials for your game
        /// servers at 
        /// Access external resources from a game server.
        /// 
        /// 
        [AWSProperty(Min=1)]
        public string InstanceRoleArn
        {
            get { return this._instanceRoleArn; }
            set { this._instanceRoleArn = value; }
        }
        // Check to see if InstanceRoleArn property is set
        internal bool IsSetInstanceRoleArn()
        {
            return this._instanceRoleArn != null;
        }
        /// 
        /// Gets and sets the property InstanceType. 
        /// 
        /// The Amazon EC2 instance type that determines the computing resources of each instance
        /// in the fleet. Instance type defines the CPU, memory, storage, and networking capacity.
        /// See Amazon Elastic Compute Cloud
        /// Instance Types for detailed descriptions.
        /// 
        /// 
        public EC2InstanceType InstanceType
        {
            get { return this._instanceType; }
            set { this._instanceType = value; }
        }
        // Check to see if InstanceType property is set
        internal bool IsSetInstanceType()
        {
            return this._instanceType != null;
        }
        /// 
        /// Gets and sets the property LogPaths. 
        /// 
        ///  This parameter is no longer used. Game session log paths are now defined using
        /// the Amazon GameLift server API ProcessReady() logParameters.
        /// See more information in the Server
        /// API Reference. 
        /// 
        /// 
        public List LogPaths
        {
            get { return this._logPaths; }
            set { this._logPaths = value; }
        }
        // Check to see if LogPaths property is set
        internal bool IsSetLogPaths()
        {
            return this._logPaths != null && this._logPaths.Count > 0; 
        }
        /// 
        /// Gets and sets the property MetricGroups. 
        /// 
        /// Name of a metric group that metrics for this fleet are added to. In Amazon CloudWatch,
        /// you can view aggregated metrics for fleets that are in a metric group. A fleet can
        /// be included in only one metric group at a time.
        /// 
        /// 
        [AWSProperty(Max=1)]
        public List MetricGroups
        {
            get { return this._metricGroups; }
            set { this._metricGroups = value; }
        }
        // Check to see if MetricGroups property is set
        internal bool IsSetMetricGroups()
        {
            return this._metricGroups != null && this._metricGroups.Count > 0; 
        }
        /// 
        /// Gets and sets the property Name. 
        /// 
        /// A descriptive label that is associated with a fleet. Fleet names do not need to be
        /// unique.
        /// 
        /// 
        [AWSProperty(Min=1, Max=1024)]
        public string Name
        {
            get { return this._name; }
            set { this._name = value; }
        }
        // Check to see if Name property is set
        internal bool IsSetName()
        {
            return this._name != null;
        }
        /// 
        /// Gets and sets the property NewGameSessionProtectionPolicy. 
        /// 
        /// The type of game session protection to set on all new instances that are started in
        /// the fleet.
        /// 
        ///   -  
        /// 
        ///  NoProtection -- The game session can be terminated during a scale-down event.
        /// 
        ///  
-  
        /// 
        ///  FullProtection -- If the game session is in an ACTIVEstatus,
        /// it cannot be terminated during a scale-down event.
        /// 
        ///
/// 
        public ProtectionPolicy NewGameSessionProtectionPolicy
        {
            get { return this._newGameSessionProtectionPolicy; }
            set { this._newGameSessionProtectionPolicy = value; }
        }
        // Check to see if NewGameSessionProtectionPolicy property is set
        internal bool IsSetNewGameSessionProtectionPolicy()
        {
            return this._newGameSessionProtectionPolicy != null;
        }
        /// 
        /// Gets and sets the property OperatingSystem. 
        /// 
        /// The operating system of the fleet's computing resources. A fleet's operating system
        /// is determined by the OS of the build or script that is deployed on this fleet.
        /// 
        /// 
        public OperatingSystem OperatingSystem
        {
            get { return this._operatingSystem; }
            set { this._operatingSystem = value; }
        }
        // Check to see if OperatingSystem property is set
        internal bool IsSetOperatingSystem()
        {
            return this._operatingSystem != null;
        }
        /// 
        /// Gets and sets the property ResourceCreationLimitPolicy.
        /// 
        public ResourceCreationLimitPolicy ResourceCreationLimitPolicy
        {
            get { return this._resourceCreationLimitPolicy; }
            set { this._resourceCreationLimitPolicy = value; }
        }
        // Check to see if ResourceCreationLimitPolicy property is set
        internal bool IsSetResourceCreationLimitPolicy()
        {
            return this._resourceCreationLimitPolicy != null;
        }
        /// 
        /// Gets and sets the property ScriptArn. 
        /// 
        ///  The Amazon Resource Name (ARN)
        /// associated with the GameLift script resource that is deployed on instances in this
        /// fleet. In a GameLift script ARN, the resource ID matches theScriptId
        /// value.
        /// 
        /// 
        public string ScriptArn
        {
            get { return this._scriptArn; }
            set { this._scriptArn = value; }
        }
        // Check to see if ScriptArn property is set
        internal bool IsSetScriptArn()
        {
            return this._scriptArn != null;
        }
        /// 
        /// Gets and sets the property ScriptId. 
        /// 
        /// A unique identifier for the Realtime script resource that is deployed on instances
        /// in this fleet.
        /// 
        /// 
        public string ScriptId
        {
            get { return this._scriptId; }
            set { this._scriptId = value; }
        }
        // Check to see if ScriptId property is set
        internal bool IsSetScriptId()
        {
            return this._scriptId != null;
        }
        /// 
        /// Gets and sets the property ServerLaunchParameters. 
        /// 
        ///  This parameter is no longer used. Server launch parameters are now defined
        /// using the fleet's runtime configuration . Requests that use this parameter instead
        /// continue to be valid.
        /// 
        /// 
        [AWSProperty(Min=1, Max=1024)]
        public string ServerLaunchParameters
        {
            get { return this._serverLaunchParameters; }
            set { this._serverLaunchParameters = value; }
        }
        // Check to see if ServerLaunchParameters property is set
        internal bool IsSetServerLaunchParameters()
        {
            return this._serverLaunchParameters != null;
        }
        /// 
        /// Gets and sets the property ServerLaunchPath. 
        /// 
        ///  This parameter is no longer used. Server launch paths are now defined using
        /// the fleet's RuntimeConfiguration
        /// . Requests that use this parameter instead continue to be valid.
        /// 
        /// 
        [AWSProperty(Min=1, Max=1024)]
        public string ServerLaunchPath
        {
            get { return this._serverLaunchPath; }
            set { this._serverLaunchPath = value; }
        }
        // Check to see if ServerLaunchPath property is set
        internal bool IsSetServerLaunchPath()
        {
            return this._serverLaunchPath != null;
        }
        /// 
        /// Gets and sets the property Status. 
        /// 
        /// Current status of the fleet. Possible fleet statuses include the following:
        /// 
        ///   -  
        /// 
        ///  NEW -- A new fleet has been defined and desired instances is set to 1. 
        /// 
        ///  
-  
        /// 
        ///  DOWNLOADING/VALIDATING/BUILDING/ACTIVATING -- Amazon GameLift is setting up
        /// the new fleet, creating new instances with the game build or Realtime script and starting
        /// server processes.
        /// 
        ///  
-  
        /// 
        ///  ACTIVE -- Hosts can now accept game sessions.
        /// 
        ///  
-  
        /// 
        ///  ERROR -- An error occurred when downloading, validating, building, or activating
        /// the fleet.
        /// 
        ///  
-  
        /// 
        ///  DELETING -- Hosts are responding to a delete fleet request.
        /// 
        ///  
-  
        /// 
        ///  TERMINATED -- The fleet no longer exists.
        /// 
        ///  
/// 
        public FleetStatus Status
        {
            get { return this._status; }
            set { this._status = value; }
        }
        // Check to see if Status property is set
        internal bool IsSetStatus()
        {
            return this._status != null;
        }
        /// 
        /// Gets and sets the property StoppedActions. 
        /// 
        /// A list of fleet activity that has been suspended using StopFleetActions
        /// . This includes fleet auto-scaling.
        /// 
        /// 
        [AWSProperty(Min=1, Max=1)]
        public List StoppedActions
        {
            get { return this._stoppedActions; }
            set { this._stoppedActions = value; }
        }
        // Check to see if StoppedActions property is set
        internal bool IsSetStoppedActions()
        {
            return this._stoppedActions != null && this._stoppedActions.Count > 0; 
        }
        /// 
        /// Gets and sets the property TerminationTime. 
        /// 
        /// A time stamp indicating when this data object was terminated. Format is a number expressed
        /// in Unix time as milliseconds (for example"1469498468.057").
        /// 
        /// 
        public DateTime TerminationTime
        {
            get { return this._terminationTime.GetValueOrDefault(); }
            set { this._terminationTime = value; }
        }
        // Check to see if TerminationTime property is set
        internal bool IsSetTerminationTime()
        {
            return this._terminationTime.HasValue; 
        }
    }
}