Тип возвращаемого значения 'IClient.InviteToPlay' должен быть void или Task? - PullRequest
0 голосов
/ 31 марта 2020

В настоящее время я разрабатываю приложение чата + шахматы с signalR, и у меня возникает следующая проблема.

// Это мой IClient интерфейс из Server

public interface IClient
{
    void ParticipantDisconnection(string name);
    void ParticipantReconnection(string name);
    void ParticipantLogin(User client);
    void ParticipantLogout(string name);
    void BroadcastTextMessage(string sender, string message);
    void UnicastTextMessage(string sender, string message);
    void ParticipantTyping(string sender);
    Task<bool> InviteToPlay(string sender);  //------->Here is the problem because at runtime it will throw me an exception
}

// Это метод от клиента, который выполняет кнопку для отправки приглашения

 private async Task<bool> SendInviteToPlay()
        {
            try
            {
                var recepient = _selectedParticipant.Username;
                await chatService.SendInviteToPlayAsync(recepient);
                return true;
            }
            catch (Exception) { return false; }
        }

// Это метод вызова с ClientService на сервер

 public async Task<bool> SendInviteToPlayAsync(string recepient)
        {
            return await hubProxy.Invoke<bool>("SendInviteToPlay", recepient);
        }

// This это метод, вызванный из клиента

 public async Task<bool> SendInviteToPlay(string recepient)
    {
        if (string.IsNullOrEmpty(recepient))
            return false;
        var sender = Clients.CallerState.UserName;
        User client = new User();
        ChatClients.TryGetValue(recepient, out client);
        bool result = await Clients.Client(client.UserId).InviteToPlay(sender);
        return result;
    }

// И это последний метод InviteToPlay(sender)

private bool InviteToPlay(string name)
    {
        //there was a problem with owner of the current application
        bool result = false;
        Application.Current.Dispatcher.Invoke(new Action(() =>
        {
            result = dialogService.ShowConfirmationRequest($"Player {name} wanna play with you");
        }));
        return result;
    }

Я добавил этот метод InviteToPlay с типом возврата Task<bool>, потому что я хочу получить от другого клиента, хочет он играть или нет. Я не знаю, как правильно получить ответ клиента. Пожалуйста, помогите мне, если я пошел по неправильному пути. Спасибо!

...