Signalr .net core 2.2-将消息发送到未连接的组

问题描述 投票:0回答:1

我正在将.net core 2.2与SignalR版本1.1.0一起使用。当我测试应用程序时,不在组中的成员会收到消息。正在根据相关条件在运行时动态创建我的组,如:var TheHub = CurrUser.Hubname;我无法弄清楚为什么不在组中的组成员也会收到消息。我要发送到GROUP而不是全部。

请查看代码。任何帮助,我将随时准备把我的头发拉出来。

我的中心类

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;
            };

        }
asp.net-core asp.net-core-signalr
1个回答
0
投票

看起来SignalR内核不适合胆小的人。直到一本权威著作问世,一个人才真正失明。我已经对该主题进行了蓝色研究,但是可惜现在已经放弃了SignalR。

© www.soinside.com 2019 - 2024. All rights reserved.