示例#1
0
        private static FindFreeBusyScheduleRequest GenerateFreeBusyScheduleRequest(FreeBusyRequest freeBusyRequest, List <GraphPerson> interviewers)
        {
            var request = new FindFreeBusyScheduleRequest()
            {
                Schedules = interviewers.Select(interviewer => interviewer.Email).ToList(),
                AvailabilityViewInterval = SchedulerConstants.ThirtyMinuteFreeBusy,
                StartTime = new Models.MeetingDateTime {
                    DateTime = freeBusyRequest.UtcStart.ToString(), TimeZone = SchedulerConstants.UTCTimezone
                },
                EndTime = new Models.MeetingDateTime {
                    DateTime = freeBusyRequest.UtcEnd.ToString(), TimeZone = SchedulerConstants.UTCTimezone
                },
            };

            return(request);
        }
示例#2
0
        private static async System.Threading.Tasks.Task <List <FindFreeBusyScheduleResponse> > SendPostFindFreeBusySchedule(string token, FindFreeBusyScheduleRequest findFreeBusyRequest)
        {
            var findFreeBusyResponsePayload = new FindFreeBusyScheduleResponsePayload();
            var findFreeBusyResponses       = new List <FindFreeBusyScheduleResponse>();
            var graphResourceId             = "https://graph.microsoft.com";

            using (var httpClient = new HttpClient())
            {
                httpClient.DefaultRequestHeaders.Authorization = await GetBearerTokenFromUserToken(token, TokenCachingOptions.ForceRefreshCache);

                // Serialize the request object.
                var tasks     = new List <Task>();
                var schedules = findFreeBusyRequest.Schedules;
                foreach (var scheduleBatch in Chunk(schedules, 20))
                {
                    tasks.Add(Task.Run(async() =>
                    {
                        for (int i = 1; i <= 5; i++)
                        {
                            findFreeBusyRequest.Schedules = (List <string>)scheduleBatch;
                            var requestData = JsonConvert.SerializeObject(findFreeBusyRequest, jsonSerializerSettings);
                            using (var response = await httpClient.PostAsync(graphResourceId + "/v1.0/me/calendar/getschedule", new StringContent(requestData, Encoding.UTF8, "application/json")))
                            {
                                var responseHeaders = response.Headers.ToString();
                                //this.Trace.TraceInformation($"Response headers for find meeting times are {responseHeaders}");
                                if (response.IsSuccessStatusCode)
                                {
                                    // Read and deserialize response.
                                    var content = await response.Content.ReadAsStringAsync();

                                    findFreeBusyResponsePayload = JsonConvert.DeserializeObject <FindFreeBusyScheduleResponsePayload>(content, jsonSerializerSettings);

                                    if (findFreeBusyResponsePayload.Value?.Count > 0)
                                    {
                                        findFreeBusyResponses.AddRange(findFreeBusyResponsePayload.Value);
                                    }
                                    i = 5;
                                }
                                else
                                {
                                    string content = string.Empty;
                                    if (response != null)
                                    {
                                        content = await response.Content.ReadAsStringAsync();
                                    }

                                    if (i < 5)// && EmailUtils.ShouldRetryOnGraphException(response.StatusCode))
                                    {
                                        //this.Trace.TraceWarning($"Attempt {i} : Exception during {HttpMethod.Post.Method}:{this.graphResourceId}/me/calendar/getschedule call to graph. Response {response.StatusCode.ToString()} with error message {content}");
                                        //await EmailUtils.ExponentialDelay(response, i);
                                    }
                                    else
                                    {
                                        //this.Trace.TraceError($"Exception during {HttpMethod.Post.Method}:{this.graphBaseUrl}/me/getschedule call to graph. Response {response.StatusCode.ToString()} with error message {content}");
                                        break;
                                    }
                                }
                            }
                        }
                    }));
                }
                Task.WaitAll(tasks.ToArray());
                findFreeBusyRequest.Schedules = schedules;
            }
            return(findFreeBusyResponses);
        }