Ниже у меня есть три таблицы, которые используются для 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");
}
@thanks для вашего проекта мне помог, я просто хотел бы знать, метод, который я использовал для пользователя, чтобы связать строку соединения signalr и сохранить ее в базе данных как выше кода, его хороший способ добиться этого или если есть лучший способ, дайте мне знать – Nikil