Как это исправить: внедрение одиночного сервиса в хаб SignalR вызывает проблемы - PullRequest
1 голос
/ 04 ноября 2019

Я внедрил одноэтапную службу в хабе 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 регистрирует два раза и цифры увеличиваются.

...