public async Task SendMessage(string text, byte[] image = null) { try { currentUserTypingController.HandleOutgoingMessage(); await messageLoadTaskCompletionSource.Task; App.ConversationsViewModel.IsDirty = true; var message = new Message(Guid.NewGuid(), Guid.Empty, DateTime.UtcNow, recipientId, Settings.MyId, text, image, MessageStatus.Unsent); Messages.Add(MessageViewModelFactory.Create(message)); //chatting with fake contacts if (recipientId < 0) { dataManager.AddMessageAsync(message); return; } var sendMessageResult = await App.MessagesManager.SendMessageAsync(message); switch (sendMessageResult) { case SendMessageResult.Ok: break; case SendMessageResult.ConnectionError: App.MessageDialog.SendMessage("Internet connection is required", "No service"); break; case SendMessageResult.ReceiverUnknown: App.MessageDialog.SendMessage("Receiver was not found on the server", "Error"); break; case SendMessageResult.ReceiverAndSenderAreSame: App.MessageDialog.SendMessage("That's you!", "Error"); break; case SendMessageResult.UnknownError: App.MessageDialog.SendMessage("Oops... something went wrong", "Error"); break; default: throw new ArgumentOutOfRangeException(); } bool isSuccessfullySent = await SendPushNotificationToFriendDevices(Friend.FriendId, text); App.Logger.Track("SendMessage"); } catch (Exception ex) { App.Logger.Report(ex); //App.MessageDialog.SendMessage("Message wasn't sent", "Oops.."); } }
private void OnMessageArrived(object sender, MessageEventArgs e) { uiThreadDispacher.Dispatch(() => { opponentTypingController.HandleIncomingMessage(); App.ConversationsViewModel.IsDirty = true; Messages.Add(MessageViewModelFactory.Create(e.Message)); //if conversation is opened! MarkMessagesAsSeenAsync(new List <Message> { e.Message }); }); }
public async Task ExecuteLoadMessagesCommand() { if (IsBusy) { return; } IsBusy = true; try { Friend = await dataManager.GetFriendAsync(recipientId); messages.Clear(); IsAddingLocalMessages = true; List <Message> notSeenYet = new List <Message>(); foreach (var item in await messageRepository.GetMessagesAsync(recipientId)) { messages.Add(MessageViewModelFactory.Create(item)); if (item.Sender != Settings.MyId && item.Status == MessageStatus.Delivered) { notSeenYet.Add(item); } } MarkMessagesAsSeenAsync(notSeenYet); IsAddingLocalMessages = false; } catch (Exception ex) { App.Logger.Report(ex); App.MessageDialog.SendMessage("Unable to gather messages.", "Error"); } finally { IsBusy = false; IsAddingLocalMessages = false; } messageLoadTaskCompletionSource.TrySetResult(true); //do stuff here }