public PendingMessageView[] PendingMessageCounts(int messageTimeOut) { WebOperationContext.Current.OutgoingResponse.Headers.Add("Cache-Control", "no-cache"); PendingMessageView[] result = new PendingMessageView[0]; try { if (SPUtility.ValidateFormDigest()) { // set the current user to online IContactRepository crepo = new ContactRepository(); crepo.SetContactOnline(Language.SMUGroupName, SPContext.Current.Web.CurrentUser.ID); // get the user statuses IGroupRepository grepo = new GroupRepository(); var group = grepo.GetGroup(Language.SMUGroupName); var contactList = crepo.GetAllFromGroup(group, messageTimeOut); // get the pending messages IChatMessageRepository repo = new ChatMessageRepository(); var messages = repo.GetPendingMessageByUser(SPContext.Current.Web.CurrentUser.ID); result = (from m in messages group m by m.CreatedBy.ID into g select new PendingMessageView() { ID = g.Key, IsOnline = false, Count = g.Count() }).ToArray(); // get the pending information result = (from i in contactList where i.ID != SPContext.Current.Web.CurrentUser.ID select new PendingMessageView() { ID = i.ID, IsOnline = i.IsOnline, Count = (result.Any(p => p.ID == i.ID) ? result.First(p => p.ID == i.ID).Count : 0) }).ToArray(); } else { WebOperationContext.Current.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.Unauthorized; WebOperationContext.Current.OutgoingResponse.StatusDescription = Language.UserNotValidated; } } catch (Exception ex) { Config.WriteException(ex); WebOperationContext.Current.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.InternalServerError; WebOperationContext.Current.OutgoingResponse.StatusDescription = Language.GetMessagesError; } return(result); }