public EStreamingSessionType Identify(SessionBrokerModel model)
        {
            foreach (var identifier in _userTypeIdentifiers)
            {
                var result = identifier.GetSessionType(model);
                if (result != EStreamingSessionType.Unkown)
                {
                    return(result);
                }
            }

            return(EStreamingSessionType.Unkown);
        }
Example #2
0
        public EStreamingSessionType GetSessionType(SessionBrokerModel model)
        {
            var regToken = model.RegistrationToken;

            if (regToken != null)
            {
                if (regToken.StartsWith("Unicorn", StringComparison.Ordinal))
                {
                    return(EStreamingSessionType.Paid);
                }
            }

            return(EStreamingSessionType.Unkown);
        }
Example #3
0
        public StreamSession InitializeSession(SessionBrokerModel model)
        {
            var closestChunk = _chunkCollector.GetClosestChunk(
                new ChunksCollectorModelByTime
            {
                Channel       = model.Channel,
                HlsListSize   = model.ListSize,
                RequestedTime = model.RequiredTime
            }
                );

            return(new StreamSession
            {
                Channel = model.Channel,
                HlsListSize = model.ListSize,
                IP = model.IP,
                UserAgent = model.UserAgent,
                DisplayContent = model.DisplayContent,
                MediaSeq = 0,
                DiscontSeq = 0,
                LastFilePath = closestChunk.fullPath
            });
        }
        private async Task <IActionResult> StreamInternalAsync(
            string channel,
            int listSize             = 5,
            string timeStr           = null,
            int timeShiftMills       = 0,
            bool displayContent      = false,
            string registrationToken = null)
        {
            DateTime requiredTime;

            if (timeStr == null)
            {
                requiredTime = DateTime.Now;
            }
            else
            {
                try
                {
                    requiredTime =
                        JsonConvert.DeserializeObject <DateTime>(timeStr);
                }
                catch (JsonReaderException)
                { return(View("InvalidTimeFormat")); }
            }

            if (timeShiftMills != 0)
            {
                requiredTime = requiredTime.AddMilliseconds(-timeShiftMills);
            }

            StreamSession session;
            var           sessionBrokerModel = new SessionBrokerModel
            {
                Channel           = channel,
                ListSize          = listSize,
                RequiredTime      = requiredTime,
                DisplayContent    = displayContent,
                RegistrationToken = registrationToken,
                IP        = HttpContext.Connection.RemoteIpAddress.ToString(),
                UserAgent = HttpContext.Request.Headers[HeaderNames.UserAgent]
            };

            try
            {
                session = _sessionBroker.InitializeSession(sessionBrokerModel);
            }
            catch (ChunkCollectorException e)
            { return(Content(e.Message)); }

            var token = _tokenBroker.GenerateToken(
                session,
                _sessionCfg.TokenSALT);

            try
            {
                await _cache.SetObjAsync(
                    token,
                    session,
                    GetSessionExpiration());
            }
            catch (Exception)
            { return(View("RedisConnectionException")); }

            return(RedirectToAction("TokenizedStreamAsync", new { token }));
        }
Example #5
0
 public EStreamingSessionType GetSessionType(SessionBrokerModel model)
 {
     return(EStreamingSessionType.Guest);
 }