예제 #1
0
        public void Update(int completionCode, nm_get_cups_data_output_t output)
        {
            TList.Clear();

            GetCupsDataFunctionInput input = Function.Input as GetCupsDataFunctionInput;

            switch (input.Parameter.Value)
            {
            case nm_get_cups_data_parameter_t.CUPS_PARAMETER_INDEX:
                Add(new NMPRK_Types.U16("Index", output.index.index, false));
                break;

            case nm_get_cups_data_parameter_t.CUPS_PARAMETER_DYNAMIC:
                Add(new NMPRK_Types.U16("CPU", output.dynamic.cpu, false));
                Add(new NMPRK_Types.U16("Memory", output.dynamic.memory, false));
                Add(new NMPRK_Types.U16("IO", output.dynamic.io, false));
                break;

            case nm_get_cups_data_parameter_t.CUPS_PARAMETER_BASE:
                Add(new NMPRK_Types.U64("CPU", output.baseData.cpu));
                Add(new NMPRK_Types.U64("Memory", output.baseData.memory));
                Add(new NMPRK_Types.U64("IO", output.baseData.io));
                break;

            case nm_get_cups_data_parameter_t.CUPS_PARAMETER_AGGREGATE:
                Add(new NMPRK_Types.U64("CPU", output.aggregate.cpu));
                Add(new NMPRK_Types.U64("Memory", output.aggregate.memory));
                Add(new NMPRK_Types.U64("IO", output.aggregate.io));
                break;
            }
        }
예제 #2
0
        //public override string Structure{ get { return "typedef struct nm_get_policy_output_t\n{\n\tunion {\n\t\tstruct {\n\t\t\tnm_policy_info_t info;\n\t\t\tbool_t perDomainPolicyControlEnabled;\n\t\t\tbool_t globalPolicyControlEnabled;\n\t\t\tbool_t policyCreatedByOtherClient;\n\t\t} standard;\n\t\tstruct {\n\t\t\tbool_t valid;\n\t\t\tbyte_t nextValidPolicyId;\n\t\t\tbyte_t numberOfDefinedPoliciesForDomain;\n\t\t} policy_id_invalid;\n\t\tstruct {\n\t\t\tbool_t valid;\n\t\t\tbyte_t nextValidDomainId;\n\t\t\tbyte_t numberOfAvailableDomains;\n\t\t} domain_id_invalid;\n\t} u;\n} nm_get_policy_output_t;"; } }

        public void Update(int completionCode, nm_get_policy_output_t output)
        {
            TList.Clear();

            switch (completionCode)
            {
            case 0:
                Add(new NMPRK_Types.Enum <nm_domain_id_t>("Domain", output.standard.info.domain));
                Add(new NMPRK_Types.Bool("Policy Enabled", output.standard.info.policyEnabled));
                Add(new NMPRK_Types.Bool("Per Domain Policy Control", output.standard.perDomainPolicyControlEnabled));
                Add(new NMPRK_Types.Bool("Global Policy Control", output.standard.globalPolicyControlEnabled));
                Add(new NMPRK_Types.Bool("Policy Created By Other Client", output.standard.policyCreatedByOtherClient));
                Add(new NMPRK_Types.Enum <nm_policy_trigger_type_t>("Policy Trigger Type", output.standard.info.policyTriggerType));
                Add(new NMPRK_Types.Bool("Policy Exception - Shutdown", output.standard.info.policyExceptionActionShutdown));
                Add(new NMPRK_Types.Bool("Policy Exception - Send Alert", output.standard.info.policyExceptionActionSendAlert));
                Add(new NMPRK_Types.U16("Power Limit", output.standard.info.policyTargetLimit, false));
                Add(new NMPRK_Types.U32("Correction Time Limit", output.standard.info.correctionTimeLimit, false));
                Add(new NMPRK_Types.U16("Policy Trigger Limit", output.standard.info.policyTriggerLimit, false));
                Add(new NMPRK_Types.U16("Statistics Reporting Period", output.standard.info.statisticsReportingPeriod, false));
                break;

            case 0x80:
                Add(new NMPRK_Types.U8("Next Valid Policy ID", output.policy_id_invalid.nextValidPolicyId));
                Add(new NMPRK_Types.U8("Number Of Defined Policies For Domain", output.policy_id_invalid.numberOfDefinedPoliciesForDomain));
                break;

            case 0x81:
                Add(new NMPRK_Types.U8("Next Valid Domain ID", output.domain_id_invalid.nextValidDomainId));
                Add(new NMPRK_Types.U8("Number Of Available Domains", output.domain_id_invalid.numberOfAvailableDomains));
                break;
            }
        }
