private void cacheResult(string pit, PlayerIdentityToken decodedPit)
        {
            if (_cacheClient == null)
            {
                return;
            }

            var offset        = DateTimeOffset.FromUnixTimeSeconds(decodedPit.ExpiryTime.Seconds);
            var expiryFromNow = offset.Subtract(DateTime.Now);
            var cacheExpiry   = _defaultCacheExpiry;

            if (expiryFromNow < cacheExpiry)
            {
                cacheExpiry = expiryFromNow;
            }

            try
            {
                var jsonPit = JsonFormatter.Default.Format(decodedPit);
                var key     = getCacheKey(pit);
                _cacheClient.StringSet(key, jsonPit, cacheExpiry);
            }
            catch
            {
                // TODO: log this but don't block on a broken cache
            }
        }
        private static string ExtractPlayerIdentifier(PlayerIdentityToken decodedPit)
        {
            var playerIdentifier = decodedPit.PlayerIdentifier;

            if (!AuthHeaders.ValidatePlayerId(playerIdentifier))
            {
                throw new RpcException(new Status(StatusCode.PermissionDenied,
                                                  "The Player Identity Token doesn't contain a valid player_identifier"));
            }

            return(playerIdentifier);
        }