Ejemplo n.º 1
0
      void Watch(PropertyManager PM, String path)
      {
         ManagedObjectReference vm = 
            cb.getConnection().Service.FindByInventoryPath(
            cb.getConnection().ServiceContent.searchIndex, path);
         if (vm == null)
         {
            System.Console.WriteLine("Virtual Machine located at path: " + path + " not found.");
            return;
         }

         // Create a FilterSpec
         PropertySpec pSpec = new PropertySpec();
         pSpec.type = vm.type;
         pSpec.pathSet = new String[] { "guest", "summary.quickStats", "summary.runtime.powerState" };
         ObjectSpec oSpec = new ObjectSpec();
         oSpec.obj = vm;
         oSpec.skip = false; oSpec.skipSpecified = true;
         PropertyFilterSpec pfSpec = new PropertyFilterSpec();
         pfSpec.propSet = new PropertySpec[] { pSpec };
         pfSpec.objectSet = new ObjectSpec[] { oSpec };

         Console.WriteLine("Updates being displayed...Press Ctrl-Break to exit");

         PM.Register(pfSpec, false, new PropertyFilterUpdateHandler(DisplayUpdates));

         while (true)
         {
            System.Threading.Thread.Sleep(100);
         }
      }
   private PropertyFilterSpec createEventFilterSpec() {
      // Set up a PropertySpec to use the latestPage attribute 
      // of the EventHistoryCollector

      PropertySpec propSpec = new PropertySpec();
      propSpec.all = false;
      propSpec.pathSet=new String[] { "latestPage" };
      propSpec.type =_eventHistoryCollector.type;

      // PropertySpecs are wrapped in a PropertySpec array
      PropertySpec[] propSpecAry = new PropertySpec[] { propSpec };
         
      // Set up an ObjectSpec with the above PropertySpec for the
      // EventHistoryCollector we just created
      // as the Root or Starting Object to get Attributes for.
      ObjectSpec objSpec = new ObjectSpec();
      objSpec.obj =_eventHistoryCollector;
      objSpec.skip = false;
         
      // Get Event objects in "latestPage" from "EventHistoryCollector"
      // and no "traversl" further, so, no SelectionSpec is specified 
      objSpec.selectSet= new SelectionSpec[] { };
         
      // ObjectSpecs are wrapped in an ObjectSpec array
      ObjectSpec[] objSpecAry = new ObjectSpec[] { objSpec };
         
      PropertyFilterSpec spec = new PropertyFilterSpec();
      spec.propSet= propSpecAry;
      spec.objectSet= objSpecAry;
      return spec;
   }
Ejemplo n.º 3
0
 private PropertyFilterSpec[] createPFSForRecentTasks(
    ManagedObjectReference taskManagerRef) {      
    PropertySpec pSpec = new PropertySpec();
    pSpec.all= false;
    pSpec.type="Task";
    pSpec.pathSet=
          new String[]
         {"info.entity",
          "info.entityName",
          "info.name",
          "info.state",
          "info.cancelled",
          "info.error"};
    
    ObjectSpec oSpec = new ObjectSpec();
    oSpec.obj = taskManagerRef;
    oSpec.skip= false;
    oSpec.skipSpecified = true;
    
    TraversalSpec tSpec = new TraversalSpec();
    tSpec.type="TaskManager";
    tSpec.path="recentTask";
    tSpec.skip= false;
          
    
    oSpec.selectSet=new SelectionSpec[]{tSpec};      
    
    PropertyFilterSpec pfSpec = new PropertyFilterSpec();      
    pfSpec.propSet=new PropertySpec[]{pSpec};      
    pfSpec.objectSet=new ObjectSpec[]{oSpec};
    
    return new PropertyFilterSpec[]{pfSpec};
 }
   /**
   * Create Property Collector Filter to get names of all 
   * ScheduledTasks the ScheduledTaskManager has.
   * 
   * @return PropertyFilterSpec to get properties
   */
   private PropertyFilterSpec createTaskPropertyFilterSpec() {
      // The traversal spec traverses the "scheduledTask" property of 
      // ScheduledTaskManager to get names of ScheduledTask ManagedEntities
      // A Traversal Spec allows traversal into a ManagedObjects 
      // using a single attribute of the managedObject
      TraversalSpec scheduledTaskTraversal =  new TraversalSpec(); 
      
      scheduledTaskTraversal.type=_scheduleManager.type;
      scheduledTaskTraversal.path= "scheduledTask";
      
      // We want to get values of the scheduleTask property
      // of the scheduledTaskManager, which are the ScheduledTasks
      // so we set skip = false. 
      scheduledTaskTraversal.skip= false;
       scheduledTaskTraversal.skipSpecified = true;
      
      // no further traversal needed once we get to scheduled task list
      scheduledTaskTraversal.selectSet=new SelectionSpec[] { };
      
      scheduledTaskTraversal.name="scheduleManagerToScheduledTasks";
      
      // Setup a PropertySpec to return names of Scheduled Tasks so 
      // we can find the named ScheduleTask ManagedEntity to delete
      // Name is an attribute of ScheduledTaskInfo so 
      // the path set will contain "info.name"
      PropertySpec propSpec = new PropertySpec(); 
      propSpec.all= false;
      propSpec.allSpecified= true;
      propSpec.pathSet= new String[] { "info.name" };
      propSpec.type="ScheduledTask";
      
      // PropertySpecs are wrapped in a PropertySpec array
      // since we only have a propertySpec for the ScheduledTask,
      // the only values we will get back are names of scheduledTasks
      PropertySpec[] propSpecArray = new PropertySpec[] { propSpec };
      
      // Create an Object Spec to specify the starting or root object
      // and the SelectionSpec to traverse to each ScheduledTask in the
      // array of scheduledTasks in the ScheduleManager
      ObjectSpec objSpec = new ObjectSpec();
      objSpec.obj=_scheduleManager;
      objSpec.selectSet= new SelectionSpec[] { scheduledTaskTraversal } ;
      
      // Set skip = true so properties of ScheduledTaskManager 
      // are not returned, and only values of info.name property of 
      // each ScheduledTask is returned
      objSpec.skip = true;
      objSpec.skipSpecified= true;

      // ObjectSpecs used in PropertyFilterSpec are wrapped in an array
      ObjectSpec[] objSpecArray = new ObjectSpec[] { objSpec };
      
      // Create the PropertyFilter spec with 
      // ScheduledTaskManager as "root" object
      PropertyFilterSpec spec = new PropertyFilterSpec();
      spec.propSet = propSpecArray;
      spec.objectSet= objSpecArray;
      return spec;
   }
        /*
         * getProperties --
         * 
         * Retrieves the specified set of properties for the given managed object
         * reference into an array of result objects (returned in the same oder
         * as the property list).
         */
        public static Object[] getProperties(ManagedObjectReference moRef, String[] properties)
        {
            // PropertySpec specifies what properties to
            // retrieve and from type of Managed Object
            PropertySpec pSpec = new PropertySpec();
            pSpec.type = moRef.type;
            pSpec.pathSet = properties;

            // ObjectSpec specifies the starting object and
            // any TraversalSpecs used to specify other objects 
            // for consideration
            ObjectSpec oSpec = new ObjectSpec();
            oSpec.obj = moRef;

            // PropertyFilterSpec is used to hold the ObjectSpec and 
            // PropertySpec for the call
            PropertyFilterSpec pfSpec = new PropertyFilterSpec();
            pfSpec.propSet = new PropertySpec[] { pSpec };
            pfSpec.objectSet = new ObjectSpec[] { oSpec };

            // retrieveProperties() returns the properties
            // selected from the PropertyFilterSpec


            ObjectContent[] ocs = new ObjectContent[20];
            ocs = ecb._svcUtil.retrievePropertiesEx(_sic.propertyCollector, new PropertyFilterSpec[] { pfSpec });

            // Return value, one object for each property specified
            Object[] ret = new Object[properties.Length];

            if (ocs != null)
            {
                for (int i = 0; i < ocs.Length; ++i)
                {
                    ObjectContent oc = ocs[i];
                    DynamicProperty[] dps = oc.propSet;
                    if (dps != null)
                    {
                        for (int j = 0; j < dps.Length; ++j)
                        {
                            DynamicProperty dp = dps[j];
                            // find property path index
                            for (int p = 0; p < ret.Length; ++p)
                            {
                                if (properties[p].Equals(dp.name))
                                {
                                    ret[p] = dp.val;
                                }
                            }
                        }
                    }
                }
            }
            return ret;
        }