예제 #3
0
        //public override string Structure{ get { return "typedef struct nm_ipmi_device_id_t {\n\tbyte_t deviceId;\n\tuint_t deviceRev;\n\tbool_t deviceProvidesSdr;\n\tuint_t firmwareRev;\n\tbool_t devNormOp;\n\tuint_t firmwareRev2;\n\tbyte_t ipmiVersion;\n\tbool_t isSensorDev;\n\tbool_t isSdrRepoDev;\n\tbool_t isSelDev;\n\tbool_t isFruInvDev; \n\tbool_t isIpmbRevDev;\n\tbool_t isIpmbGenDev;\n\tbool_t isBridgeDev;\n\tbool_t isChassisDev;\n\tbyte_t manufId[3];\n\tbyte_t productId[2];\n} nm_ipmi_device_id_t;"; } }

        public void Update(int completionCode, nm_ipmi_device_id_t output)
        {
            TList.Clear();

            switch (completionCode)
            {
            case 0:
                Add(new NMPRK_Types.U8("Device ID", output.deviceId));
                Add(new NMPRK_Types.Bool("Device Provides SDRs", output.deviceProvidesSdr));
                Add(new NMPRK_Types.U32("Device Revision", output.deviceRev));
                Add(new NMPRK_Types.U32("Firmware Revision 1", output.firmwareRev));
                Add(new NMPRK_Types.Bool("Device Available", output.devNormOp));
                Add(new NMPRK_Types.U32("Firmware Revision 1", output.firmwareRev2));
                Add(new NMPRK_Types.U32("IPMI Version", output.ipmiVersion));
                Add(new NMPRK_Types.Bool("Chassis Device", output.isChassisDev));
                Add(new NMPRK_Types.Bool("Bridge Device", output.isBridgeDev));
                Add(new NMPRK_Types.Bool("IPMB Event Generator", output.isIpmbGenDev));
                Add(new NMPRK_Types.Bool("IPMB Event Receiver", output.isIpmbRevDev));
                Add(new NMPRK_Types.Bool("FRU Inventory Device", output.isFruInvDev));
                Add(new NMPRK_Types.Bool("SEL Device", output.isSelDev));
                Add(new NMPRK_Types.Bool("SDR Repository Device", output.isSdrRepoDev));
                Add(new NMPRK_Types.Bool("Sensor Device", output.isSensorDev));
                Add(new NMPRK_Types.ByteArray("Manufacturer ID", output.manufId));
                Add(new NMPRK_Types.ByteArray("Product ID", output.productId));
                break;
            }
        }
예제 #4
0
        public void Update(int completionCode, nm_get_cups_capabilities_output_t output)
        {
            TList.Clear();

            Add(new NMPRK_Types.Bool("CUPS Feature Enabled", output.cupsEnabled));
            Add(new NMPRK_Types.Bool("CUPS Policies Available", output.cupsPoliciesAvailable));
            Add(new NMPRK_Types.U8("CUPS Version", output.cupsVersion, false));
        }
예제 #5
0
        public void Update(int completionCode, nm_get_power_characterization_range_output_t output)
        {
            TList.Clear();

            Add(new NMPRK_Types.U32("Timestamp", output.timestamp));
            Add(new NMPRK_Types.U16("Max Power Draw", output.maxPowerDraw, false));
            Add(new NMPRK_Types.U16("Min Power Draw", output.minPowerDraw, false));
            Add(new NMPRK_Types.U16("Efficient Power Draw", output.effPowerDraw, false));
        }
