Я внедрил одноэтапную службу в хабе SignalR для сохранения сведений о клиенте, когда соединение активно,
Client.Client(_memory.Player.ConnectionId).SendAsync("registerComplete")
вызывает несколько запросов, например, впервые клиент Angular регистрируется один раз, после обновления или вызовадругая функция, число журналов увеличивается на 1
Я хотел создать частные переменные в сигнальном концентраторе, но затем прочитал, что концентраторы не имеют состояния, и попытался внедрить одноэлементный класс с именем HubMemory, но, как упоминалось ранее, это вызывает повторяющиеся запросы
Я не хочу, чтобы _memory был статичным, хочу, чтобы у каждого хаба игрока была своя память.
private LoggingManager _logger;
private object _syncRoot = new object();
private IHubContext<PlayerConnectionHub> _context;
private HubMemory _memory;
public PlayerConnectionHub(IHubContext<PlayerConnectionHub> hubContext, HubMemory memory)
{
_logger = new LoggingManager();
_context = hubContext;
_memory = memory;
}
public short RegisterClient(string userName, long accountId)
{
lock (_syncRoot)
{
Player.Player player;
if (Players.ContainsKey(accountId))
{
return -1;
}
else
{
player = new Player.Player
{
ConnectionId = Context.ConnectionId,
UserName = userName,
AccountId = accountId
};
Players.Add(accountId, player);
_memory.Player = player;
}
player.Online = true;
_context.Clients.Client(_memory.Player.ConnectionId).SendAsync("registerComplete");
_logger.LogPlayers(Players);
return 0;
}
}
Это в консоли браузера, onRegisterComplete регистрирует registerComplete, но после обновления или вызова в другой разRegisterClient регистрирует два раза и цифры увеличиваются.