Ejemplo n.º 1
0
        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);
        }