private async void SaveMessage() { if (!string.IsNullOrWhiteSpace(this.OutText)) { var connection = await this.apiService.CheckConnection(); if (!connection.IsSuccess) { await Application.Current.MainPage.DisplayAlert( Languages.Error, connection.Message, Languages.AcceptDisplay); return; } var loggerUser = MainViewModel.GetInstance().UserASP; var message = new Message { Sender = loggerUser.Id, Date = DateTime.Now, ConversationId = this.Conversation.ConversationId, Text = this.OutText, }; var url = Application.Current.Resources["APIMovilidad"].ToString(); var prefix = Application.Current.Resources["APIprefix"].ToString(); var controller = Application.Current.Resources["MessagesController"].ToString(); var response = await this.apiService.PostAsync( url, prefix, controller, message, Settings.TokenType, Settings.AccessToken); if (!response.IsSuccess) { await Application.Current.MainPage.DisplayAlert( Languages.Error, response.Message, Languages.AcceptDisplay); return; } var mess = (Message)response.Result; var newMessage = new MessageItemViewModel() { Message = mess.Text, Date = mess.Date, Sender = mess.Sender, }; var newMessageRT = new ChatMessage() { Message = mess.Text, User = mess.Sender, }; this.Messages.Add(newMessage); this.MessagesRT.Add(newMessageRT); this.OutText = string.Empty; } }
public MyConversationsViewModel(RouteItemViewModel routeView) { instance = this; this.apiService = new ApiService(); this.route = routeView; #region RealTime Section ChatMessage = new MessageItemViewModel(); ChatMessageRT = new ChatMessage(); SendMessageCommand = new Command(async() => await SendMessage()); ConnectCommand = new Command(async() => await Connect()); DisconnectCommand = new Command(async() => await Disconnect()); random = new Random(); #endregion LoadMessages(); #if DEBUG var ip = "localhost"; if (Device.RuntimePlatform == Device.Android) { ip = "10.0.2.2"; } hubConnection = new HubConnectionBuilder() .WithUrl($"http://{ip}:5000/chatHub") .Build(); #else hubConnection = new HubConnectionBuilder() .WithUrl("http://movilidaducarealtime.azurewebsites.net/chatHub") .Build(); #endif hubConnection.Closed += async(error) => { IsConnected = false; SendLocalMessage("Connection Closed..."); await Task.Delay(random.Next(0, 5) * 1000); await Connect(); }; hubConnection.On <string, string>("ReceiveMessage", (user, message) => { var finalMessage = new MessageItemViewModel { Sender = user, Message = message, Date = DateTime.Now, ConectionId = this.Conversation.ConnectionId }; if (user != MainViewModel.GetInstance().UserASP.Email) { Messages.Add(finalMessage); } var finMessage = $"{user} says {message}"; SendLocalMessage(finMessage); }); hubConnection.On <string>("EnteredOrLeft", (message) => { SendLocalMessage(message); }); }