2017-01-06 13 views
0

Ниже у меня есть три таблицы, которые используются для GroupChat. Во-первых, я создаю группу, которую все ее данные будут вставлять в GroupTable, а затем в успех groupCreation. Я вызываю insertConnectionId Функция, которая будет вызовите MapGroupConnectionId на бэкэнд, который сгенерирует идентификатор соединения SignalR и вставляет в GroupTable с помощью groupId и groupCreaterId, его работоспособность, и у меня есть таблица друзей группы, которая состоит из ID друзей. Теперь, когда любой друг отправил сообщение определенной группе, мне нужно отправьте сообщение всем, кто находится в этой отдельной группе через SignalR, я думал, что я назначу groupConnectionID в таблице групп всем членам, которые связаны с этой Группой, тогда я могу отправить сообщение этой группе, которая будет получена Gr oupFriends мой хаб, который работает только для Hub.Client.ALL, но не для других функций, пожалуйста, руководство меня, если я делаю это в неправильном пути, я новичок в signalRСигнал группового чата R с веб-API

//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"); 

} 

ответ

0

Я сделал подобный проект, как и использовать его в различных областях,

Заканчивать этот пример поможет вам :)

https://github.com/DenizGokce/SignalR

+0

@thanks для вашего проекта мне помог, я просто хотел бы знать, метод, который я использовал для пользователя, чтобы связать строку соединения signalr и сохранить ее в базе данных как выше кода, его хороший способ добиться этого или если есть лучший способ, дайте мне знать – Nikil