В настоящее время я разрабатываю приложение чата + шахматы с 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>
, потому что я хочу получить от другого клиента, хочет он играть или нет. Я не знаю, как правильно получить ответ клиента. Пожалуйста, помогите мне, если я пошел по неправильному пути. Спасибо!