C # SignalR2 получает онлайн список пользователей с сервера - PullRequest
1 голос
/ 09 июля 2019

Я создал чат, используя SignalR2. Сам клиент и сервер работает нормально. Сейчас я пытаюсь реализовать функцию «пользователи онлайн». Код сервера кажется правильным, но я изо всех сил пытаюсь заставить клиента получать данные, которые сервер возвращает клиенту.

Ниже приведен код сервера:

 public static List<string> Users = new List<string>();
    public void Send(string name, string message)
    {
        // Call the broadcastMessage method to update clients.
        Clients.All.broadcastMessage(name, message);
        Clients.All.addMessage(name, message);
    }

    public void SendUserList(List<string> users)
    {
        var context = GlobalHost.ConnectionManager.GetHubContext<chatHub>();
        context.Clients.All.updateUserList(users);
    }

    public override Task OnConnected()
    {
        string clientId = GetClientId();
        //if (Users.IndexOf(clientId) == -1)
        //{
            Users.Add(clientId);
        //}

        SendCount(Users.Count);
        return base.OnConnected();
    }

    public override Task OnDisconnected(bool stopCalled)
    {
        System.Diagnostics.Debug.WriteLine("Disconnected");

        SendCount(Users.Count);
        return base.OnDisconnected(stopCalled);
    }

    private string GetClientId()
    {
        string clientId = "";
        if (Context.QueryString["clientId"] != null)
        {
            // clientId passed from application 
            clientId = this.Context.QueryString["clientId"];
        }

        if (string.IsNullOrEmpty(clientId.Trim()))
        {
            clientId = Context.ConnectionId;
        }

        return clientId;
    }

    public void SendCount(int count)
    {
        // Call the addNewMessageToPage method to update clients.
        var context = GlobalHost.ConnectionManager.GetHubContext<chatHub>();
        context.Clients.All.updateUsersOnlineCount(count);
    }

Ниже приведен код клиента для подключения / получения сообщений:

public static async void ConnectAsync(RadChat ChatInternal)
    {
        ChatInternal.Author = new Author(null, Varribles.Agent);

        var querystringData = new Dictionary<string, string>();
        querystringData.Add("clientId", Varribles.Agent);

        Connection = new HubConnection(ServerURI, querystringData);
        HubProxy = Connection.CreateHubProxy("chatHub");


        //Handle incoming event from server: use Invoke to write to console from SignalR's thread
        HubProxy.On<string, string>("AddMessage", (name, message) =>
            ChatInternal.Invoke((Action)(() =>
         Backend.GET.Messages(ChatInternal)
            )));



        try
        {
            await Connection.Start();


            Backend.GET.Messages(ChatInternal);
        }
        catch (System.Net.Http.HttpRequestException)
        {
            //No connection: Don't enable Send button or show chat UI
            return;
        }
    }

Теперь мой вопрос: как я могу получить список «Пользователи» с сервера?

Заранее спасибо

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