예제 #6
0
        public void Update(int completionCode, nm_get_cups_policies_output_t output)
        {
            TList.Clear();

            Add(new NMPRK_Types.Bool("Enable Policy", output.policy.policyEnabled));
            Add(new NMPRK_Types.Bool("Volatile Storage", output.policy.policyStorageVolatileMemory));
            Add(new NMPRK_Types.Bool("Enable Alert", output.policy.sendAlertEnabled));
            Add(new NMPRK_Types.U8("CUPS Threshold", output.policy.cupsThreshold, false));
            Add(new NMPRK_Types.U16("Averaging Window", output.policy.averagingWindow, false));
        }
예제 #7
0
        //public override string Structure{ get { return "ushort_t recordId;"; } }

        public void Update(int completionCode, ushort output)
        {
            TList.Clear();

            switch (completionCode)
            {
            case 0:
                Add(new NMPRK_Types.U16("Record ID", output));
                break;
            }
        }
예제 #8
0
        //public override string Structure{ get { return "int_t *length;"; } }

        public void Update(int completionCode, int length)
        {
            TList.Clear();

            switch (completionCode)
            {
            case 0:
                Add(new NMPRK_Types.U32("Length", (uint)length, false));
                break;
            }
        }
예제 #9
0
        public void Update(int completionCode, nm_get_cups_configuration_output_t output)
        {
            TList.Clear();

            Add(new NMPRK_Types.Bool("CUPS Feature Enabled", output.config.cupsEnabled));
            Add(new NMPRK_Types.Bool("Load Factor Static", output.config.loadFactorTypeToggle));
            Add(new NMPRK_Types.U16("Static Core Load Factor", output.config.staticCoreLoadFactor, false));
            Add(new NMPRK_Types.U16("Static Memory Load Factor", output.config.staticMemoryLoadFactor, false));
            Add(new NMPRK_Types.U16("Static IO Load Factor", output.config.staticIoLoadFactor, false));
            Add(new NMPRK_Types.U8("Sample Count", output.config.sampleCount, false));
        }
예제 #10
0
        //public override string Structure{ get { return "typedef struct nm_ipmi_fru_info_t\n{\n\tushort_t fruSize;\n\tbool_t accessByWord;\n} nm_ipmi_fru_info_t;"; } }

        public void Update(int completionCode, nm_ipmi_fru_info_t output)
        {
            TList.Clear();

            switch (completionCode)
            {
            case 0:
                Add(new NMPRK_Types.U16("FRU Size", output.fruSize, false));
                Add(new NMPRK_Types.Bool("Access By Word", output.accessByWord));
                break;
            }
        }
예제 #11
0
        //public override string Structure{ get { return "int_t *length;\nbyte_t *data"; } }

        public void Update(int completionCode, int length, byte[] data)
        {
            TList.Clear();

            switch (completionCode)
            {
            case 0:
                Add(new NMPRK_Types.U32("Length", (uint)length, false));
                Add(new NMPRK_Types.ByteArray("Data", data));
                break;
            }
        }
예제 #12
0
        //public override string Structure{ get { return "typedef struct nmprk_acpi_power_state_t\n{\n\tipmi_acpi_system_power_state_t systemState;\n\tipmi_acpi_device_power_state_t deviceState;\n} nmprk_acpi_power_state_t;"; } }

        public void Update(int completionCode, ipmi_acpi_power_state_t state)
        {
            TList.Clear();

            switch (completionCode)
            {
            case 0:
                Add(new NMPRK_Types.Enum <ipmi_acpi_system_power_state_t>("System Power State", state.systemState));
                Add(new NMPRK_Types.Enum <ipmi_acpi_device_power_state_t>("Device Power State", state.deviceState));
                break;
            }
        }