Ejemplo n.º 6
0
        protected void AddElement(Profiles.OrderRelationElement element, PropertyBag bag)
        {
            const string category = "Provision¶©¹º";

            string desc = String.Format("ID := {{{0}}}", element.GetAttribute("Code"));
            PropertySpec item = new PropertySpec(element.GetAttribute("Name"), 0, category, desc);

            item.Key = element.GetAttribute("Code");
            #if false
            item.Attributes = new Attribute[] { ReadOnlyAttribute.Yes };
            #endif

            bag.Add(item);
        }
Ejemplo n.º 7
0
        private static PropertySpec GetProperySpecForProperty(PropertyInfo propertyInfo)
        {
            var propertySpec = new PropertySpec(propertyInfo.Name, propertyInfo.PropertyType);
                
            var attributeList = new List<Attribute>();
            foreach(object attrib in propertyInfo.GetCustomAttributes(true))
                if (attrib is Attribute)
                    attributeList.Add(attrib as Attribute);

            if (propertyInfo.GetSetMethod()==null) 
            {
                attributeList.Add(new ReadOnlyAttribute(true));
            }
            propertySpec.Attributes = attributeList.ToArray();
            
            return propertySpec;
        }
Ejemplo n.º 8
0
        protected override bool DoDefineMembers()
        {
            var action = Module.PredefinedTypes.Action.Resolve();

            if (action != null)
            {
                continuation           = AddCompilerGeneratedField("$continuation", new TypeExpression(action, Location), true);
                continuation.ModFlags |= Modifiers.READONLY;
            }

            PredefinedType builder_type;
            PredefinedMember <MethodSpec> bf;
            PredefinedMember <MethodSpec> sr;
            PredefinedMember <MethodSpec> se;
            bool has_task_return_type = false;
            var  pred_members         = Module.PredefinedMembers;

            if (return_type.Kind == MemberKind.Void)
            {
                builder_type = Module.PredefinedTypes.AsyncVoidMethodBuilder;
                bf           = pred_members.AsyncVoidMethodBuilderCreate;
                sr           = pred_members.AsyncVoidMethodBuilderSetResult;
                se           = pred_members.AsyncVoidMethodBuilderSetException;
            }
            else if (return_type == Module.PredefinedTypes.Task.TypeSpec)
            {
                builder_type = Module.PredefinedTypes.AsyncTaskMethodBuilder;
                bf           = pred_members.AsyncTaskMethodBuilderCreate;
                sr           = pred_members.AsyncTaskMethodBuilderSetResult;
                se           = pred_members.AsyncTaskMethodBuilderSetException;
                task         = pred_members.AsyncTaskMethodBuilderTask.Get();
            }
            else
            {
                builder_type         = Module.PredefinedTypes.AsyncTaskMethodBuilderGeneric;
                bf                   = pred_members.AsyncTaskMethodBuilderGenericCreate;
                sr                   = pred_members.AsyncTaskMethodBuilderGenericSetResult;
                se                   = pred_members.AsyncTaskMethodBuilderGenericSetException;
                task                 = pred_members.AsyncTaskMethodBuilderGenericTask.Get();
                has_task_return_type = true;
            }

            set_result    = sr.Get();
            set_exception = se.Get();
            var builder_factory = bf.Get();

            if (!builder_type.Define() || set_result == null || builder_factory == null || set_exception == null)
            {
                Report.Error(1993, Location,
                             "Cannot find compiler required types for asynchronous functions support. Are you targeting the wrong framework version?");
                return(base.DoDefineMembers());
            }

            var bt = builder_type.TypeSpec;

            //
            // Inflate generic Task types
            //
            if (has_task_return_type)
            {
                var task_return_type = return_type.TypeArguments;
                if (mutator != null)
                {
                    task_return_type = mutator.Mutate(task_return_type);
                }

                bt = bt.MakeGenericType(Module, task_return_type);
                builder_factory = MemberCache.GetMember <MethodSpec> (bt, builder_factory);
                set_result      = MemberCache.GetMember <MethodSpec> (bt, set_result);
                set_exception   = MemberCache.GetMember <MethodSpec> (bt, set_exception);

                if (task != null)
                {
                    task = MemberCache.GetMember <PropertySpec> (bt, task);
                }
            }

            builder           = AddCompilerGeneratedField("$builder", new TypeExpression(bt, Location));
            builder.ModFlags |= Modifiers.READONLY;

            if (!base.DoDefineMembers())
            {
                return(false);
            }

            MethodGroupExpr mg;
            var             block = instance_constructors[0].Block;

            //
            // Initialize continuation with state machine method
            //
            if (continuation != null)
            {
                var args = new Arguments(1);
                mg = MethodGroupExpr.CreatePredefined(StateMachineMethod.Spec, spec, Location);
                args.Add(new Argument(mg));

                block.AddStatement(
                    new StatementExpression(new SimpleAssign(
                                                new FieldExpr(continuation, Location),
                                                new NewDelegate(action, args, Location),
                                                Location
                                                )));
            }

            mg = MethodGroupExpr.CreatePredefined(builder_factory, bt, Location);
            block.AddStatement(
                new StatementExpression(new SimpleAssign(
                                            new FieldExpr(builder, Location),
                                            new Invocation(mg, new Arguments(0)),
                                            Location)));

            if (has_task_return_type)
            {
                hoisted_return = LocalVariable.CreateCompilerGenerated(bt.TypeArguments[0], block, Location);
            }

            return(true);
        }
