Signalr .net core 2.2 - сообщения собираются в несвязанные группы - PullRequest
0 голосов
/ 12 октября 2019

Я использую .net core 2.2 с SignalR версии 1.1.0. Когда я тестирую приложение, сообщения получают участники, которых нет в группе. Мои группы создаются динамически во время выполнения на основе соответствующих критериев, например: var TheHub = CurrUser.Hubname;Я не могу понять, почему члены группы, которые НЕ находятся в группе, также получают сообщения. Я отправляю в ГРУППУ, а не ВСЕ.

Пожалуйста, смотрите код. Любая помощь с благодарностью, я готов вырвать мои волосы.

Мой класс хаба

public class Chathub : Microsoft.AspNetCore.SignalR.Hub
    {
        public override async Task OnConnectedAsync()
        {
            var TheHub = CurrUser.Hubname;  
            await Groups.AddToGroupAsync(Context.ConnectionId, TheHub.ToString());
            await base.OnConnectedAsync();
        }
        public Task SendMessageGroup(string user, string message)
        {
            var TheHub = CurrUser.Hubname;

            return Clients.Group(TheHub.ToString()).SendAsync("ReceiveMessage", user, message);
        }

    }

Мой Javascript

"use strict";


    document.getElementById("sendgroupButton").addEventListener("click", function (event) {
    var user = document.getElementById("userInput").value;
    var message = document.getElementById("messageInput").value;
    connection.invoke("SendMessageGroup", user, message).catch(function (err) {
        return console.error(err.toString());
    });
    event.preventDefault();
    playAudio();
});


var connection = new signalR.HubConnectionBuilder().withUrl("/chatHub").build();
document.getElementById("sendgroupButton").disabled = true;

connection.on("ReceiveMessage", function (user, message) {
    var msg = message.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
    var encodedMsg = user + " says " + msg;
    var li = document.createElement("li");
    li.textContent = encodedMsg;
    document.getElementById("messagesList").appendChild(li);
});

connection.start().then(function () {

    document.getElementById("sendgroupButton").disabled = false;
}).catch(function (err) {
    return console.error(err.toString());
});

Вот так я получаю текущее значение дляcurruser.hubname, см. ниже.

@inject SignInManager<ApplicationUser> SignInManager
@inject UserManager<ApplicationUser> UserManager
@if (SignInManager.IsSignedIn(User))
        {

         CurrUser.CurrentUsertId = UserManager.GetUserId(User);
            var ctx = new WebookContext();
            var LoggedInGuestHouseName = (from Ghouse in ctx.Guesthouse
                                          where Ghouse.UserId == CurrUser.CurrentUsertId
                                          select Ghouse).SingleOrDefault();
            //check to see if guesthouse details have been completed, if not skip this next line of code.
            if( LoggedInGuestHouseName != null)
            {
                CurrUser.GuestHouseName = LoggedInGuestHouseName.GuestHouseName;
                // add the hub to current user
                CurrUser.HubId = (int) LoggedInGuestHouseName.HubId;
                var Ghname = LoggedInGuestHouseName.GuestHouseName;
                var GhUserEmailaddress = LoggedInGuestHouseName.Emailaddress;
                var GhHuId = LoggedInGuestHouseName.HubId;
                CurrUser.GuestHouseName = Ghname;
                CurrUser.GuestHouseEmailaddress = GhUserEmailaddress;
                var q = (from gh in ctx.Hub

                             where gh.HubId == GhHuId
                         select gh).SingleOrDefault();
                     var myhubname = q.HubName;
                CurrUser.Hubname = myhubname;
            };

        }

1 Ответ

0 голосов
/ 16 октября 2019

Похоже, ядро ​​SignalR не для фальшивки. Пока не выйдет авторитетная книга, человек действительно ослеп. Я исследовал эту тему синим цветом, но, увы, сейчас отказался от SignalR.

...