예제 #13
0
파일: RPGData.cs 프로젝트: PenpenLi/Hifior
 /// <summary>
 /// 载入路径下所有继承ScriptableObject的T类
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="TList"></param>
 /// <param name="path"></param>
 /// <param name="postfix"></param>
 public static void LoadDefAssetAtPath <T>(ref List <T> TList, string path, string postfix) where T : ScriptableObject
 {
     if (TList == null)
     {
         TList = new List <T>();
     }
     TList.Clear();
     string[] defs = (ScriptableObjectUtility.GetFiles(path, postfix));
     foreach (string defFileName in defs)
     {
         TList.Add(AssetDatabase.LoadAssetAtPath <T>(defFileName));
     }
 }
예제 #14
0
        //public override string Structure{ get { return "typedef struct nm_ipmi_sel_entry_t\n{\n\tushort_t nextEntry;\n\tbyte_t data[1024];\n\tuint_t len; \n} nm_ipmi_sel_entry_t;"; } }

        public void Update(int completionCode, ushort nextEntry, nm_ipmi_sel_entry_t output)
        {
            TList.Clear();

            switch (completionCode)
            {
            case 0:

                Add(new NMPRK_Types.U16("Next Entry", nextEntry));
                Add(new NMPRK_Types.U32("Length", output.len));
                Add(new NMPRK_Types.ByteArray("Data", output.data.Take((int)output.len).ToArray()));
                break;
            }
        }
예제 #15
0
        //public override string Structure{ get { return "typedef struct nm_get_policy_alert_thresholds_output_t\n{\n\tbyte_t numberOfAlertThresholds;\n\tushort_t alertThresholdsArray[3];\n} nm_get_policy_alert_thresholds_output_t;"; } }

        public void Update(int completionCode, nm_get_policy_alert_thresholds_output_t output)
        {
            TList.Clear();

            switch (completionCode)
            {
            case 0:
                Add(new NMPRK_Types.U8("Number of Alert Thresholds", output.numberOfAlertThresholds, false));
                Add(new NMPRK_Types.U16("Alert Threshold 1", output.alertThresholdsArray[0], false));
                Add(new NMPRK_Types.U16("Alert Threshold 2", output.alertThresholdsArray[1], false));
                Add(new NMPRK_Types.U16("Alert Threshold 3", output.alertThresholdsArray[2], false));
                break;
            }
        }
예제 #16
0
        //public override string Structure{ get { return "typedef struct nm_get_policy_suspend_periods_output_t\n{\n\tbyte_t numberOfSuspendPeriods;\n\tnm_policy_suspend_period_t suspendPeriods[5];\n} nm_get_policy_suspend_periods_output_t;"; } }

        public void Update(int completionCode, nm_get_policy_suspend_periods_output_t output)
        {
            TList.Clear();

            switch (completionCode)
            {
            case 0:
                Add(new NMPRK_Types.U8("Number of Suspend Periods", output.numberOfSuspendPeriods, false));
                for (int i = 0; i < output.numberOfSuspendPeriods; i++)
                {
                    Add(new NMPRK_Types.Struct_nm_policy_suspend_period_t("Suspend Period " + (i + 1), output.suspendPeriods[i]));
                }
                break;
            }
        }
예제 #17
0
        //public override string Structure{ get { return "typedef struct nm_get_version_output_t\n{\n\tbyte_t version;\n\tbyte_t ipmiVersion;\n\tbyte_t patchVersion;\n\tbyte_t majorFirmwareRevision;\n\tbyte_t minorFirmwareRevision;\n} nm_get_version_output_t;"; } }

        public void Update(int completionCode, nm_get_version_output_t output)
        {
            TList.Clear();

            switch (completionCode)
            {
            case 0:
                Add(new NMPRK_Types.U8("Node Manager Version", output.version));
                Add(new NMPRK_Types.U8("IPMI Version", output.ipmiVersion));
                Add(new NMPRK_Types.U8("Patch Version", output.patchVersion));
                Add(new NMPRK_Types.U8("Major Firmware Version", output.majorFirmwareRevision));
                Add(new NMPRK_Types.U8("Minor Firmware Version", output.minorFirmwareRevision));
                break;
            }
        }