Ejemplo n.º 9
0
        public override bool Resolve(BlockContext bc)
        {
            if (bc.CurrentBlock is Linq.QueryBlock)
            {
                bc.Report.Error(1995, loc,
                                "The `await' operator may only be used in a query expression within the first collection expression of the initial `from' clause or within the collection expression of a `join' clause");
                return(false);
            }

            if (!base.Resolve(bc))
            {
                return(false);
            }

            Arguments args = new Arguments(0);

            type = expr.Type;

            //
            // The await expression is of dynamic type
            //
            if (type.BuiltinType == BuiltinTypeSpec.Type.Dynamic)
            {
                result_type = type;
                expr        = new Invocation(new MemberAccess(expr, "GetAwaiter"), args).Resolve(bc);
                return(true);
            }

            //
            // Check whether the expression is awaitable
            //
            Expression ama = new AwaitableMemberAccess(expr).Resolve(bc);

            if (ama == null)
            {
                return(false);
            }

            var errors_printer = new SessionReportPrinter();
            var old            = bc.Report.SetPrinter(errors_printer);

            ama = new Invocation(ama, args).Resolve(bc);
            bc.Report.SetPrinter(old);

            if (errors_printer.ErrorsCount > 0 || !MemberAccess.IsValidDotExpression(ama.Type))
            {
                bc.Report.Error(1986, expr.Location,
                                "The `await' operand type `{0}' must have suitable GetAwaiter method",
                                expr.Type.GetSignatureForError());

                return(false);
            }

            var awaiter_type = ama.Type;

            expr = ama;

            //
            // Predefined: bool IsCompleted { get; }
            //
            is_completed = MemberCache.FindMember(awaiter_type, MemberFilter.Property("IsCompleted", bc.Module.Compiler.BuiltinTypes.Bool),
                                                  BindingRestriction.InstanceOnly) as PropertySpec;

            if (is_completed == null || !is_completed.HasGet)
            {
                Error_WrongAwaiterPattern(bc, awaiter_type);
                return(false);
            }

            //
            // Predefined: GetResult ()
            //
            // The method return type is also result type of await expression
            //
            get_result = MemberCache.FindMember(awaiter_type, MemberFilter.Method("GetResult", 0,
                                                                                  ParametersCompiled.EmptyReadOnlyParameters, null),
                                                BindingRestriction.InstanceOnly) as MethodSpec;

            if (get_result == null)
            {
                Error_WrongAwaiterPattern(bc, awaiter_type);
                return(false);
            }

            //
            // Predefined: INotifyCompletion.OnCompleted (System.Action)
            //
            var nc = bc.Module.PredefinedTypes.INotifyCompletion;

            if (nc.Define() && !awaiter_type.ImplementsInterface(nc.TypeSpec, false))
            {
                bc.Report.Error(4027, loc, "The awaiter type `{0}' must implement interface `{1}'",
                                awaiter_type.GetSignatureForError(), nc.GetSignatureForError());
                return(false);
            }

            result_type = get_result.ReturnType;

            return(true);
        }
Ejemplo n.º 10
0
 /// <summary>
 /// Make a new PropertySpec for a property named 'propertyName'.
 /// For convenience you can set he 'next' field to form a linked
 /// list of PropertySpecs.
 /// </summary>
 public PropertySpec(string propertyName, PropertySpec next = null)
 {
     Next          = next;
     _propertyName = propertyName;
 }
Ejemplo n.º 11
0
 ///<summary>
 /// Specifications to find all Networks in a Datacenter,
 /// list all VMs on each Network,
 /// list all Hosts on each Network
 ///</summary>
 private static ObjectContent[] getNetworkInfo(
     ManagedObjectReference dcMoRef)
 {
     // PropertySpec specifies what properties to
     // retrieve from what type of Managed Object
     // This spec selects the Network name
     PropertySpec networkPropSpec = new PropertySpec();
     networkPropSpec.type = "Network";
     networkPropSpec.pathSet = new String[] { "name" };
     // This spec selects HostSystem information
     PropertySpec hostPropSpec = new PropertySpec();
     hostPropSpec.type = "HostSystem";
     hostPropSpec.pathSet = new String[] { "network", "name",
         "summary.hardware", "runtime.connectionState",
         "summary.overallStatus", "summary.quickStats" };
     // This spec selects VirtualMachine information
     PropertySpec vmPropSpec = new PropertySpec();
     vmPropSpec.type = "VirtualMachine";
     vmPropSpec.pathSet = new String[] { "network", "name",
         "runtime.host", "runtime.powerState",
         "summary.overallStatus", "summary.quickStats" };
     // The following TraversalSpec and SelectionSpec
     // objects create the following relationship:
     //
     // a. Datacenter -> network
     //   b. Network -> host
     //   c. Network -> vm
     // b. Traverse from a Network through the 'host' property
     TraversalSpec network2host = new TraversalSpec();
     network2host.type = "Network";
     network2host.path = "host";
     // c. Traverse from a Network through the 'vm' property
     TraversalSpec network2vm = new TraversalSpec();
     network2vm.type = "Network";
     network2vm.path = "vm";
     // a. Traverse from a Datacenter through
     // the 'network' property
     TraversalSpec dc2network = new TraversalSpec();
     dc2network.type = "Datacenter";
     dc2network.path = "network";
     dc2network.selectSet = new SelectionSpec[] {
         // Add b. traversal
         network2host,
         // Add c. traversal
         network2vm };
     // ObjectSpec specifies the starting object and
     // any TraversalSpecs used to specify other objects
     // for consideration
     ObjectSpec oSpec = new ObjectSpec();
     oSpec.obj = dcMoRef;
     oSpec.skip = true;
     oSpec.selectSet = new SelectionSpec[] { dc2network };
     // PropertyFilterSpec is used to hold the ObjectSpec and
     // PropertySpec for the call
     PropertyFilterSpec pfSpec = new PropertyFilterSpec();
     pfSpec.propSet = new PropertySpec[] { networkPropSpec,
         hostPropSpec, vmPropSpec };
     pfSpec.objectSet = new ObjectSpec[] { oSpec };
     // RetrieveProperties() returns the properties
     // selected from the PropertyFilterSpec
     return _service.RetrieveProperties(
             _sic.propertyCollector,
             new PropertyFilterSpec[] { pfSpec });
 }
Ejemplo n.º 12
0
        /// <summary>
        /// This code takes an array of [typename, property, property, ...]
        /// and converts it into a ContainerFilterSpec array.
        /// handles case where multiple references to the same typename
        /// are specified.
        /// </summary>
        /// <param name="typeinfo">array pf [typename, property, property, ...]</param>
        /// <returns>array of container property specs</returns>
        public PropertySpec[] BuildPropertySpecArray(
           string[][] typeinfo
        )
        {
            // Eliminate duplicates
            Hashtable tInfo = new Hashtable();
            for (int ti = 0; ti < typeinfo.Length; ++ti)
            {
                Hashtable props = (Hashtable)tInfo[typeinfo[ti][0]];
                if (props == null)
                {
                    props = new Hashtable();
                    tInfo[typeinfo[ti][0]] = props;
                }
                bool typeSkipped = false;
                for (int pi = 0; pi < typeinfo[ti].Length; ++pi)
                {
                    String prop = typeinfo[ti][pi];
                    if (typeSkipped)
                    {
                        if (!props.Contains(prop))
                        {
                            // some value, not important
                            props[prop] = String.Empty;
                        }
                    }
                    else
                    {
                        typeSkipped = true;
                    }
                }
            }

            // Create PropertySpecs
            ArrayList pSpecs = new ArrayList();
            foreach (String type in tInfo.Keys)
            {
                PropertySpec pSpec = new PropertySpec();
                Hashtable props = (Hashtable)tInfo[type];
                pSpec.type = type;
                pSpec.all = props.Count == 0 ? true : false;
                pSpec.pathSet = new String[props.Count];
                int index = 0;
                foreach (String prop in props.Keys)
                {
                    pSpec.pathSet[index++] = prop;
                }
                pSpecs.Add(pSpec);
            }

            return (PropertySpec[])pSpecs.ToArray(typeof(PropertySpec));
        }
