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); }
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)); }
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; }
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)); }