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