Ejemplo n.º 13
0
        protected override bool DoDefineMembers()
        {
            PredefinedType builder_type;
            PredefinedMember <MethodSpec> bf;
            PredefinedMember <MethodSpec> bs;
            PredefinedMember <MethodSpec> sr;
            PredefinedMember <MethodSpec> se;
            PredefinedMember <MethodSpec> sm;
            bool has_task_return_type = false;
            var  pred_members         = Module.PredefinedMembers;

            if (return_type.Kind == MemberKind.Void)
            {
                builder_type = Module.PredefinedTypes.AsyncVoidMethodBuilder;
                bf           = pred_members.AsyncVoidMethodBuilderCreate;
                bs           = pred_members.AsyncVoidMethodBuilderStart;
                sr           = pred_members.AsyncVoidMethodBuilderSetResult;
                se           = pred_members.AsyncVoidMethodBuilderSetException;
                sm           = pred_members.AsyncVoidMethodBuilderSetStateMachine;
            }
            else if (return_type == Module.PredefinedTypes.Task.TypeSpec)
            {
                builder_type = Module.PredefinedTypes.AsyncTaskMethodBuilder;
                bf           = pred_members.AsyncTaskMethodBuilderCreate;
                bs           = pred_members.AsyncTaskMethodBuilderStart;
                sr           = pred_members.AsyncTaskMethodBuilderSetResult;
                se           = pred_members.AsyncTaskMethodBuilderSetException;
                sm           = pred_members.AsyncTaskMethodBuilderSetStateMachine;
                task         = pred_members.AsyncTaskMethodBuilderTask.Get();
            }
            else
            {
                builder_type         = Module.PredefinedTypes.AsyncTaskMethodBuilderGeneric;
                bf                   = pred_members.AsyncTaskMethodBuilderGenericCreate;
                bs                   = pred_members.AsyncTaskMethodBuilderGenericStart;
                sr                   = pred_members.AsyncTaskMethodBuilderGenericSetResult;
                se                   = pred_members.AsyncTaskMethodBuilderGenericSetException;
                sm                   = pred_members.AsyncTaskMethodBuilderGenericSetStateMachine;
                task                 = pred_members.AsyncTaskMethodBuilderGenericTask.Get();
                has_task_return_type = true;
            }

            set_result      = sr.Get();
            set_exception   = se.Get();
            builder_factory = bf.Get();
            builder_start   = bs.Get();

            var istate_machine   = Module.PredefinedTypes.IAsyncStateMachine;
            var set_statemachine = sm.Get();

            if (!builder_type.Define() || !istate_machine.Define() || set_result == null || builder_factory == null ||
                set_exception == null || set_statemachine == null || builder_start == null ||
                !Module.PredefinedTypes.INotifyCompletion.Define())
            {
                Report.Error(1993, Location,
                             "Cannot find compiler required types for asynchronous functions support. Are you targeting the wrong framework version?");
                return(base.DoDefineMembers());
            }

            var bt = builder_type.TypeSpec;

            //
            // Inflate generic Task types
            //
            if (has_task_return_type)
            {
                var task_return_type = return_type.TypeArguments;
                if (mutator != null)
                {
                    task_return_type = mutator.Mutate(task_return_type);
                }

                bt               = bt.MakeGenericType(Module, task_return_type);
                set_result       = MemberCache.GetMember(bt, set_result);
                set_exception    = MemberCache.GetMember(bt, set_exception);
                set_statemachine = MemberCache.GetMember(bt, set_statemachine);

                if (task != null)
                {
                    task = MemberCache.GetMember(bt, task);
                }
            }

            builder = AddCompilerGeneratedField("$builder", new TypeExpression(bt, Location));

            var set_state_machine = new Method(this, new TypeExpression(Compiler.BuiltinTypes.Void, Location),
                                               Modifiers.COMPILER_GENERATED | Modifiers.DEBUGGER_HIDDEN | Modifiers.PUBLIC,
                                               new MemberName("SetStateMachine"),
                                               ParametersCompiled.CreateFullyResolved(
                                                   new Parameter(new TypeExpression(istate_machine.TypeSpec, Location), "stateMachine", Parameter.Modifier.NONE, null, Location),
                                                   istate_machine.TypeSpec),
                                               null);

            ToplevelBlock block = new ToplevelBlock(Compiler, set_state_machine.ParameterInfo, Location);

            block.IsCompilerGenerated = true;
            set_state_machine.Block   = block;

            Members.Add(set_state_machine);

            if (!base.DoDefineMembers())
            {
                return(false);
            }

            //
            // Fabricates SetStateMachine method
            //
            // public void SetStateMachine (IAsyncStateMachine stateMachine)
            // {
            //    $builder.SetStateMachine (stateMachine);
            // }
            //
            var mg = MethodGroupExpr.CreatePredefined(set_statemachine, bt, Location);

            mg.InstanceExpression = new FieldExpr(builder, Location);

            var param_reference = block.GetParameterReference(0, Location);

            param_reference.Type   = istate_machine.TypeSpec;
            param_reference.eclass = ExprClass.Variable;

            var args = new Arguments(1);

            args.Add(new Argument(param_reference));
            set_state_machine.Block.AddStatement(new StatementExpression(new Invocation(mg, args)));

            if (has_task_return_type)
            {
                hoisted_return = LocalVariable.CreateCompilerGenerated(bt.TypeArguments[0], StateMachineMethod.Block, Location);
            }

            return(true);
        }
Ejemplo n.º 14
0
 private static ObjectContent[] getVMInfo(ManagedObjectReference vmMoRef)
 {
     // This spec selects VirtualMachine information
     PropertySpec vmPropSpec = new PropertySpec();
     vmPropSpec.type = "VirtualMachine";
     vmPropSpec.pathSet = new String[] {
       "name",
       "config.guestFullName",
       "config.hardware.memoryMB",
       "config.hardware.numCPU",
       "guest.toolsStatus",
       "guestHeartbeatStatus",
       "guest.ipAddress",
       "guest.hostName",
       "runtime.powerState",
       "summary.quickStats.overallCpuUsage",
       "summary.quickStats.hostMemoryUsage",
       "summary.quickStats.guestMemoryUsage", };
     PropertySpec hostPropSpec = new PropertySpec();
     hostPropSpec.type = "HostSystem";
     hostPropSpec.pathSet = new String[] { "name" };
     PropertySpec taskPropSpec = new PropertySpec();
     taskPropSpec.type = "Task";
     taskPropSpec.pathSet = new String[] { "info.name", "info.completeTime" };
     PropertySpec datastorePropSpec = new PropertySpec();
     datastorePropSpec.type = "Datastore";
     datastorePropSpec.pathSet = new String[] { "info" };
     PropertySpec networkPropSpec = new PropertySpec();
     networkPropSpec.type = "Network";
     networkPropSpec.pathSet = new String[] { "name" };
     TraversalSpec hostTraversalSpec = new TraversalSpec();
     hostTraversalSpec.type = "VirtualMachine";
     hostTraversalSpec.path = "runtime.host";
     TraversalSpec taskTravesalSpec = new TraversalSpec();
     taskTravesalSpec.type = "VirtualMachine";
     taskTravesalSpec.path = "recentTask";
     TraversalSpec datastoreTraversalSpec = new TraversalSpec();
     datastoreTraversalSpec.type = "VirtualMachine";
     datastoreTraversalSpec.path = "datastore";
     TraversalSpec networkTraversalSpec = new TraversalSpec();
     networkTraversalSpec.type = "VirtualMachine";
     networkTraversalSpec.path = "network";
     // ObjectSpec specifies the starting object and
     // any TraversalSpecs used to specify other objects
     // for consideration
     ObjectSpec oSpec = new ObjectSpec();
     oSpec.obj = vmMoRef;
     // Add the TraversalSpec objects to the ObjectSpec
     // This specifies what additional object we want to
     // consider during the process.
     oSpec.selectSet = new SelectionSpec[] {
     hostTraversalSpec,
     taskTravesalSpec,
     datastoreTraversalSpec,
     networkTraversalSpec };
     PropertyFilterSpec pfSpec = new PropertyFilterSpec();
     // Add the PropertySpec objects to the PropertyFilterSpec
     // This specifies what data we want to collect while
     // processing the found objects from the ObjectSpec
     pfSpec.propSet = new PropertySpec[] {
     vmPropSpec,
     hostPropSpec,
     taskPropSpec,
     datastorePropSpec,
     networkPropSpec };
     pfSpec.objectSet = new ObjectSpec[] { oSpec };
     return _service.RetrieveProperties(
        _sic.propertyCollector,
        new PropertyFilterSpec[] { pfSpec });
 }