예제 #18
0
        //public override string Structure{ get { return "typedef struct nm_get_alert_destination_output_t\n{\n\tnm_alert_destination_t alertDestination;\n} nm_get_alert_destination_output_t;"; } }

        public void Update(int completionCode, nm_get_alert_destination_output_t output)
        {
            TList.Clear();

            switch (completionCode)
            {
            case 0:
                Add(new NMPRK_Types.U8("Channel Number", output.alertDestination.channelNumber));
                Add(new NMPRK_Types.Bool("Unregister Alert Receiver", output.alertDestination.destinationInformationReceiver));
                Add(new NMPRK_Types.U8("Destination Selector", output.alertDestination.i2cSlaveAddressDestSelector));
                Add(new NMPRK_Types.U8("Alert String Selector", output.alertDestination.alertStringSelector));
                Add(new NMPRK_Types.Bool("Send Alert String", output.alertDestination.sendAlertString));
                break;
            }
        }
예제 #19
0
        //public override string Structure{ get { return "typedef struct nm_ipmi_record_t\n{\n\tushort_t nextRecord;\n\tbyte_t data[1024];\n\tunsigned int len;  \n} nm_ipmi_record_t;"; } }

        public void Update(int completionCode, ushort nextRecord, nm_ipmi_sdr_record_t output)
        {
            TList.Clear();

            switch (completionCode)
            {
            case 0:
                Add(new NMPRK_Types.U16("Next Record", nextRecord));
                Add(new NMPRK_Types.U16("Record ID", output.recordId));
                Add(new NMPRK_Types.U8("Version", output.version));
                Add(new NMPRK_Types.U8("Type", output.type));
                Add(new NMPRK_Types.U32("Length", output.len));
                Add(new NMPRK_Types.ByteArray("Data", output.data.Take((int)output.len).ToArray()));
                break;
            }
        }
예제 #20
0
        //public override string Structure{ get { return "typedef struct nm_discovery_parameters_t\n{\n\tbyte_t channel;\n\tbyte_t address;\n\tbyte_t nmHealthEvSensor;\n\tbyte_t nmExceptionEvSensor;\n\tbyte_t nmOperationalCapSensor;\n\tbyte_t nmAlertThresExcdSensor;\n} nm_discovery_parameters_t;"; } }

        public void Update(int completionCode, nm_discovery_parameters_t output)
        {
            TList.Clear();

            switch (completionCode)
            {
            case 0:
                Add(new NMPRK_Types.U8("Address", output.address));
                Add(new NMPRK_Types.U8("Channel", output.channel));
                Add(new NMPRK_Types.U8("Health Event Sensor", output.nmHealthEvSensor));
                Add(new NMPRK_Types.U8("Exception Event Sensor", output.nmExceptionEvSensor));
                Add(new NMPRK_Types.U8("Operational Cap. Sensor", output.nmOperationalCapSensor));
                Add(new NMPRK_Types.U8("Alert Threshold Exceeded Sensor", output.nmAlertThresExcdSensor));
                break;
            }
        }
예제 #21
0
        //public override string Structure{ get { return "typedef struct nm_get_capabilities_output_t\n{\n\tbyte_t maxConcurrentSettings;\n\tushort_t maxValue;\n\tushort_t minValue;\n\tuint_t minCorrectionTime;\n\tuint_t maxCorrectionTime;\n\tushort_t minStatisticsReportingPeriod;\n\tushort_t maxStatisticsReportingPeriod;\n\tnm_domain_id_t domainLimitingScope;\n\tbool_t limitingBasedOn;\n} nm_get_capabilities_output_t;"; } }

        public void Update(int completionCode, nm_get_capabilities_output_t output)
        {
            TList.Clear();

            switch (completionCode)
            {
            case 0:
                Add(new NMPRK_Types.U8("Max Concurrent Settings", output.maxConcurrentSettings, false));
                Add(new NMPRK_Types.U16("Max Value", output.maxValue, false));
                Add(new NMPRK_Types.U16("Min Value", output.minValue, false));
                Add(new NMPRK_Types.U32("Min Correction Time", output.minCorrectionTime, false));
                Add(new NMPRK_Types.U32("Max Correction Time", output.maxCorrectionTime, false));
                Add(new NMPRK_Types.U16("Min Statistics Reporting Period", output.minStatisticsReportingPeriod, false));
                Add(new NMPRK_Types.U16("Max Statistics Reporting Period", output.maxStatisticsReportingPeriod, false));
                Add(new NMPRK_Types.Enum <nm_domain_id_t>("Domain Limiting Scope", output.domainLimitingScope));
                Add(new NMPRK_Types.Bool("Limiting based on", output.limitingBasedOn));
                break;
            }
        }
