Signalr 基于webapi的群组聊天信号R

Signalr 基于webapi的群组聊天信号R,signalr,signalr-hub,signalr.client,signalr-2,Signalr,Signalr Hub,Signalr.client,Signalr 2,下面我有三个用于GroupChat的表,首先我创建了一个组,它的所有数据都将插入GroupTable,然后,在groupCreation成功后,我调用insertConnectionId函数,该函数将调用后端上的MapGroupConnectionId,该函数生成信号器连接ID并使用groupId和GroupCreateId插入GroupTable,其工作正常,我有一个由好友ID组成的GroupFriends表,现在,当任何朋友向特定组发送消息时,我需要通过信号器将消息发送给该特定组中的所有人,

下面我有三个用于GroupChat的表,首先我创建了一个组,它的所有数据都将插入GroupTable,然后,在groupCreation成功后,我调用insertConnectionId函数,该函数将调用后端上的MapGroupConnectionId,该函数生成信号器连接ID并使用groupId和GroupCreateId插入GroupTable,其工作正常,我有一个由好友ID组成的GroupFriends表,现在,当任何朋友向特定组发送消息时,我需要通过信号器将消息发送给该特定组中的所有人,我想,我会将组表中的groupConnectionID分配给与该组相关的所有成员,然后我可以向该特定组发送消息,GroupFriends将接收该消息,我的hub仅适用于hub.Client.ALL,但不适用于其他功能,如果我的操作方式错误,请指导我,我是信号员新手

 //Group Table

 groupID   groupName groupImage  groupCreaterId groupConnectionId groupsignalrIsConnected
   1         dude       someurl        421       somestringID       TRUE
   2         god        someurl        444       somestringID       TRUE
   3         heaven     someurl        543       Null               FALSE
   4         hell       someurl        678       Null               FALSE


 //Group Friends Table

groupFriendsTabID   groupId groupFriendsId
      111              2    444
      112              3    678
      113              2    421
      114              4    444
      115              1    543
      116              4    421
      117              1    678
      118              2    543
      119              3    444


  //Group Message Table

  groupMesTabId groupId groupsenderId   groupMessage
         22             1   543             hello
         23             3   678             hi


 //My HUB
[HubName("groupChatHub")]
public class GroupChatHub : Hub
{
    GroupRepository group= new GroupRepository ();


    public void **MapGroupConnectionId**(long groupID,int groupCreatorId)
      {
       if (groupID != 0 && groupCreatorId!=0)
            {   
             CBG.MapGroupConnectionId(groupID, Context.ConnectionId);
              Clients.Client(Context.ConnectionId).configureUserSettings();}
             }

    public override Task OnConnected()
    {
        var connectionId = Context.ConnectionId;
        return base.OnConnected();
    }
    public override Task OnDisconnected(bool stopCalled)
    {
        var connectionId = Context.ConnectionId;
        return base.OnDisconnected(stopCalled);
    }
    public override Task OnReconnected()
    {
        return base.OnReconnected();
    }
}

  //My WEBAPI//
   public class GroupController : ApiControllerWithHub<GroupchatHub>
    {
        public IhttpActionResult InsertNewMessage(messageModel model)
        {
              //Here i am  inserting new message to Database using some    function it works fine//

            after success of inserting message i need to send that message  to groupmembers using signalr 

     //here i am fetching the connectionID through groupID from group table
      var connectionID=repository.getConnection(model.groupID)

           var messager = "11";
   Hub.Clients.All.getGroupChat(messager); // this works 

   Hub.Clients.clients(connectionID).getGroupChat(messager);this not working it except IList<string>

  Hub.Clients.Groups(groupName,ConnectionID).getGroupChat(messager); this is not  working
         }
   return ok(Model);
    }



 //MyClientEnd//

  var Grouphub

//this insertConnectionId is called once the group is created on the success  of group creation and SignalRconnectionstring is inserted in GroupTable 

function insertConnectionId(groupId,groupCreatorID)
 $.connection.hub.start().done(function () {
    console.log('Now connected, connection ID=' + $.connection.hub.id);
    console.log("Connected, transport = " +      $.connection.hub.transport.name);
    Grouphub.server.mapGroupConnectionId(groupID, groupCreatorID);
 });
 $.connection.hub.error(function (error) {
    console.log('SignalR error: ' + error)
 });

 });

 Grouphub = $.connection.groupChatHub
 Grouphub.client.getGroupChat = function (data) {
  alert("in");

 }
//组表
groupID groupName groupImage groupCreaterId groupConnectionId groupsignalrIsConnected
1 dude someurl 421 somestringID为真
上帝啊,有人啊,有人啊,真的
3天堂之星543空假
4个URL 678 Null FALSE
//团体好友表
groupFriendsTabID groupId groupFriendsId
111              2    444
112              3    678
113              2    421
114              4    444
115              1    543
116              4    421
117              1    678
118              2    543
119              3    444
//组消息表
groupMesTabId groupId groupsenderId groupMessage
221543你好
233678嗨
//我的枢纽
[HubName(“groupChatHub”)]
公共类GroupChatHub:Hub
{
GroupRepository组=新的GroupRepository();
public void**MapGroupConnectionId**(长groupID,int groupCreatorId)
{
if(groupID!=0&&groupCreatorId!=0)
{   
CBG.MapGroupConnectionId(groupID,Context.ConnectionId);
Clients.Client(Context.ConnectionId).configureUserSettings();}
}
已连接的公用覆盖任务()
{
var connectionId=Context.connectionId;
返回base.OnConnected();
}
公共覆盖任务OnDisconnected(bool stopCalled)
{
var connectionId=Context.connectionId;
返回基.OnDisconnected(stopCalled);
}
已重新连接的公用覆盖任务()
{
返回base.OnReconnected();
}
}
//我的WEBAPI//
公共类GroupController:ApiControllerWithHub
{
公共IhttpActionResult InsertNewMessage(messageModel模型)
{
//在这里,我使用一些功能将新消息插入数据库,它工作正常//
在成功插入消息后,我需要使用signalr将该消息发送给组成员
//这里,我通过groupID从组表中获取connectionID
var connectionID=repository.getConnection(model.groupID)
var messager=“11”;
Hub.Clients.All.getGroupChat(messager);//这很有效
Hub.Clients.Clients(connectionID).getGroupChat(messager);除了IList之外,它不工作
Hub.Clients.Groups(groupName,ConnectionID).getGroupChat(messager);这不起作用
}
返回ok(型号);
}
//我的客户//
var Grouphub
//一旦成功创建组并在GroupTable中插入SignalRconnectionstring,就会调用此insertConnectionId
函数insertConnectionId(groupId,groupCreatorID)
$.connection.hub.start().done(函数(){
log('现在已连接,连接ID='+$.connection.hub.ID);
console.log(“Connected,transport=“+$.connection.hub.transport.name”);
Grouphub.server.mapGroupConnectionId(groupID,groupCreatorID);
});
$.connection.hub.error(函数(错误){
console.log('信号器错误:'+错误)
});
});
Grouphub=$.connection.groupChatHub
Grouphub.client.getGroupChat=函数(数据){
警报(“in”);
}

我做过类似的项目,例如,并在不同的领域使用它

查看此示例,它将帮助您:)


@感谢您的项目帮助我,我只是想知道,我使用了什么方法让用户绑定信号器连接字符串并将其存储在数据库中,如上述代码所示,这是实现它的好方法,或者如果有更好的方法,请告诉我