Ejemplo n.º 15
0
 ///<summary>
 ///Specifications to find all the Datacenters and
 ///retrieve their name, vmFolder and hostFolder values.
 ///</summary>
 private static ObjectContent[] getDatacenters()
 {
     // The PropertySpec object specifies what properties
     // to retrieve from what type of Managed Object
     PropertySpec pSpec = new PropertySpec();
     pSpec.type = "Datacenter";
     pSpec.pathSet = new String[] {
       "name", "vmFolder", "hostFolder" };
     // The following TraversalSpec and SelectionSpec
     // objects create the following relationship:
     //
     // a. Folder -> childEntity
     //   b. recurse to a.
     //
     // This specifies that starting with a Folder
     // managed object, traverse through its childEntity
     // property. For each element in the childEntity
     // property, process by going back to the 'parent'
     // TraversalSpec.
     // SelectionSpec to cause Folder recursion
     SelectionSpec recurseFolders = new SelectionSpec();
     // The name of a SelectionSpec must refer to a
     // TraversalSpec with the same name value.
     recurseFolders.name = "folder2childEntity";
     // Traverse from a Folder through the 'childEntity' property
     TraversalSpec folder2childEntity = new TraversalSpec();
     // Select the Folder type managed object
     folder2childEntity.type = "Folder";
     // Traverse through the childEntity property of the Folder
     folder2childEntity.path = "childEntity";
     // Name this TraversalSpec so the SelectionSpec above
     // can refer to it
     folder2childEntity.name = recurseFolders.name;
     // Add the SelectionSpec above to this traversal so that
     // we will recurse through the tree via the childEntity
     // property
     folder2childEntity.selectSet = new SelectionSpec[] {
   recurseFolders };
     // The ObjectSpec object specifies the starting object and
     // any TraversalSpecs used to specify other objects
     // for consideration
     ObjectSpec oSpec = new ObjectSpec();
     oSpec.obj = _sic.rootFolder;
     // We set skip to true because we are not interested
     // in retrieving properties from the root Folder
     oSpec.skip = true;
     // Specify the TraversalSpec. This is what causes
     // other objects besides the starting object to
     // be considered part of the collection process
     oSpec.selectSet = new SelectionSpec[] { folder2childEntity };
     // The PropertyFilterSpec object is used to hold the
     // ObjectSpec and PropertySpec objects for the call
     PropertyFilterSpec pfSpec = new PropertyFilterSpec();
     pfSpec.propSet = new PropertySpec[] { pSpec };
     pfSpec.objectSet = new ObjectSpec[] { oSpec };
     // RetrieveProperties() returns the properties
     // selected from the PropertyFilterSpec
     return _service.RetrieveProperties(
           _sic.propertyCollector,
           new PropertyFilterSpec[] { pfSpec });
 }
Ejemplo n.º 16
0
 ///<summary>
 /// Specifications to find all the VMs in a Datacenter and
 /// retrieve their name and runtime.powerState values.
 ///</summary>
 private static ObjectContent[] getVMs(ManagedObjectReference dcMoRef)
 {
     // The PropertySpec object specifies what properties
     // retrieve from what type of Managed Object
     PropertySpec pSpec = new PropertySpec();
     pSpec.type = "VirtualMachine";
     pSpec.pathSet = new String[] { "name", "runtime.powerState" };
     SelectionSpec recurseFolders = new SelectionSpec();
     recurseFolders.name = "folder2childEntity";
     TraversalSpec folder2childEntity = new TraversalSpec();
     folder2childEntity.type = "Folder";
     folder2childEntity.path = "childEntity";
     folder2childEntity.name = recurseFolders.name;
     folder2childEntity.selectSet =
        new SelectionSpec[] { recurseFolders };
     // Traverse from a Datacenter through the 'vmFolder' property
     TraversalSpec dc2vmFolder = new TraversalSpec();
     dc2vmFolder.type = "Datacenter";
     dc2vmFolder.path = "vmFolder";
     dc2vmFolder.selectSet =
        new SelectionSpec[] { folder2childEntity };
     ObjectSpec oSpec = new ObjectSpec();
     oSpec.obj = dcMoRef;
     oSpec.skip = true;
     oSpec.selectSet = new SelectionSpec[] { dc2vmFolder };
     PropertyFilterSpec pfSpec = new PropertyFilterSpec();
     pfSpec.propSet = new PropertySpec[] { pSpec };
     pfSpec.objectSet = new ObjectSpec[] { oSpec };
     return _service.RetrieveProperties(_sic.propertyCollector,
           new PropertyFilterSpec[] { pfSpec });
 }
        /// <summary>
        /// Return MOR 
        /// </summary>
        /// <param name="folder">ManagedObjectReference</param>
        /// <param name="type">string</param>
        /// <param name="name">string</param>
        /// <returns>ManagedObjectReference</returns>
        public ManagedObjectReference GetMOREFsInFolderByType(ManagedObjectReference folder, string type,
                                                             string name)
        {

            String propName = "name";
            string[] type1 = new string[2];
            type1[0] = type;
            ManagedObjectReference viewManager = cb._connection._sic.viewManager;
            ManagedObjectReference containerView =
                  cb._connection._service.CreateContainerView(viewManager, folder,
                        type1, true);

            PropertySpec propertySpec = new PropertySpec();
            propertySpec.all = false;
            propertySpec.type = type;
            propertySpec.pathSet = new string[] { propName };

            TraversalSpec ts = new TraversalSpec();
            ts.name = "view";
            ts.path = "view";
            ts.skip = false;
            ts.type = "ContainerView";

            // Now create Object Spec
            ObjectSpec objectSpec = new ObjectSpec();
            objectSpec.obj = containerView;
            objectSpec.skip = true;
            objectSpec.selectSet = new SelectionSpec[] { ts };

            // Create PropertyFilterSpec using the PropertySpec and ObjectPec
            // created above.
            PropertyFilterSpec propertyFilterSpec = new PropertyFilterSpec();
            propertyFilterSpec.propSet = new PropertySpec[] { propertySpec };
            propertyFilterSpec.objectSet = new ObjectSpec[] { objectSpec };

            PropertyFilterSpec[] filterspec = new PropertyFilterSpec[3];
            filterspec[0] = propertyFilterSpec;

            ObjectContent[] ocary =
            cb._svcUtil.retrievePropertiesEx(cb._connection._sic.propertyCollector,
                  filterspec);
            if (ocary == null || ocary.Length == 0)
            {
                return null;
            }

            ObjectContent oc = null;
            ManagedObjectReference mor = null;
            DynamicProperty[] propary = null;
            string propval = null;
            bool found = false;
            for (int oci = 0; oci < ocary.Length && !found; oci++)
            {
                oc = ocary[oci];
                mor = oc.obj;
                propary = oc.propSet;

                if ((type == null) || (type != null && cb._svcUtil.typeIsA(type, mor.type)))
                {
                    if (propary.Length > 0)
                    {
                        propval = (string)propary[0].val;
                    }

                    found = propval != null && name.Equals(propval);
                    propval = null;
                }
            }

            if (!found)
            {
                mor = null;
            }

            return mor;
        }