예제 #22
0
        //public override string Structure{ get { return "typedef struct nm_ipmi_repo_info_t {\n\tbyte_t repoVersion;\n\tunsigned int repoEntries;\n\tunsigned int repoFreeSpace;\n\ttm mostRecentAddTS;\n\ttm mostRecentDelTS;\n\tbool getAllocInfoSup;\n\tbool reserveSup;\n\tbool parAddSup;\n\tbool delSup;\n\tbool nonmodalSupported;\n\tbool modalSupported;\n} nm_ipmi_repo_info_t;"; } }

        public void Update(int completionCode, nm_ipmi_repo_info_t output)
        {
            TList.Clear();

            switch (completionCode)
            {
            case 0:
                Add(new NMPRK_Types.U8("Version", output.repoVersion));
                Add(new NMPRK_Types.U32("Entries", output.repoEntries, false));
                Add(new NMPRK_Types.U32("Free Space", output.repoFreeSpace, false));
                // TODO: mostRecentAddTS
                // TODO: mostRecentDelTS
                Add(new NMPRK_Types.Bool("Get SEL Repository Allocation Information Support", output.getAllocInfoSup));
                Add(new NMPRK_Types.Bool("Reserve SEL Repository Support", output.reserveSup));
                Add(new NMPRK_Types.Bool("Partial Add SEL Support", output.parAddSup));
                Add(new NMPRK_Types.Bool("Delete SEL Support", output.delSup));
                break;
            }
        }
예제 #23
0
        //public override string Structure{ get { return "typedef struct nm_get_statistics_output_t\n{\n\tushort_t currentValue;\n\tushort_t minimumValue;\n\tushort_t maximumValue;\n\tushort_t averageValue;\n\tuint_t timestamp;\n\tuint_t statisticsReportingPeriod;\n\tnm_domain_id_t domain;\n\tbool_t policyGlobalAdministrativeState;\n\tbool_t policyOperationalState;\n\tbool_t measurementsState;\n\tbool_t policyActivationState;\n} nm_get_statistics_output_t;"; } }

        public void Update(int completionCode, nm_get_statistics_output_t output)
        {
            TList.Clear();

            switch (completionCode)
            {
            case 0:
                Add(new NMPRK_Types.U16("Current Value", output.currentValue, false));
                Add(new NMPRK_Types.U16("Minimum Value", output.minimumValue, false));
                Add(new NMPRK_Types.U16("Maximum Value", output.maximumValue, false));
                Add(new NMPRK_Types.U16("Average Value", output.averageValue, false));
                Add(new NMPRK_Types.U32("Timestamp", output.timestamp));
                Add(new NMPRK_Types.U32("Statistics Reporting Period", output.statisticsReportingPeriod, false));
                Add(new NMPRK_Types.Enum <nm_domain_id_t>("Domain", output.domain));
                Add(new NMPRK_Types.Bool("Policy/Global Admin State", output.policyGlobalAdministrativeState));
                Add(new NMPRK_Types.Bool("Policy Operational State", output.policyOperationalState));
                Add(new NMPRK_Types.Bool("Measurements State", output.measurementsState));
                Add(new NMPRK_Types.Bool("Policy Activation State", output.policyActivationState));
                break;
            }
        }
