/// <summary>
        /// Reserves the hosts by communicating with the reservation manager.
        /// </summary>
        public void ReserveMachines()
        {
            if (GlobalSettings.IsDistributedSystem)
            {
                try
                {
                    if (_reservationManager == null)
                    {
                        var machineQuantity = new VMQuantityDictionary(_manifestAgent.Quantities.MachineQuantity);
                        var ticket          = _manifestAgent.Ticket;

                        _reservationManager = new MachineReservationManager(_manifestAgent.Ticket.SessionId);
                        _reservationManager.Reserve(ticket.SessionOwner, ticket.RequestedVMs, machineQuantity);
                    }
                }
                catch (Exception ex)
                {
                    TraceFactory.Logger.Error(ex.Message);
                    throw;
                }
            }
            else
            {
                _localMachineCount = 1;
            }
        }
        public void Reserve(UserCredential credential, RequestedVMDictionary requestedVMs, VMQuantityDictionary requiredVMQuantity)
        {
            var virtualMachines = VMInventoryManager.RequestVMs(_sessionId, credential, requestedVMs, requiredVMQuantity);

            try
            {
                foreach (VirtualMachine machine in virtualMachines)
                {
                    TraceFactory.Logger.Debug("{0} : {1}".FormatWith(machine.Name, machine.MachineType));

                    var machineType     = EnumUtil.GetByDescription <ManagedMachineType>(machine.MachineType);
                    var machineInstance = new ManagedMachine(machine.Name, machineType);
                    GetMachineQueueForPlatform(machine.PlatformUsage).Enqueue(machineInstance);
                }
            }
            catch (Exception ex)
            {
                TraceFactory.Logger.Error(ex);

                // Something bad happened.  Release everything.
                foreach (var machine in virtualMachines)
                {
                    using (var machineInstance = new ManagedMachine(machine.Name, EnumUtil.GetByDescription <ManagedMachineType>(machine.MachineType)))
                    {
                        machineInstance.ReleaseReservation();
                    }
                }

                Dispose();
                throw;
            }
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="SessionResourceQuantity" /> class.
 /// </summary>
 public SessionResourceQuantity()
 {
     _vmQuantity            = new VMQuantityDictionary();
     _domainAccountQuantity = new DomainAccountQuantityDictionary();
 }