Ejemplo n.º 18
0
        public override bool Resolve(BlockContext bc)
        {
            if (!base.Resolve(bc))
            {
                return(false);
            }

            Arguments args = new Arguments(0);

            type = expr.Type;

            //
            // The await expression is of dynamic type
            //
            if (type.BuiltinType == BuiltinTypeSpec.Type.Dynamic)
            {
                result_type = type;

                awaiter = ((AsyncTaskStorey)machine_initializer.Storey).AddAwaiter(type, loc);

                expr = new Invocation(new MemberAccess(expr, "GetAwaiter"), args).Resolve(bc);
                return(true);
            }

            //
            // Check whether the expression is awaitable
            //
            Expression ama = new AwaitableMemberAccess(expr).Resolve(bc);

            if (ama == null)
            {
                return(false);
            }

            var errors_printer = new SessionReportPrinter();
            var old            = bc.Report.SetPrinter(errors_printer);

            ama = new Invocation(ama, args).Resolve(bc);
            bc.Report.SetPrinter(old);

            if (errors_printer.ErrorsCount > 0 || !MemberAccess.IsValidDotExpression(ama.Type))
            {
                bc.Report.Error(1986, expr.Location,
                                "The `await' operand type `{0}' must have suitable GetAwaiter method",
                                expr.Type.GetSignatureForError());

                return(false);
            }

            var awaiter_type = ama.Type;

            awaiter = ((AsyncTaskStorey)machine_initializer.Storey).AddAwaiter(awaiter_type, loc);

            expr = ama;

            //
            // Predefined: bool IsCompleted { get; }
            //
            is_completed = MemberCache.FindMember(awaiter_type, MemberFilter.Property("IsCompleted", bc.Module.Compiler.BuiltinTypes.Bool),
                                                  BindingRestriction.InstanceOnly) as PropertySpec;

            if (is_completed == null || !is_completed.HasGet)
            {
                Error_WrongAwaiterPattern(bc, awaiter_type);
                return(false);
            }

            //
            // Predefined: OnCompleted (Action)
            //
            if (bc.Module.PredefinedTypes.Action.Define())
            {
                on_completed = MemberCache.FindMember(awaiter_type, MemberFilter.Method("OnCompleted", 0,
                                                                                        ParametersCompiled.CreateFullyResolved(bc.Module.PredefinedTypes.Action.TypeSpec), bc.Module.Compiler.BuiltinTypes.Void),
                                                      BindingRestriction.InstanceOnly) as MethodSpec;

                if (on_completed == null)
                {
                    Error_WrongAwaiterPattern(bc, awaiter_type);
                    return(false);
                }
            }

            //
            // Predefined: GetResult ()
            //
            // The method return type is also result type of await expression
            //
            get_result = MemberCache.FindMember(awaiter_type, MemberFilter.Method("GetResult", 0,
                                                                                  ParametersCompiled.EmptyReadOnlyParameters, null),
                                                BindingRestriction.InstanceOnly) as MethodSpec;

            if (get_result == null)
            {
                Error_WrongAwaiterPattern(bc, awaiter_type);
                return(false);
            }

            result_type = get_result.ReturnType;

            return(true);
        }
 static ObjectContent[] getVMInfo(ManagedObjectReference vmMoRef)
 {
     // This spec selects VirtualMachine information
     PropertySpec vmPropSpec = new PropertySpec();
     vmPropSpec.type = "VirtualMachine";
     vmPropSpec.pathSet = new String[]{"name","config.guestFullName","summary.quickStats.overallCpuUsage","summary.quickStats.hostMemoryUsage","summary.quickStats.guestMemoryUsage"};
     PropertySpec hostPropSpec = new PropertySpec();
     hostPropSpec.type = "HostSystem";
     hostPropSpec.pathSet = new String[] { "name", "summary.quickStats.overallCpuUsage", "summary.quickStats.overallMemoryUsage", };
     TraversalSpec hostTraversalSpec = new TraversalSpec();
     hostTraversalSpec.type = "VirtualMachine";
     hostTraversalSpec.path = "runtime.host";
     ObjectSpec oSpec = new ObjectSpec();
     oSpec.obj = vmMoRef;
     oSpec.selectSet = new SelectionSpec[]{hostTraversalSpec};
     PropertyFilterSpec pfSpec = new PropertyFilterSpec();
     pfSpec.propSet = new PropertySpec[]{vmPropSpec,hostPropSpec};
     pfSpec.objectSet = new ObjectSpec[]{oSpec};
     return _service.RetrieveProperties(_sic.propertyCollector,new PropertyFilterSpec[]{pfSpec});
 }
Ejemplo n.º 20
0
 public void SetProperty(PropertySpec property, object propertyValue)
 {
     Context.SetProperty(this, property, propertyValue);
 }
