Я создаю приложение, которое включает в себя сеанс клиента и администратора 1: 1. Я использую opentok для связи клиента с администратором и создания уникального идентификатора для их сеанса. Будет несколько сеансов клиент: администратор, но каждый сеанс должен быть уникальным.
Я использую React и asp.net core 3.
Я хочу иметь возможность иметь частное соединение Signal Rмежду заказчиком и администратором. Настройки авторизации не установлены, все они основаны на уникальном идентификаторе, который им будет дан в строке запроса.
В настоящее время я подключаюсь к Сигналу R в React следующим образом:
import { HubConnectionBuilder } from '@aspnet/signalr';
import { useState, useEffect } from "react";
import config from "config.js";
export default function useSignalR() {
const [hubConnection, setHubConnection] = useState(null);
useEffect(() => {
//ideally ill supply the connection a guid here
let connectionBuilder = new HubConnectionBuilder()
.withUrl(config.signalRServerUrl)
.build();
setHubConnection(connectionBuilder);
connectionBuilder.start()
.then(() => console.log("signalr connection started"))
.catch((err) => console.log("Error while establishihng connection ", err));
}, []);
return hubConnection;
}
theадминистратор и клиент используют одну и ту же функцию для подключения к центральному сигнальному концентратору asp.net, который в данный момент выглядит следующим образом:
public class PhotoHub : Hub
{
public async Task TakeSnapShot()
{
await Clients.All.SendAsync("takeSnapShot");
}
}
Я думаю, это будет выглядеть примерно так:
только псевдокод
//in javascript connection
let connectionBuilder = new HubConnectionBuilder()
.withProperty(uniqueId) //pseudo code
.withUrl(config.signalRServerUrl)
.build();
<- на сервере ниже ->
public class PhotoHub : Hub
{
public async Task TakeSnapShot(uniqueId)
{
var clientsInSession = Clients.where(customId == uniqueId); //pseudo code
foreach (var client in clientsInSession){
await client.SendAsync("takeSnapShot"); //pseudo code
}
}
}