public async Task ArmaHello(ArmaHelloMessage message) { var ua = Context.GetHttpContext().Request.Headers["User-Agent"]; if (!ua.Any(u => u.Contains("cTabExtension/1."))) { _logger.LogWarning($"ArmaHello was not sent by Extension, but by '{string.Join(", ", ua)}'"); return; } var state = _service.GetOrCreateStateBySteamIdAndKey(message.SteamId, message.Key, new Uri(Context.GetHttpContext().Request.GetEncodedUrl()).DnsSafeHost); Context.Items[nameof(PlayerState)] = state; Context.Items[nameof(ConnectionKind)] = ConnectionKind.Arma; Interlocked.Increment(ref state.ActiveArmaConnections); await Groups.AddToGroupAsync(Context.ConnectionId, state.ArmaChannelName); var uri = _publicUri.GetPublicAdress(Context.GetHttpContext()); var generator = new PayloadGenerator.Url(new Uri(new Uri(uri), "/?t=" + state.Token).AbsoluteUri); var qrGenerator = new QRCodeGenerator(); var qrCodeData = qrGenerator.CreateQrCode(generator.ToString(), QRCodeGenerator.ECCLevel.Q); var data = $"[['{new QrFontCode(qrCodeData).GetString().Replace("\n", "','")}'],'{uri}']"; await Clients.Caller.SendAsync("Callback", "Connected", data); await _tacMapService.UpdateTacMapInterconnect(state); }