Ejemplo n.º 21
0
      /// <summary>
      /// Get Container contents for all childEntities accessible from rootFolder
      /// </summary>
      public void GetContainerContents() {
         // Create a Filter Spec to Retrieve Contents for...
        
          TraversalSpec rpToVm = new TraversalSpec();
          rpToVm.name = "rpToVm";
          rpToVm.type = "ResourcePool";
          rpToVm.path = "vm";
          rpToVm.skip = false;


          // Recurse through all ResourcePools

          TraversalSpec rpToRp = new TraversalSpec();
          rpToRp.name = "rpToRp";
          rpToRp.type = "ResourcePool";
          rpToRp.path = "resourcePool";
          rpToRp.skip = false;

          rpToRp.selectSet = new SelectionSpec[] { new SelectionSpec(), new SelectionSpec() };
          rpToRp.selectSet[0].name = "rpToRp";
          rpToRp.selectSet[1].name = "rpToVm";


          // Traversal through ResourcePool branch
          TraversalSpec crToRp = new TraversalSpec();
          crToRp.name = "crToRp";
          crToRp.type = "ComputeResource";
          crToRp.path = "resourcePool";
          crToRp.skip = false;
          crToRp.selectSet = new SelectionSpec[] { new SelectionSpec(), new SelectionSpec() };
          crToRp.selectSet[0].name = "rpToRp";
          crToRp.selectSet[1].name = "rpToVm";


          // Traversal through host branch
          TraversalSpec crToH = new TraversalSpec();
          crToH.name = "crToH";
          crToH.type = "ComputeResource";
          crToH.path = "host";
          crToH.skip = false;


          // Traversal through hostFolder branch
          TraversalSpec dcToHf = new TraversalSpec();
          dcToHf.name = "dcToHf";
          dcToHf.type = "Datacenter";
          dcToHf.path = "hostFolder";
          dcToHf.skip = false;
          dcToHf.selectSet = new SelectionSpec[] { new SelectionSpec() };
          dcToHf.selectSet[0].name = "visitFolders";


          // Traversal through vmFolder branch
          TraversalSpec dcToVmf = new TraversalSpec();
          dcToVmf.name = "dcToVmf";
          dcToVmf.type = "Datacenter";
          dcToVmf.path = "vmFolder";
          dcToVmf.skip = false;
          dcToVmf.selectSet = new SelectionSpec[] { new SelectionSpec() };
          dcToVmf.selectSet[0].name = "visitFolders";


          // Recurse through all Hosts
          TraversalSpec HToVm = new TraversalSpec();
          HToVm.name = "HToVm";
          HToVm.type = "HostSystem";
          HToVm.path = "vm";
          HToVm.skip = false;
          HToVm.selectSet = new SelectionSpec[] { new SelectionSpec() };
          HToVm.selectSet[0].name = "visitFolders";


          // Recurse thriugh the folders
          TraversalSpec visitFolders = new TraversalSpec();
          visitFolders.name = "visitFolders";
          visitFolders.type = "Folder";
          visitFolders.path = "childEntity";
          visitFolders.skip = false;
          visitFolders.selectSet = new SelectionSpec[] { new SelectionSpec(), new SelectionSpec(), new SelectionSpec(), new SelectionSpec(), new SelectionSpec(), new SelectionSpec(), new SelectionSpec() };
          visitFolders.selectSet[0].name = "visitFolders";
          visitFolders.selectSet[1].name = "dcToHf";
          visitFolders.selectSet[2].name = "dcToVmf";
          visitFolders.selectSet[3].name = "crToH";
          visitFolders.selectSet[4].name = "crToRp";
          visitFolders.selectSet[5].name = "HToVm";
          visitFolders.selectSet[6].name = "rpToVm";
          SelectionSpec[] selectionSpecs = new SelectionSpec[] { visitFolders, dcToVmf, dcToHf, crToH, crToRp, rpToRp, HToVm, rpToVm };

         PropertySpec[] propspecary = new PropertySpec[] { new PropertySpec() };
         propspecary[0].all = false;
         propspecary[0].allSpecified = true;
         propspecary[0].pathSet = new string[] { "name" };
         propspecary[0].type = "ManagedEntity";

         PropertyFilterSpec spec = new PropertyFilterSpec();
         spec.propSet = propspecary;
         spec.objectSet = new ObjectSpec[] { new ObjectSpec() };
         spec.objectSet[0].obj = _rootFolder;
         spec.objectSet[0].skip = false;
         spec.objectSet[0].selectSet =  selectionSpecs;

         // Recursively get all ManagedEntity ManagedObjectReferences 
         // and the "name" property for all ManagedEntities retrieved
         ObjectContent[] ocary = 
            _service.RetrieveProperties(
               _propCol, new PropertyFilterSpec[] { spec }
            );

         // If we get contents back. print them out.
         if (ocary != null) {
            ObjectContent oc = null;
            ManagedObjectReference mor = null;
            DynamicProperty[] pcary = null;
            DynamicProperty pc = null;
            for (int oci = 0; oci < ocary.Length; oci++) {
               oc = ocary[oci];
               mor = oc.obj;
               pcary = oc.propSet;

               Console.WriteLine("Object Type : " + mor.type);
               Console.WriteLine("Reference Value : " + mor.Value);

               if (pcary != null) {
                  for (int pci = 0; pci < pcary.Length; pci++) {
                     pc = pcary[pci];
                     Console.WriteLine("   Property Name : " + pc.name);
                     if (pc != null) {
                        if (!pc.val.GetType().IsArray) {
                           Console.WriteLine("   Property Value : " + pc.val);
                        } 
                        else {
                           Array ipcary = (Array)pc.val;
                           Console.WriteLine("Val : " + pc.val);
                           for (int ii = 0; ii < ipcary.Length; ii++) {
                              object oval = ipcary.GetValue(ii);
                              if (oval.GetType().Name.IndexOf("ManagedObjectReference") >= 0) {
                                 ManagedObjectReference imor = (ManagedObjectReference)oval;

                                 Console.WriteLine("Inner Object Type : " + imor.type);
                                 Console.WriteLine("Inner Reference Value : " + imor.Value);
                              } 
                              else {
                                 Console.WriteLine("Inner Property Value : " + oval);
                              }
                           }
                        }
                     }
                  }
               }
            }
         } 
         else {
            Console.WriteLine("No Managed Entities retrieved!");
         }
      }
Ejemplo n.º 22
0
 private Object[] getProperties(VimService service,
                           ManagedObjectReference moRef,
                           String[] properties)
 {
     PropertySpec pSpec = new PropertySpec();
     pSpec.type = moRef.type;
     pSpec.pathSet = properties;
     ObjectSpec oSpec = new ObjectSpec();
     oSpec.obj = moRef;
     PropertyFilterSpec pfSpec = new PropertyFilterSpec();
     pfSpec.propSet = (new PropertySpec[] { pSpec });
     pfSpec.objectSet = (new ObjectSpec[] { oSpec });
     ObjectContent[] ocs
        = service.RetrieveProperties(sic.propertyCollector,
                                     new PropertyFilterSpec[] { pfSpec });
     Object[] ret = new Object[properties.Length];
     if (ocs != null)
     {
         for (int i = 0; i < ocs.Length; ++i)
         {
             ObjectContent oc = ocs[i];
             DynamicProperty[] dps = oc.propSet;
             if (dps != null)
             {
                 for (int j = 0; j < dps.Length; ++j)
                 {
                     DynamicProperty dp = dps[j];
                     for (int p = 0; p < ret.Length; ++p)
                     {
                         if (properties[p].Equals(dp.name))
                         {
                             ret[p] = dp.val;
                         }
                     }
                 }
             }
         }
     }
     return ret;
 }
Ejemplo n.º 23
0
 private static ObjectContent[] getHosts(ManagedObjectReference dcMoRef)
 {
     // PropertySpec specifies what properties to
     // retrieve from what type of Managed Object
     PropertySpec pSpec = new PropertySpec();
     pSpec.type = "HostSystem";
     pSpec.pathSet = new String[] { "name", "runtime.connectionState" };
     SelectionSpec recurseFolders = new SelectionSpec();
     recurseFolders.name = "folder2childEntity";
     TraversalSpec computeResource2host = new TraversalSpec();
     computeResource2host.type = "ComputeResource";
     computeResource2host.path = "host";
     TraversalSpec folder2childEntity = new TraversalSpec();
     folder2childEntity.type = "Folder";
     folder2childEntity.path = "childEntity";
     folder2childEntity.name = recurseFolders.name;
     // Add BOTH of the specifications to this specification
     folder2childEntity.selectSet = new SelectionSpec[] { recurseFolders };
     // Traverse from a Datacenter through
     // the 'hostFolder' property
     TraversalSpec dc2hostFolder = new TraversalSpec();
     dc2hostFolder.type = "Datacenter";
     dc2hostFolder.path = "hostFolder";
     dc2hostFolder.selectSet = new SelectionSpec[] { folder2childEntity };
     ObjectSpec oSpec = new ObjectSpec();
     oSpec.obj = dcMoRef;
     oSpec.skip = true;
     oSpec.selectSet = new SelectionSpec[] { dc2hostFolder };
     PropertyFilterSpec pfSpec = new PropertyFilterSpec();
     pfSpec.propSet = new PropertySpec[] { pSpec };
     pfSpec.objectSet = new ObjectSpec[] { oSpec };
     return _service.RetrieveProperties(
           _sic.propertyCollector,
              new PropertyFilterSpec[] { pfSpec });
 }
        /// <summary>
        /// Get MOR of Datacenter
        /// </summary>
        /// <param name="dsMor">ManagedObjectReference</param>
        /// <returns>ManagedObjectReference</returns>
        private ManagedObjectReference getDatacenterOfDatastore(ManagedObjectReference dsMor)
        {
            ManagedObjectReference datacenter = null;

            // Create Property Spec
            PropertySpec propertySpec = new PropertySpec();
            propertySpec.all = false;
            propertySpec.type = "Datacenter";
            propertySpec.pathSet = new string[] { "name" };

            // Now create Object Spec
            ObjectSpec objectSpec = new ObjectSpec();
            objectSpec.obj = dsMor;
            objectSpec.skip = true;
            objectSpec.selectSet = buildTraversalSpecForDatastoreToDatacenter();

            // Create PropertyFilterSpec using the PropertySpec and ObjectPec
            // created above.
            PropertyFilterSpec propertyFilterSpec = new PropertyFilterSpec();
            propertyFilterSpec.propSet = new PropertySpec[] { propertySpec };
            propertyFilterSpec.objectSet = new ObjectSpec[] { objectSpec };

            PropertyFilterSpec[] propertyFilterSpecs =
                  new PropertyFilterSpec[] { propertyFilterSpec };

            ObjectContent[] oCont =
                    cb._svcUtil.retrievePropertiesEx(cb._connection._sic.propertyCollector,
                          propertyFilterSpecs);

            if (oCont != null)
            {
                foreach (ObjectContent oc in oCont)
                {
                    datacenter = oc.obj;
                    break;
                }
            }
            return datacenter;
        }
