我想向组发送消息,我无法使其工作。我将用户添加到组中,但不会发送消息,尽管使用Clients.All可行。这是我的设置。无法发送到SignalR组
Javascript调用连接到集线器,它获取组中的用户并将其作为聊天室中的用户返回,然后向服务器发送一个连接室,以便我可以将用户添加到该组中,并将消息从服务器给客户说明他们已经加入。
Javascript功能来连接
$.connection.hub.start()
.done(function() {
chatHub.server.getConnectedUsers("MyChat") //return user list
.done(function (connectedUsers) {
ko.utils.arrayForEach(connectedUsers, function (item) {
users.contacts.push(new chatR.user(item.Username));
});
}).done(function() {
chatHub.server.joinRoom("MyChat", "My Room")
.done()
.fail(function(){ alert('failed to join group')}); //join the group
});
});
服务器端JoinRoom
public async Task JoinRoom(string room, string displayName)
{
// context variables
var name = Context.User.Identity.Name;
var connectionId = Context.ConnectionId;
// new group
var group = new SignalGroup(room, displayName, SignalGroupType.Chatroom);
// adding relation to storage
_manager.AddGroup(name, group); <-- adds to database
// anouncing the room was joined
Clients.Group(room).joinedRoom(name); //<-- This does not work
//Clients.All.joinedRoom(name); <-- This works
//Clients.OthersInGroup(room).joinedRoom(name);
// add group to SignalR
await Groups.Add(room, connectionId); // <-- why does this have to be last? when I move this before the _manager.AddGroup it never sends the client message?
}
所以Clients.Group(room).joinedRoom(name)
不工作,我没有得到任何错误消息,并在客户端永远不会收到该消息。这是客户端功能。
客户端JoinedRoom
chatHub.client.joinedRoom = function (name) {
var connectedUser = new chatR.user(name);
users.contacts.push(connectedUser);
chat.messages.push(new chatR.chatMessage("System", name + " joined.", new Date()));
};
对于“奖金”这里是我的SendChatMessage
方法时,我向所有而不是一组过的作品。
public void SendChatMessage(string room, string message)
{
// context variables
var name = Context.User.Identity.Name;
var user = _manager.GetUser(name);
if (user.IsInGroup(room))
{
// tells clients to addChatMessage
//Clients.All.addChatMessage(name, message, DateTime.Now);
Clients.Group(room).addChatMessage(name, message, DateTime.Now);
}
}
所以我的主要问题是,为什么我不能发送到组?我明确地将它们添加到组中并向该组发送消息?
第二个问题是,为什么在JoinRoom方法必须有添加到组呼最后还是它似乎它不与所有的工作都什?
如果您有这东西,这将是伟大的,以及任何有用的链接,我看了所有的MS文档和几个教程这让我连上这是为什么不工作更加困惑。
编辑:我在joinRoom调用中添加了一个失败检查,看看我是否收回任何东西,看起来好像SignalR无法加入组本身。我不知道我会如何解决这个问题。
Doh,今晚我会回家看看这个。我希望就是这样,很有道理。谢谢:) – Tony
是的,我一定已经想通了,因为我现在在我的代码中已经这样了。偷偷摸摸地交换了params哈哈。谢谢!! – Tony