Я реализовал конечную точку согласования и метод отправки и подключился от JS-клиента signalR. Я получаю соединение и могу транслировать сообщения всем подключенным клиентам. Согласно нашему требованию, я должен отправить сообщение нескольким клиентам. Из документации я считаю, что мы можем отправлять сообщения группе. Я написал функцию Azure для добавления и удаления пользователя в группу.
[FunctionName("AddToGroup")]
public static Task AddToGroup(
[HttpTrigger(AuthorizationLevel.Function, "get")] HttpRequest req,
ILogger log,
[SignalR(HubName = NotificationConstants.Hub)]IAsyncCollector<SignalRGroupAction> signalRGroupActions)
{
string userId = req.Query[NotificationConstants.QueryStringUserId];
string companyId = req.Query[NotificationConstants.QueryStringCompanyId];
return signalRGroupActions.AddAsync(
new SignalRGroupAction
{
UserId = userId,
GroupName = string.Format(CultureInfo.CurrentCulture,
NotificationConstants.Group,
companyId),
Action = GroupAction.Add
});
}
[FunctionName("RemoveFromGroup")]
public static Task removeFromGroup(
[HttpTrigger(AuthorizationLevel.Function, "get")] HttpRequest req,
ILogger log,
[SignalR(HubName = NotificationConstants.Hub)]IAsyncCollector<SignalRGroupAction> signalRGroupActions)
{
string userId = req.Query[NotificationConstants.QueryStringUserId];
string companyId = req.Query[NotificationConstants.QueryStringCompanyId];
return signalRGroupActions.AddAsync(
new SignalRGroupAction
{
UserId = userId,
GroupName = string.Format(CultureInfo.CurrentCulture,
NotificationConstants.Group,
companyId),
Action = GroupAction.Remove
});
}
Как я могу позвонить из JS Client? Мой пример кода клиента, как показано ниже. Пожалуйста, предложите
function GetConnectionInfo() {
return axios.get('http://localhost:7071/api/ConnectionInfo?UserId=1_2347')
.then(function (response) {
return response.data;
}).catch(console.error);
}
function StartConnection(connection) {
console.log('connecting...');
connection.start()
.then(function () {
console.log('connected!');
connection.invoke('getConnectionId')
.then(function (connectionId) {
console.log(connectionId);
// Send the connectionId to controller
});
})
.catch(function (err) {
console.error(err);
setTimeout(function () { StartConnection(connection); }, 2000);
});
}
GetConnectionInfo().then(function (info) {
let accessToken = info.accessToken;
const options = {
accessTokenFactory: function () {
if (accessToken) {
const _accessToken = accessToken;
accessToken = null;
return _accessToken;
} else {
return GetConnectionInfo().then(function (info) {
return info.accessToken;
});
}
}
};
const connection = new signalR.HubConnectionBuilder()
.withUrl(info.url, options)
.build();
StartConnection(connection);
connection.on('DocumentStatusUpdated', ProcessDocumentData);
connection.onclose(function () {
console.log('disconnected');
setTimeout(function () { StartConnection(connection); }, 5000);
});
}).catch(console.error);
Может кто-нибудь, пожалуйста, направьте меня.
Спасибо