Ejemplo n.º 25
0
 public string GetUri(PropertySpec property, object value)
 {
     return("http://todo");
 }
Ejemplo n.º 26
0
        public TaskWaiter(PropertyManager pm, ManagedObjectReference task)
        {
            _task = task;
            _pm = pm;

            ObjectSpec oSpec = new ObjectSpec();
            oSpec.obj = task;
            oSpec.skip = false; oSpec.skipSpecified = true;

            PropertySpec pSpec = new PropertySpec();
            pSpec.all = false; pSpec.allSpecified = true;
            pSpec.pathSet = new String[] { "info.error", "info.state" };
            pSpec.type = task.type;

            _pfSpec = new PropertyFilterSpec();
            _pfSpec.objectSet = new ObjectSpec[] { oSpec };
            _pfSpec.propSet = new PropertySpec[] { pSpec };
        }
Ejemplo n.º 27
0
        public override void Init(ObjectData data)
        {
            var version = LevelData.Game.MappingsVersion;
            var art     = LevelData.ReadFile("../Levels/AIZ/Nemesis Art/Swing Vine.bin", CompressionType.Nemesis);
            var map     = LevelData.ASMToBin("../Levels/AIZ/Misc Object Data/Map - (&MHZ) Ride Vine.asm", version);

            frames = new Sprite[34];
            for (int frame = 0; frame < frames.Length; frame++)
            {
                frames[frame] = ObjectHelper.MapToBmp(art, map, frame, 0);
            }

            spriteData    = new int[16][][];
            spriteData[5] = new[]
            {
                new int[] { 0, -15, -30, -46, -62, -78, -94, -109, -124, -137, -148, -159, -168, -174, -180, -187 },
                new int[] { 4, 10, 16, 19, 19, 20, 17, 11, 5, -4, -15, -26, -39, -54, -69, -86 },
                new int[] { 33, 6, 6, 7, 8, 8, 9, 10, 10, 11, 12, 12, 13, 14, 14, 15 }
            };
            spriteData[6] = new[]
            {
                new int[] { 0, -13, -28, -43, -59, -75, -91, -107, -122, -137, -150, -163, -174, -183, -192, -202 },
                new int[] { 4, 13, 19, 25, 28, 28, 29, 26, 20, 14, 5, -4, -15, -28, -41, -57 },
                new int[] { 33, 5, 6, 6, 7, 8, 8, 9, 10, 10, 11, 11, 12, 13, 13, 14 }
            };
            spriteData[7] = new[]
            {
                new int[] { 0, -11, -22, -35, -48, -63, -78, -94, -110, -126, -142, -158, -174, -189, -204, -221 },
                new int[] { 4, 15, 26, 35, 44, 50, 56, 59, 62, 62, 63, 60, 57, 51, 45, 35 },
                new int[] { 33, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11 }
            };
            spriteData[8] = new[]
            {
                new int[] { 0, -6, -12, -21, -30, -39, -48, -59, -70, -81, -92, -105, -118, -131, -144, -163 },
                new int[] { 4, 19, 34, 47, 60, 73, 86, 97, 108, 119, 130, 139, 148, 157, 166, 172 },
                new int[] { 33, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6 }
            };
            spriteData[9] = new[]
            {
                new int[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                new int[] { 4, 20, 36, 52, 68, 84, 100, 116, 132, 148, 164, 180, 196, 212, 228, 244 },
                new int[] { 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
            };
            spriteData[10] = new[]
            {
                new int[] { -1, 5, 11, 17, 26, 35, 44, 53, 64, 75, 86, 97, 110, 123, 136, 146 },
                new int[] { 4, 19, 34, 49, 62, 75, 88, 101, 112, 123, 134, 145, 154, 163, 172, 181 },
                new int[] { 33, 30, 30, 30, 29, 29, 29, 29, 28, 28, 28, 28, 27, 27, 27, 27 }
            };
            spriteData[11] = new[]
            {
                new int[] { -1, 10, 21, 34, 47, 62, 77, 93, 109, 125, 141, 157, 173, 188, 203, 213 },
                new int[] { 4, 15, 26, 35, 44, 50, 56, 59, 62, 62, 63, 60, 57, 51, 45, 35 },
                new int[] { 33, 28, 28, 27, 27, 26, 26, 25, 25, 24, 24, 23, 23, 22, 22, 21 }
            };
            spriteData[12] = new[]
            {
                new int[] { -1, 12, 27, 42, 58, 74, 90, 106, 121, 136, 149, 162, 173, 182, 191, 194 },
                new int[] { 4, 13, 19, 25, 28, 28, 29, 26, 20, 14, 5, -4, -15, -28, -41, -57 },
                new int[] { 33, 27, 26, 26, 25, 24, 24, 23, 22, 22, 21, 21, 20, 19, 19, 18 }
            };
            spriteData[13] = new[]
            {
                new int[] { -1, 12, 27, 43, 59, 75, 91, 106, 121, 134, 145, 156, 165, 171, 177, 177 },
                new int[] { 4, 13, 19, 22, 22, 23, 20, 14, 8, -1, -12, -23, -36, -51, -66, -83 },
                new int[] { 33, 27, 26, 25, 24, 24, 23, 22, 22, 21, 20, 20, 19, 18, 18, 17 }
            };

            spriteData[14] = spriteData[12];
            spriteData[15] = spriteData[11];
            spriteData[0]  = spriteData[10];
            spriteData[1]  = spriteData[9];
            spriteData[2]  = spriteData[8];
            spriteData[3]  = spriteData[7];
            spriteData[4]  = spriteData[6];

            properties = new PropertySpec[2];
            subtypes   = new ReadOnlyCollection <byte>(new byte[0]);
            sprite     = SpriteFromSpriteData(0, 0);

            properties[0] = new PropertySpec("Length", typeof(int), "Extended",
                                             "The number of rope segments in the object.", null,
                                             (obj) => obj.SubType & 0x0F,
                                             (obj, value) => obj.SubType = (byte)((obj.SubType & 0xF0) | (int)value & 0x0F));

            properties[1] = new PropertySpec("Offset", typeof(int), "Extended",
                                             "The starting point of the object's movement cycle.", null,
                                             (obj) => (obj.SubType & 0xF0) >> 4,
                                             (obj, value) => obj.SubType = (byte)((obj.SubType & 0x0F) | (((int)value << 4) & 0xF0)));
        }