예제 #24
0
        internal static void Main()
        {
            //// adding element + AutoGrow()
            TList<int> somelist = new TList<int>(2);
            somelist.Add(1);
            somelist.Add(2);
            somelist.Add(3);

            //// removing element by index
            somelist.RemoveAt(1);

            //// inserting element at given position
            somelist.InsertAt(0, 0);

            //// accessing element by index (I feel so sleepy that I dont't see 2)
            for (int i = 0; i < somelist.Count; i++)
            {
                Console.WriteLine(somelist[i]);
            }

            //// finding element by its value
            Console.WriteLine(somelist.Contains(3));

            ////ToString override
            Console.WriteLine(somelist.ToString());

            //// Min and max value
            int minValue = somelist.Min();
            int maxValue = somelist.Max();

            Console.WriteLine("MinValue = {0}\nMaxValue = {1}\n", minValue, maxValue);

            ////Clear list - List is empty & nothing is printed
            somelist.Clear();
            for (int i = 0; i < somelist.Count; i++)
            {
                Console.WriteLine(somelist[i]);
            }
        }
예제 #25
0
        /// <summary>
        /// Processes the queue
        /// </summary>
        public void ProcessQueue()
        {
            try
            {
                // exit if shutting down
                if (this.WantExit)
                    return;

                // get all the items from the queue, then reset counter
                ItemList = WorkItemQ.DequeueAll();
                m_ItemsInQueue = 0;

                // set time
                CurrentTime = DateTime.Now.Ticks;

                // loop through the items and process them
                Parallel.ForEach(ItemList, x =>
                {
                    try
                    {
                        // exit if wanting exit
                        if (this.WantExit)
                            return;

                        // decide which queue the items go to
                        if (new TimeSpan(x.ExecutionTime.Ticks - CurrentTime).TotalMilliseconds <= MyScheduleEngine.FastTimeMs)
                            FastList.Add(x);
                        else
                            ReAddList.Add(x);
                    }

                    catch (Exception excep)
                    {
                        MyScheduleEngine.AddExceptionToQueue(excep);
                    }
                });
            }

            catch (ThreadAbortException)
            {
            }

            catch (Exception excep)
            {
                MyScheduleEngine.AddExceptionToQueue(excep);
            }

            finally
            {
                // add the list of items back to the queue
                if (!this.WantExit)
                {
                    if (ReAddList.Count > 0)
                        WorkItemQ.EnqueueAll(ReAddList);
                    if (FastList.Count > 0)
                        MyScheduleEngine.FastSched.AddItemsToQueue(FastList.ToList());
                    ReAddList.Clear();
                    FastList.Clear();
                    ItemList.Clear();
                }
            }
        }
예제 #26
0
        /// <summary>
        /// Processes the queue
        /// </summary>
        public void ProcessQueue()
        {
            try
            {
                // exit if shutting down
                if (this.WantExit)
                    return;

                // get all the items from the queue, then reset counter
                ItemList = WorkItemQ.DequeueAll();
                m_ItemsInQueue = 0;

                // set time
                CurrentTime = DateTime.Now.Ticks;

                // loop through the items and process them
                Parallel.ForEach(ItemList, x =>
                    {
                        try
                        {
                            // if not time yet, add back to the queue
                            if (x.ExecutionTime.Ticks > CurrentTime)
                            {
                                // add the item to the list, then skip this iteration
                                ReAddList.Add(x);
                                return;
                            }

                            // process the item
                            Task.Factory.StartNew(x.Execute);
                            WorkItemsExecuted++;
                        }

                        catch (Exception excep)
                        {
                            MyScheduleEngine.AddExceptionToQueue(excep);
                        }
                    });
            }

            catch (ThreadAbortException)
            {
            }

            catch (Exception excep)
            {
                MyScheduleEngine.AddExceptionToQueue(excep);
            }

            finally
            {
                // add the list of items back to the queue
                if (!this.WantExit)
                {
                    if (ReAddList.Count > 0)
                        WorkItemQ.EnqueueAll(ReAddList);
                    ReAddList.Clear();
                    ItemList.Clear();
                }
            }
        }