示例#1
0
        protected override IAsyncResult BeginInvoke()
        {
            this.service.UserAgent = this.GetUserAgent();
            MailboxData[] array = new MailboxData[this.queryList.Count];
            for (int i = 0; i < this.queryList.Count; i++)
            {
                this.queryList[i].Target = this.Url;
                array[i] = new MailboxData(this.queryList[i].Email);
            }
            ProxyWebRequest.ProxyWebRequestTracer.TraceDebug <object, RequestType, string>((long)this.GetHashCode(), "{0}: Sending request {1} to {2}", TraceContext.Get(), this.requestType, this.url);
            this.serverRequestId = Microsoft.Exchange.Diagnostics.Trace.TraceCasStart(CasTraceEventType.Availability);
            if (this.service.SupportsProxyAuthentication)
            {
                this.proxyAuthenticator.Authenticate((CustomSoapHttpClientProtocol)this.service);
            }
            this.webServiceCallTimer = Stopwatch.StartNew();
            Stopwatch    stopwatch = Stopwatch.StartNew();
            IAsyncResult result    = base.Application.BeginProxyWebRequest(this.service, array, new AsyncCallback(base.Complete), null);

            stopwatch.Stop();
            this.queryList.LogLatency("PWRBI", stopwatch.ElapsedMilliseconds);
            return(result);
        }
示例#2
0
        private void ExecuteMeetingSuggestionsQuery(AvailabilityQueryResult result)
        {
            AvailabilityQuery.MeetingSuggestionsTracer.TraceDebug((long)this.GetHashCode(), "{0}: Entering AvailabilityQuery.ExecuteMeetingSuggestionsQuery()", new object[]
            {
                TraceContext.Get()
            });
            base.RequestLogger.AppendToLog <int>("suggest", 1);
            try
            {
                MeetingSuggester meetingSuggester = new MeetingSuggester();
                meetingSuggester.SetOptionsFromSuggestionsViewOptions(this.desiredSuggestionsView, base.ClientContext.TimeZone);
                List <AttendeeData> list  = new List <AttendeeData>(this.mailboxArray.Length);
                List <int>[]        array = new List <int> [this.mailboxArray.Length];
                int num = 0;
                for (int i = 0; i < this.freeBusyQueryArray.Length; i++)
                {
                    MailboxData   mailboxData   = this.mailboxArray[i];
                    FreeBusyQuery freeBusyQuery = this.freeBusyQueryArray[i];
                    List <int>    list2         = new List <int>();
                    switch (freeBusyQuery.AttendeeKind)
                    {
                    case AttendeeKind.Individual:
                    case AttendeeKind.Unknown:
                        this.AddAttendeeDataToList(mailboxData, freeBusyQuery, list);
                        list2.Add(num);
                        num++;
                        break;

                    case AttendeeKind.Group:
                        if (freeBusyQuery.GroupMembersForSuggestions != null)
                        {
                            foreach (FreeBusyQuery freeBusyQuery2 in freeBusyQuery.GroupMembersForSuggestions)
                            {
                                this.AddAttendeeDataToList(mailboxData, freeBusyQuery2, list);
                                list2.Add(num);
                                num++;
                            }
                        }
                        else
                        {
                            this.AddAttendeeDataToList(mailboxData, freeBusyQuery, list);
                            list2.Add(num);
                            num++;
                        }
                        break;
                    }
                    array[i] = list2;
                }
                AttendeeData[] attendees = list.ToArray();
                Duration       detailedSuggestionsWindow = this.desiredSuggestionsView.DetailedSuggestionsWindow;
                result.DailyMeetingSuggestions = meetingSuggester.GetSuggestionsByDateRange(new ExDateTime(base.ClientContext.TimeZone, detailedSuggestionsWindow.StartTime), new ExDateTime(base.ClientContext.TimeZone, detailedSuggestionsWindow.EndTime), base.ClientContext.TimeZone, this.desiredSuggestionsView.MeetingDurationInMinutes, attendees);
                foreach (SuggestionDayResult suggestionDayResult in result.DailyMeetingSuggestions)
                {
                    foreach (Suggestion suggestion in suggestionDayResult.SuggestionArray)
                    {
                        AttendeeConflictData[] array2 = new AttendeeConflictData[this.mailboxArray.Length];
                        for (int m = 0; m < this.freeBusyQueryArray.Length; m++)
                        {
                            FreeBusyQuery freeBusyQuery3 = this.freeBusyQueryArray[m];
                            List <int>    list3          = array[m];
                            switch (freeBusyQuery3.AttendeeKind)
                            {
                            case AttendeeKind.Individual:
                            {
                                int num2 = list3[0];
                                array2[m] = suggestion.AttendeeConflictDataArray[num2];
                                break;
                            }

                            case AttendeeKind.Group:
                                if (freeBusyQuery3.GroupMembersForSuggestions != null)
                                {
                                    int num3 = 0;
                                    int num4 = 0;
                                    int num5 = 0;
                                    foreach (int num6 in list3)
                                    {
                                        IndividualAttendeeConflictData individualAttendeeConflictData = (IndividualAttendeeConflictData)suggestion.AttendeeConflictDataArray[num6];
                                        if (individualAttendeeConflictData.IsMissingFreeBusyData)
                                        {
                                            num4++;
                                        }
                                        else if (individualAttendeeConflictData.BusyType == BusyType.Free)
                                        {
                                            num5++;
                                        }
                                        else
                                        {
                                            num3++;
                                        }
                                    }
                                    array2[m] = GroupAttendeeConflictData.Create(list3.Count, num3, num5, num4);
                                }
                                else
                                {
                                    array2[m] = TooBigGroupAttendeeConflictData.Create();
                                }
                                break;

                            case AttendeeKind.Unknown:
                                array2[m] = UnknownAttendeeConflictData.Create();
                                break;
                            }
                        }
                        suggestion.AttendeeConflictDataArray = array2;
                    }
                }
            }
            catch (LocalizedException ex)
            {
                ErrorHandler.SetErrorCodeIfNecessary(ex, ErrorConstants.MeetingSuggestionGenerationFailed);
                result.MeetingSuggestionsException = ex;
            }
            AvailabilityQuery.MeetingSuggestionsTracer.TraceDebug((long)this.GetHashCode(), "{0}: Leaving AvailabilityQuery.ExecuteMeetingSuggestionsQuery()", new object[]
            {
                TraceContext.Get()
            });
        }
示例#3
0
 private static EmailAddress ConvertMailboxDataToEmailAddress(MailboxData mailboxData)
 {
     return(mailboxData.Email);
 }