Exemplo n.º 1
0
        public async Task <PendingActivity> GetPendingActivity(string activityName, string workerId, TimeSpan?timeout = null)
        {
            var endTime   = _dateTimeProvider.UtcNow.Add(timeout ?? TimeSpan.Zero);
            var firstPass = true;
            EventSubscription subscription = null;

            while ((subscription == null && _dateTimeProvider.UtcNow < endTime) || firstPass)
            {
                if (!firstPass)
                {
                    await Task.Delay(100);
                }
                subscription = await _subscriptionRepository.GetFirstOpenSubscription(Event.EventTypeActivity, activityName, _dateTimeProvider.Now);

                if (subscription != null)
                {
                    if (!await _lockProvider.AcquireLock($"sub:{subscription.Id}", CancellationToken.None))
                    {
                        subscription = null;
                    }
                }
                firstPass = false;
            }
            if (subscription == null)
            {
                return(null);
            }

            try
            {
                var token  = Token.Create(subscription.Id, subscription.EventKey);
                var result = new PendingActivity
                {
                    Token        = token.Encode(),
                    ActivityName = subscription.EventKey,
                    Parameters   = subscription.SubscriptionData,
                    TokenExpiry  = DateTime.MaxValue
                };

                if (!await _subscriptionRepository.SetSubscriptionToken(subscription.Id, result.Token, workerId, result.TokenExpiry))
                {
                    return(null);
                }

                return(result);
            }
            finally
            {
                await _lockProvider.ReleaseLock($"sub:{subscription.Id}");
            }
        }
Exemplo n.º 2
0
 private void GetActivityViewModelList(List <Activity> activityList, string courseId)
 {
     foreach (var activity in activityList)
     {
         ActivityViewModel activityViewModel = new ActivityViewModel(activity);
         activityViewModel.CourseId = courseId;
         if (activity.Status == 1)
         {
             PendingActivity.Add(activityViewModel);
         }
         else if (activity.Status == 2)
         {
             OverDueActivity.Add(activityViewModel);
         }
         else if (activity.Status == 3)
         {
             CompletedActivity.Add(activityViewModel);
         }
     }
 }
Exemplo n.º 3
0
        public ParticipantCourseDetailViewModel(CourseViewModel selectedCourse)
        {
            this._SelectedCourse = selectedCourse;
            GetActivityViewModelList(this._SelectedCourse.ActivityList, selectedCourse.CourseId);

            MessagingCenter.Subscribe <AssessmentSubmitViewModel> (this, "ActivityCompleted", (sender) => {
                foreach (var activity in PendingActivity)
                {
                    if (activity.ActivityId.Equals(sender.ActivityId) && activity.CourseId.Equals(sender.CourseId))
                    {
                        activity.Status = 3;
                        PendingActivity.Remove(activity);
                        CompletedActivity.Add(activity);
                        break;
                    }
                }
                RaisePropertyChanged("CanShowPending");
                RaisePropertyChanged("CanShowCompleted");
                RaisePropertyChanged(() => CompletedActivity);
                RaisePropertyChanged(() => PendingActivity);
            });
        }