コード例 #1
0
        /// <summary>
        /// Set task as completed
        /// </summary>
        public BaseResponse LogEndTaskExecution(SchedulerTaskType type)
        {
            SchedulerQueue schedulerQueue = Uow.SchedulerQueues.GetLastByType(type, SchedulerDestination);

            if (schedulerQueue != null)
            {
                Uow.SchedulerQueues.FinishAndChangeStatus(schedulerQueue, SchedulerExecutionStatus.Success);

                if (schedulerQueue.Dependencies != null)
                {
                    foreach (SchedulerTaskType schedulerTaskType in schedulerQueue.Dependencies)
                    {
                        SchedulerQueue item = Uow.SchedulerQueues.GetLastByType(schedulerTaskType, SchedulerDestination);
                        if (item != null)
                        {
                            long changedLockerMask = item.LockerMask & (~schedulerQueue.TaskType.GetLockerMask());
                            Uow.SchedulerQueues.ChangeLockerMask(item, changedLockerMask);
                        }
                    }
                }

                return(BaseResponse.Success());
            }

            return(BaseResponse.Error(ErrorCode.SchedulerQueueItemNotFound));
        }
コード例 #2
0
        public int Setup(int deviceId, DeviceType t, StreamType streamType,
                         int sampleRate, SampleFormatType format, int numChannels,
                         int dwChannelMask,
                         MMCSSCallType mmcssCall, MMThreadPriorityType threadPriority,
                         SchedulerTaskType schedulerTask, ShareMode shareMode, DataFeedMode dataFeedMode,
                         int latencyMillisec, int zeroFlushMillisec, int timePeriodHandredNanosec,
                         bool isFormatSupportedCall)
        {
            var args = new SetupArgs();

            args.deviceType               = (int)t;
            args.streamType               = (int)streamType;
            args.sampleRate               = sampleRate;
            args.sampleFormat             = (int)format;
            args.numChannels              = numChannels;
            args.dwChannelMask            = dwChannelMask;
            args.mmcssCall                = (int)mmcssCall;
            args.mmThreadPriority         = (int)threadPriority;
            args.schedulerTask            = (int)schedulerTask;
            args.shareMode                = (int)shareMode;
            args.dataFeedMode             = (int)dataFeedMode;
            args.latencyMillisec          = latencyMillisec;
            args.timePeriodHandledNanosec = timePeriodHandredNanosec;
            args.zeroFlushMillisec        = zeroFlushMillisec;
            args.isFormatSupportedCall    = isFormatSupportedCall ? 1 : 0;
            return(WasapiIO_Setup(mId, deviceId, ref args));
        }
コード例 #3
0
        public SchedulerQueue GetLastByType(SchedulerTaskType type, string destination)
        {
            SchedulerQueue schedulerQueue =
                GetAll()
                .Where(item => item.TaskType == type &&
                       item.Destination == destination &&
                       item.StopDate == null)
                .OrderByDescending(item => item.PlannedDate)
                .FirstOrDefault();

            return(schedulerQueue);
        }
コード例 #4
0
        /// <summary>
        /// Set task as executing
        /// </summary>
        public BaseResponse LogStartTaskExecution(SchedulerTaskType type)
        {
            SchedulerQueue schedulerQueue = Uow.SchedulerQueues.GetLastByType(type, SchedulerDestination);

            if (schedulerQueue != null)
            {
                Uow.SchedulerQueues.StartAndChangeStatus(schedulerQueue, SchedulerExecutionStatus.Executing);

                return(BaseResponse.Success());
            }

            return(BaseResponse.Error(ErrorCode.SchedulerQueueItemNotFound));
        }
コード例 #5
0
        public List <SchedulerQueue> GetLastsByType(SchedulerTaskType type, string destination, int count)
        {
            List <SchedulerQueue> schedulerQueues =
                GetAll()
                .Where(item => item.TaskType == type &&
                       item.Destination == destination &&
                       item.Status != SchedulerExecutionStatus.Terminated)
                .OrderByDescending(item => item.PlannedDate)
                .Take(count)
                .ToList();

            return(schedulerQueues);
        }
コード例 #6
0
        /// <summary>
        /// Set task as completed with exception
        /// </summary>
        public BaseResponse LogTaskException(SchedulerTaskType type, Exception exception)
        {
            SchedulerQueue schedulerQueue = Uow.SchedulerQueues.GetLastByType(type, SchedulerDestination);

            if (schedulerQueue != null)
            {
                Uow.SchedulerQueues.FinishAndChangeStatus(schedulerQueue, SchedulerExecutionStatus.Failed);
                schedulerQueue.Description = string.Format("InnerException: {0}; StackTrace: {1}", exception.InnerException, exception.StackTrace);

                return(BaseResponse.Success());
            }

            return(BaseResponse.Error(ErrorCode.SchedulerQueueItemNotFound));
        }
コード例 #7
0
 public void ChangeStatus(SchedulerTaskType type, SchedulerExecutionStatus fromStatus, SchedulerExecutionStatus toStatus, string destination, bool setStopDate = false)
 {
     if (!setStopDate)
     {
         Update(
             Query.And(
                 Query <SchedulerQueue> .EQ(e => e.TaskType, type),
                 Query <SchedulerQueue> .EQ(e => e.Status, fromStatus),
                 Query <SchedulerQueue> .EQ(e => e.Destination, destination)),
             Update <SchedulerQueue> .Set(e => e.Status, toStatus));
     }
     else
     {
         Update(
             Query.And(
                 Query <SchedulerQueue> .EQ(e => e.TaskType, type),
                 Query <SchedulerQueue> .EQ(e => e.Status, fromStatus),
                 Query <SchedulerQueue> .EQ(e => e.Destination, destination)),
             Update <SchedulerQueue>
             .Set(e => e.Status, toStatus)
             .Set(e => e.StopDate, DateTime.UtcNow));
     }
 }
コード例 #8
0
        public static long GetLockerMask(this SchedulerTaskType schedulerTaskType)
        {
            long mask = 0x0000000000000001 << (int)schedulerTaskType;

            return(mask);
        }
コード例 #9
0
 public int Setup(int deviceId, DeviceType t, StreamType streamType,
     int sampleRate, SampleFormatType format, int numChannels,
     MMCSSCallType mmcssCall, MMThreadPriorityType threadPriority,
     SchedulerTaskType schedulerTask, ShareMode shareMode, DataFeedMode dataFeedMode,
     int latencyMillisec, int zeroFlushMillisec, int timePeriodHandredNanosec)
 {
     var args = new SetupArgs();
     args.deviceType = (int)t;
     args.streamType = (int)streamType;
     args.sampleRate = sampleRate;
     args.sampleFormat = (int)format;
     args.numChannels = numChannels;
     args.mmcssCall = (int)mmcssCall;
     args.mmThreadPriority = (int)threadPriority;
     args.schedulerTask = (int)schedulerTask;
     args.shareMode = (int)shareMode;
     args.dataFeedMode = (int)dataFeedMode;
     args.latencyMillisec = latencyMillisec;
     args.timePeriodHandledNanosec = timePeriodHandredNanosec;
     args.zeroFlushMillisec = zeroFlushMillisec;
     return WasapiIO_Setup(mId, deviceId, ref args);
 }
コード例 #10
0
        public SchedulerTask GetByType(SchedulerTaskType type, string destination)
        {
            SchedulerTask schedulerTask = GetAll().FirstOrDefault(item => item.Type == type && item.Destination == destination);

            return(schedulerTask);
        }