private async void ConnectButton_Click(object sender, RoutedEventArgs e)
        {
            connectButton.IsEnabled = false;
            var email    = emailTextBox.Text;
            var password = passwordBox.Password;

            if (string.IsNullOrWhiteSpace(email) || string.IsNullOrWhiteSpace(password))
            {
                messagesList.Items.Add("Email or Password are blank.");
                return;
            }

            _connection = new HubConnectionBuilder()
                          .WithUrl($"{_settings.BaseAddress}ChatHub?ClientType=PC", options =>
            {
                options.AccessTokenProvider = async() =>
                {
                    var tokenUserCommand = new TokenUserCommand
                    {
                        Email    = emailTextBox.Text,
                        Password = passwordBox.Password
                    };

                    var token = await RestService.PostAsync <string>("account/token", tokenUserCommand);
                    return(token);
                };
            })
                          .Build();

            _connection.Closed += async(error) =>
            {
                await Task.Delay(new Random().Next(0, 5) * 1000);

                await _connection.StartAsync();
            };

            _ = _connection.On <string>("ReceiveChatMessage", (userAndMessage) =>
            {
                Dispatcher.Invoke(() =>
                {
                    var newMessage = userAndMessage;
                    messagesList.Items.Add(newMessage);
                });
            });

            _connection.On <string>("SendLargeDataAsync", (user) =>
            {
                _ = Dispatcher.Invoke(async() =>
                {
                    try
                    {
                        // Get large json from https://next.json-generator.com
                        var currentDirectory = Directory.GetCurrentDirectory();
                        //var jsonData = await File.ReadAllTextAsync(currentDirectory + "\\..\\..\\..\\test25.json");
                        var jsonData      = await File.ReadAllTextAsync(currentDirectory + "\\..\\..\\..\\test100.json");
                        var numberOfBytes = Encoding.Default.GetByteCount(jsonData);
                        var newMessage    = $"Sending large data to User:{user}, Bytes: {numberOfBytes}";
                        messagesList.Items.Add(newMessage);

                        var submitLargeDataCommand = new SubmitLargeDataCommand
                        {
                            User     = user,
                            JsonData = jsonData
                        };

                        await RestService.PostAsync("LargeData/SubmitLargeData", submitLargeDataCommand);
                    }
                    catch (Exception ex)
                    {
                        var message = ex.Message;
                        throw;
                    }
                });
            });

            try
            {
                await _connection.StartAsync();

                messagesList.Items.Add("Connection started");
                sendButton.IsEnabled = true;
            }
            catch (Exception ex)
            {
                messagesList.Items.Add(ex.Message);
                connectButton.IsEnabled = true;
            }
        }
示例#2
0
 public async Task SubmitLargeDataAsync([FromBody] SubmitLargeDataCommand submitLargeDataCommand)
 {
     await _hubContext.Clients.User(submitLargeDataCommand.User).SendAsync("UpdateLargeData", submitLargeDataCommand.JsonData);
 }