Как уведомить конкретного пользователя о необходимости запуска функции на стороне клиента с помощью SignalR? - PullRequest
2 голосов
/ 11 марта 2020

Я работаю с разделом кода, в котором я буду показывать всплывающее окно (html) в моем приложении для зарегистрированного пользователя всякий раз, когда в его или ее учетной записи WhatsApp получено сообщение, связанное с моим приложением. Бэкэнд-часть выполняется с помощью официального WhatsApp API и sql зависимости. Поэтому всякий раз, когда запускается функция onChange sql метода с внедрением зависимостей, я хочу показать всплывающее окно на стороне клиента.

Я использую SignalR для этого следующим образом.

Hub : 

public class WhatsappRcvdMessageHub : Hub
    {
        #region Variables
        public static Dictionary<string, bool> dicConeectionId = new Dictionary<string, bool>();
        #endregion

        public override Task OnConnected()
        {
            dicConeectionId.Add(Context.ConnectionId, true);
            return base.OnConnected();
        }

        public override Task OnDisconnected(bool stopCalled)
        {

            if (dicConeectionId.ContainsKey(Context.ConnectionId))
                dicConeectionId.Remove(Context.ConnectionId);
            return base.OnDisconnected(stopCalled);

        }

        public override Task OnReconnected()
        {
            if (!dicConeectionId.ContainsKey(Context.ConnectionId))
                dicConeectionId.Add(Context.ConnectionId, true);
            return base.OnReconnected();
        }

        public void ShowPopupForRcvdMessages()
        {

        }
    }

Вот как я упоминал подключение к концентратору в JS

var whatsappConnection = $.connection.whatsappRcvdMessageHub;
whatsappConnection.client.ShowPopupWithCandidate = function ()
{
    //   Code to display the pop up         
}

Я вызвал функцию JS в классе на стороне сервера, как показано ниже.

 var context = GlobalHost.ConnectionManager.GetHubContext<WhatsappRcvdMessageHub>();
 context.Clients.All.ShowPopupWithCandidate();

Здесь я использовал clients.all, но я хочу, чтобы он был уведомлен только вошедшему в систему пользователю (скажем, CurrentUser). Я попытался использовать client.user (CurrentUser), но тогда функция JS не сработает.

Может кто-нибудь сказать мне, как изменить сторону клиента, чтобы выполнение работало правильно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...