Esempio n. 1
0
        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..");
            }
        }
Esempio n. 2
0
 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
         });
     });
 }
Esempio n. 3
0
        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
        }