void SubscribeMessages() { DB.SubscribeToNewMessages((message) => { MessagesCollection.Insert(0, message); }); }
public void RemoveAtWorks() { var messages = new MessagesCollection(); messages.InternalAdd(new Interfaces.Net.Message()); messages.InternalAdd(new Interfaces.Net.Message()); messages.RemoveAt(0); Assert.AreEqual(1, messages.Count); }
private void PopulateMessageCollection() { var messageList = IMService.GetAllMessagesBetweenContacts(LoggedInUser, GetSelectedUser()); foreach (var message in messageList) { MessagesCollection.Add(message); } }
public void ContainsWorks() { var messages = new MessagesCollection(); var msg = new Interfaces.Net.Message(Interfaces.Net.MessageType.AllOk, null); messages.InternalAdd(msg); Assert.AreEqual(1, messages.Count); Assert.IsTrue(messages.Contains(msg)); Assert.IsTrue(messages.Contains(Interfaces.Net.MessageType.AllOk)); Assert.IsFalse(messages.Contains(Interfaces.Net.MessageType.Close)); }
public void Fail(ITmMqMessage msg, Exception exception) { MessagesCollection.Update( Query.EQ("MessageId", msg.MessageId), Update.Inc("RetryCount", 1)); MessagesCollection.Update( Query.EQ("MessageId", msg.MessageId), Update.PushWrapped("Errors", new TmMqMessageError(exception.ToString()))); }
private void ResetMessagesCollection() { foreach (var message in MessagesCollection.ToList()) { MessagesCollection.Remove(message); } if (SelectedContact != null) { PopulateMessageCollection(); } }
public void IndexOfWorks() { var messages = new MessagesCollection(); var msg = new Interfaces.Net.Message(Interfaces.Net.MessageType.AllOk, null); messages.InternalAdd(new Interfaces.Net.Message(Interfaces.Net.MessageType.InvalidSequence, null)); messages.InternalAdd(msg); Assert.AreEqual(2, messages.Count); Assert.AreEqual(1, messages.IndexOf(msg)); Assert.AreEqual(1, messages.IndexOf(Interfaces.Net.MessageType.AllOk)); Assert.AreEqual(0, messages.IndexOf(Interfaces.Net.MessageType.InvalidSequence)); Assert.AreEqual(-1, messages.IndexOf(Interfaces.Net.MessageType.MessageEnd)); }
private void SendButton_Click(object sender, RoutedEventArgs e) { if (MessageContent != null && MessageContent != "" && SelectedContact != null) { var message = new Message { Sender = LoggedInUser.Username, Receiver = SelectedContact.Username, TimeSent = DateTime.Now, Content = MessageContent }; IMService.SendMessage(message); MessagesCollection.Add(message); MessageContent = ""; SelectedContact.LastMessageContent = message.Content; SelectedContact.LastMessageTime = message.TimeSent; } }
public static MessagesCollection Search(SearchFilter SearchKey) { MessagesCollection collection = new MessagesCollection(); using (var reader = SqlHelper.ExecuteReader("Messages_Search", SearchFilterManager.SqlSearchDynParam(SearchKey))) { while (reader.Read()) { Messages obj = new Messages(); obj = GetItemFromReader(reader); collection.Add(obj); } } return(collection); }
private void DeleteSelectedContact() { IMService.DeleteContact(LoggedInUser, GetSelectedUser()); foreach (var contact in ContactsCollection.ToList()) { if (contact.Username == SelectedContact.Username) { ContactsCollection.Remove(contact); } } foreach (var message in MessagesCollection.ToList()) { MessagesCollection.Remove(message); } ResetContactsDetails(); }
/// <summary> /// Вызывается, когда пользователь начал набирать текст в диалоге или в чате. /// </summary> private void VKLongPollService_UserIsTyping(object sender, UserIsTypingEventArgs e) { MessagesCollection msgs = null; if (e.Info.IsChat) { msgs = Conversations.Values.FirstOrDefault(m => m.ChatID == e.Info.ChatID); } else { msgs = Conversations.Values.FirstOrDefault(m => m.UserID == e.Info.UserID); } if (msgs != null) { msgs.SetUserIsTyping(e.Info.UserID); } }
public static MessagesCollection GetbyUser(string CreatedUser, int CompanyID) { MessagesCollection collection = new MessagesCollection(); Messages obj; var sqlParams = new SqlParameter[] { new SqlParameter("@CreatedUser", CreatedUser), new SqlParameter("@CompanyID", CompanyID), }; using (var reader = SqlHelper.ExecuteReader("Messages_GetAll_byUser", sqlParams)) { while (reader.Read()) { obj = GetItemFromReader(reader); collection.Add(obj); } } return(collection); }
public static MessagesCollection GetAllItem(int CompanyID) { MessagesCollection collection = new MessagesCollection(); var sqlParams = new SqlParameter[] { new SqlParameter("@CompanyID", CompanyID), }; using (var reader = SqlHelper.ExecuteReader("Messages_GetAll", sqlParams)) { while (reader.Read()) { Messages obj = new Messages(); obj = GetItemFromReader(reader); collection.Add(obj); } } return(collection); }
/// <summary> /// Активирует модель представления. /// </summary> public override async void Activate(NavigationMode mode = NavigationMode.New) { Messages = new MessagesCollection(ContentState.Loading); RaisePropertyChanged(() => Messages); IDialog dialog = null; try { dialog = await ServiceLocator.Current.GetInstance <IMessagesCacheService>() .GetConversation((long)UserID) as IDialog; } catch (Exception) { } if (dialog == null) { try { dialog = await ServiceLocator.Current.GetInstance <IConversationsService>() .GetDialog(UserID); } catch (Exception ex) { Messages = new MessagesCollection(ContentState.Error); Messages.LoadCommand = new RelayCommand(() => Activate()); RaisePropertyChanged(() => Messages); SendMessageCommand.RaiseCanExecuteChanged(); throw ex; } } Conversation = dialog; Messages = dialog.Messages; RaisePropertyChanged(() => Messages); SendMessageCommand.RaiseCanExecuteChanged(); }
private void CheckForNewMessagesAndContacts() { if (LoggedInUser != null && SelectedContact != null) { var messagesList = IMService.GetAllMessagesBetweenContacts(LoggedInUser, GetSelectedUser()); foreach (var message in messagesList) { if (MessagesCollection.Count(c => c.Id == message.Id) == 0) { MessagesCollection.Add(message); } } var contactsList = IMService.GetContacts(LoggedInUser); foreach (var contact in contactsList) { if (ContactsCollection.Count(c => c.Username == contact.Username) == 0) { ContactsCollection.Add(contact); AddToContactsDetails(contact); } } } }
/// <summary> /// Возвращает кортеж из беседы и коллекции сообщений. /// </summary> /// <param name="convID">Идентификатор беседы.</param> public async Task <Tuple <CachedConversationOld, MessagesCollection> > GetMessages(long convID) { var pair = Conversations.FirstOrDefault(p => p.Key.ID == convID); if (pair.Key != null && pair.Value != null) { return(new Tuple <CachedConversationOld, MessagesCollection>(pair.Key, pair.Value)); } MessagesCollection msgs = null; if (convID < 0) { msgs = new MessagesCollection((uint)-convID); } else { msgs = new MessagesCollection((ulong)convID); } var cache = await ServiceHelper.MessagesCacheService.GetConversationFromCache(convID); if (cache != null) { for (int i = 0; i < cache.Users.Count; i++) { ulong userID = cache.Users[i].ID; var user = CachedUsers.Values.FirstOrDefault(u => u.ID == userID); if (user != null) { cache.Users[i] = user; } else { CachedUsers[userID] = cache.Users[i]; } } foreach (var msg in cache.CachedMessages) { if (cache.Users != null) { msg.Sender = cache.Users.FirstOrDefault(u => u.ID == msg.UserID); } msgs.Add(msg); } msgs.Unread = cache.Unread; Conversations[cache] = msgs; return(new Tuple <CachedConversationOld, MessagesCollection>(cache, msgs)); } if (convID < 0) { bool success = false; byte numOfRetries = 0; while (!success && numOfRetries <= 3) { var request = new GetChatRequest() { ChatID = -convID, IsSingle = true, Fields = new List <VKUserFields> { VKUserFields.photo_50, VKUserFields.online, VKUserFields.sex } }; var response = await request.ExecuteAsync(); if (response.Error.ErrorType == VKErrors.None) { success = true; cache = new CachedConversationOld { ID = convID, Title = response.Response.Title, Users = new ObservableCollection <VKProfileChat>(response.Response.Users) }; Conversations[cache] = msgs; foreach (var user in cache.Users) { CachedUsers[user.ID] = user; } //msgs.UpdateSimilar(); return(new Tuple <CachedConversationOld, MessagesCollection>(cache, msgs)); } else { numOfRetries++; CoreHelper.SendInAppPush( "Ошибка соединения.\nПовтор через " + 3 * numOfRetries + " секунд", null, PopupMessageType.Warning); await Task.Delay(3000 *numOfRetries); } } return(null); } else { bool success = false; byte numOfRetries = 0; while (!success && numOfRetries <= 3) { var request = new GetUsersRequest { UserID = (ulong)convID }; var response = await request.ExecuteAsync(); if (response.Error.ErrorType == VKErrors.None) { success = true; var user = response.Response[0]; cache = new CachedConversationOld { ID = convID, Title = user.FullName, Users = new ObservableCollection <VKProfileChat> { new VKProfileChat { ID = user.ID, LastName = user.LastName, FirstName = user.FirstName, Photo50 = user.Photo50, Online = user.Online, Sex = user.Sex } } }; Conversations[cache] = msgs; CachedUsers[user.ID] = cache.Users[0]; return(new Tuple <CachedConversationOld, MessagesCollection>(cache, msgs)); } else { numOfRetries++; CoreHelper.SendInAppPush( "Ошибка соединения.\nПовтор через " + 3 * numOfRetries + " секунд", null, PopupMessageType.Warning); await Task.Delay(3000 *numOfRetries); } } return(null); } }
/// <summary> /// Вызывается при получении новых сообщений через LongPoll. /// </summary> private async void VKLongPollService_MessagesReceived(object sender, MessagesReceivedEventArgs e) { var ids = new ulong[e.Messages.Count]; for (int i = 0; i < e.Messages.Count; i++) { ids[i] = e.Messages[i].MessageID; } List <VKMessage> resultMessages = null; bool success = false; byte numOfRetries = 0; while (!success && numOfRetries <= 3) { var request = new GetByIDRequest { MessageIDs = ids.ToList() }; var response = await request.ExecuteAsync(); if (response.Error.ErrorType == VKErrors.None) { success = true; resultMessages = response.Response.Items; } else { numOfRetries++; CoreHelper.SendInAppPush( "Ошибка соединения.\nПовтор через " + 3 * numOfRetries + " секунд", null, PopupMessageType.Warning); await Task.Delay(3000 *numOfRetries); } } if (!success) { CoreHelper.SendInAppPush( "Не удалось получить подробные сообщения", "LongPoll", PopupMessageType.Error); return; } var unknownUsers = new Dictionary <ulong, List <VKMessage> >(); var conversations = new Dictionary <long, List <VKMessage> >(); foreach (var msg in resultMessages) { long key = msg.IsChatMessage ? -msg.ChatID : (long)msg.UserID; if (conversations.ContainsKey(key)) { conversations[key].Add(msg); } else { var list = new List <VKMessage>(); list.Add(msg); conversations[key] = list; } if (CachedUsers.ContainsKey(msg.UserID)) { msg.Sender = CachedUsers[msg.UserID]; } else { if (unknownUsers.ContainsKey(msg.UserID)) { unknownUsers[msg.UserID].Add(msg); } else { var list = new List <VKMessage>(); list.Add(msg); unknownUsers[msg.UserID] = list; } } } success = unknownUsers.Count == 0; numOfRetries = 0; while (!success && numOfRetries <= 3) { var usersRequest = new GetUsersRequest() { UserIDs = unknownUsers.Keys.ToList() }; var usersResponse = await usersRequest.ExecuteAsync(); if (usersResponse.Error.ErrorType == VKErrors.None) { success = true; foreach (var user in usersResponse.Response) { var sUser = new VKProfileChat() { ID = user.ID, FirstName = user.FirstName, LastName = user.LastName, Online = user.Online, Photo50 = user.Photo50 }; var list = unknownUsers[user.ID]; for (int i = 0; i < list.Count; i++) { list[i].Sender = sUser; } CachedUsers[sUser.ID] = sUser; } } else { numOfRetries++; CoreHelper.SendInAppPush( "Ошибка соединения.\nПовтор через " + 3 * numOfRetries + " секунд", null, PopupMessageType.Warning); await Task.Delay(3000 *numOfRetries); } } if (!success) { CoreHelper.SendInAppPush( "Не удалось получить информацию о пользователях сообщений", null, PopupMessageType.Error); } foreach (long convID in conversations.Keys) { var msgsList = conversations[convID]; var cachedConv = Conversations.Keys.FirstOrDefault(c => c.ID == convID); if (cachedConv != null) { var list = Conversations[cachedConv]; foreach (var msg in msgsList) { list.Insert(0, msg); } } else { MessagesCollection list = null; if (convID < 0) { list = new MessagesCollection((uint)-convID); } else { list = new MessagesCollection((ulong)convID); } cachedConv = await ServiceHelper.MessagesCacheService.GetConversationFromCache(convID); if (cachedConv != null) { foreach (var msg in cachedConv.CachedMessages) { list.Add(msg); } } else { if (convID < 0) { success = false; numOfRetries = 0; while (!success && numOfRetries <= 3) { var request = new GetChatRequest() { ChatID = -convID, IsSingle = true, Fields = new List <VKUserFields> { VKUserFields.photo_50, VKUserFields.online, VKUserFields.sex } }; var response = await request.ExecuteAsync(); if (response.Error.ErrorType == VKErrors.None) { success = true; cachedConv = new CachedConversationOld { ID = convID, Title = response.Response.Title, Users = new ObservableCollection <VKProfileChat>(response.Response.Users), CachedMessages = msgsList, AdminID = response.Response.AdminID }; Conversations[cachedConv] = list; foreach (var user in cachedConv.Users) { CachedUsers[user.ID] = user; } } else { numOfRetries++; CoreHelper.SendInAppPush( "Ошибка соединения.\nПовтор через " + 3 * numOfRetries + " секунд", null, PopupMessageType.Warning); await Task.Delay(3000 *numOfRetries); } } } else { success = false; numOfRetries = 0; while (!success && numOfRetries <= 3) { var request = new GetUsersRequest { UserID = (ulong)convID }; var response = await request.ExecuteAsync(); if (response.Error.ErrorType == VKErrors.None) { success = true; var user = response.Response[0]; cachedConv = new CachedConversationOld { ID = convID, Title = user.FullName, Users = new ObservableCollection <VKProfileChat> { new VKProfileChat { ID = user.ID, LastName = user.LastName, FirstName = user.FirstName, Photo50 = user.Photo50, Online = user.Online } } }; CachedUsers[user.ID] = cachedConv.Users[0]; } else { numOfRetries++; CoreHelper.SendInAppPush( "Ошибка соединения.\nПовтор через " + 3 * numOfRetries + " секунд", null, PopupMessageType.Warning); await Task.Delay(3000 *numOfRetries); } } } } foreach (var msg in msgsList) { list.Insert(0, msg); } //list.UpdateSimilar(); Conversations[cachedConv] = list; } await CacheConversation(cachedConv.ID); WorkOnDialog(msgsList.Last()); var lastMsg = msgsList.LastOrDefault(m => m.Type == VKMessageType.Received); if (lastMsg == null) { continue; } var navParameter = new NavigateToPageMessage { Page = AppViews.ConversationView, Parameter = convID }; CoreHelper.SendInAppPush(lastMsg.Body, cachedConv.Title, PopupMessageType.Default, lastMsg.Sender.Photo50, parameter: navParameter); } await ServiceHelper.MessagesCacheService.CacheDialogs(Dialogs.Take(20).ToList()); }
public void AddAndInsertThrowsException() { var messages = new MessagesCollection(); Assert.Throws<NotSupportedException>(() => messages.Add(new Interfaces.Net.Message())); Assert.Throws<NotSupportedException>(() => messages.Insert(0, new Interfaces.Net.Message())); }
public void Acknowledge(ITmMqMessage msg) { MessagesCollection.Remove(Query.EQ("MessageId", msg.MessageId), WriteConcern.Acknowledged); }