示例#1
0
        public async Task <Vm> ChangeState(VmOperation op)
        {
            Vm vm = null;

            switch (op.Type)
            {
            case VmOperationType.Start:
                vm = await Start(op.Id);

                break;

            case VmOperationType.Stop:
                vm = await Stop(op.Id);

                break;

            case VmOperationType.Save:
                vm = await Save(op.Id);

                break;

            case VmOperationType.Revert:
                vm = await Revert(op.Id);

                break;

            case VmOperationType.Delete:
                vm = await Delete(op.Id);

                break;
            }
            return(vm);
        }
        /// <summary>
        /// Creates a collection of VMInstructions from the string collection given.
        /// </summary>
        /// <param name="vmOperations"></param>
        /// <returns></returns>
        public static IEnumerable <IVmInstruction> CreateCollection(IEnumerable <string[]> vmOperations)
        {
            var vmOperationInstances = new List <IVmInstruction>();

            foreach (var vmOperation in vmOperations)
            {
                string         vmInstructionType = vmOperation[0];
                IVmInstruction vmOperationInstance;

                if (vmOperation.Length > 1)
                {
                    var    operationType = EnumUtils.StringToEnum <VmOperationType>(vmInstructionType);
                    string segmentString = vmOperation[1];
                    short  value         = short.Parse(vmOperation[2]);
                    var    segment       = EnumUtils.StringToEnum <VmSegment>(segmentString);

                    vmOperationInstance = new VmOperation(operationType, segment, value);
                }
                else
                {
                    var commandType = EnumUtils.StringToEnum <VmCommandType>(vmInstructionType);
                    vmOperationInstance = new VmCommand(commandType);
                }

                vmOperationInstances.Add(vmOperationInstance);
            }

            return(vmOperationInstances);
        }
示例#3
0
        public async Task <ActionResult <Vm> > ChangeVm([FromBody] VmOperation op)
        {
            await Validate(op);

            AuthorizeAny(
                () => Actor.IsAdmin,
                () => CanManageVm(op.Id, Actor.Id).Result
                );

            Vm vm = await _pod.ChangeState(op);

            SendBroadcast(vm, op.Type.ToString().ToLower());

            return(Ok(vm));
        }
示例#4
0
        private async Task _validate(VmOperation model)
        {
            if (model.Type != VmOperationType.Save)
            {
                await Task.CompletedTask;
                return;
            }

            string isolationId = model.Id.Contains("#")
                ? model.Id.Tag()
                : (await _pod.Load(model.Id))?.Name.Tag();

            if (await _store.HasActiveGames(isolationId))
            {
                throw new WorkspaceNotIsolated();
            }

            await Task.CompletedTask;
        }
示例#5
0
        public async Task <ActionResult <Vm> > ChangeVm([FromBody] VmOperation op)
        {
            string opType = op.Type.ToString().ToLower();

            await AuthorizeAction(op.Id, opType);

            if (
                op.Type == VmOperationType.Save &&
                op.WorkspaceId > 0 &&
                await _workspaceService.HasGames(op.WorkspaceId)
                )
            {
                throw new WorkspaceNotIsolatedException();
            }

            Vm vm = await _pod.ChangeState(op);

            SendBroadcast(vm, opType);

            return(Ok(vm));
        }