Ejemplo n.º 1
0
 /// <summary>
 /// Gets the current channel.
 /// </summary>
 /// <param name="user">The user.</param>
 /// <returns>id of database channel</returns>
 public int CurrentDbChannel(ref IUser user)
 {
     try
     {
         if (_dbsCard.Enabled == false)
         {
             return(-1);
         }
         if (IsLocal == false)
         {
             try
             {
                 RemoteControl.HostName = _dbsCard.ReferencedServer().HostName;
                 return(RemoteControl.Instance.CurrentDbChannel(ref user));
             }
             catch (Exception)
             {
                 Log.Error("card: unable to connect to slave controller at:{0}", _dbsCard.ReferencedServer().HostName);
                 return(-1);
             }
         }
         ITvCardContext context = _card.Context as ITvCardContext;
         context.GetUser(ref user);
         return(user.IdChannel);
     }
     catch (ThreadAbortException)
     {
         return(-1);
     }
     catch (Exception ex)
     {
         Log.Write(ex);
         return(-1);
     }
 }
Ejemplo n.º 2
0
        /// <summary>
        /// Gets the current video stream.
        /// </summary>
        /// <returns></returns>
        public IVideoStream GetCurrentVideoStream(IUser user)
        {
            if (_dbsCard.Enabled == false)
            {
                return(null);
            }
            if (IsLocal == false)
            {
                try
                {
                    RemoteControl.HostName = _dbsCard.ReferencedServer().HostName;
                    return(RemoteControl.Instance.GetCurrentVideoStream(user));
                }
                catch (Exception)
                {
                    Log.Error("card: unable to connect to slave controller at:{0}", _dbsCard.ReferencedServer().HostName);
                    return(null);
                }
            }
            ITvCardContext context = _card.Context as ITvCardContext;

            if (context == null)
            {
                return(null);
            }
            context.GetUser(ref user);
            ITvSubChannel subchannel = _card.GetSubChannel(user.SubChannel);

            if (subchannel == null)
            {
                return(null);
            }
            return(subchannel.GetCurrentVideoStream);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Stops the grabbing epg.
        /// </summary>
        /// <param name="user">User</param>
        public void Stop(IUser user)
        {
            Log.Epg("EpgGrabbing: Stop - user {0}", user.Name);
            if (_cardHandler.IsLocal == false)
            {
                // RemoteControl.HostName = _cardHandler.DataBaseCard.ReferencedServer().HostName;
                // RemoteControl.Instance.StopGrabbingEpg();
                return;
            }
            ITvCardContext context = _cardHandler.Card.Context as ITvCardContext;

            if (context != null)
            {
                context.Remove(user);
                if (context.ContainsUsersForSubchannel(user.SubChannel) == false)
                {
                    if (user.SubChannel > -1)
                    {
                        _cardHandler.Card.FreeSubChannel(user.SubChannel);
                    }
                }
            }
            else
            {
                Log.Epg("EpgGrabbing: Stop - context == null");
            }

            _cardHandler.Card.IsEpgGrabbing = false;
        }
Ejemplo n.º 4
0
        private TvResult AfterTune(IUser user, int idChannel, ITvSubChannel result)
        {
            bool isLocked = _cardHandler.Card.IsTunerLocked;

            Log.Debug("card: Tuner locked: {0}", isLocked);

            Log.Info("**************************************************");
            Log.Info("***** SIGNAL LEVEL: {0}, SIGNAL QUALITY: {1} *****", _cardHandler.Card.SignalLevel,
                     _cardHandler.Card.SignalQuality);
            Log.Info("**************************************************");

            ITvCardContext context = _cardHandler.Card.Context as ITvCardContext;

            if (result != null)
            {
                Log.Debug("card: tuned user: {0} subchannel: {1}", user.Name, result.SubChannelId);
                user.SubChannel = result.SubChannelId;
                user.IdChannel  = idChannel;
                context.Add(user);
            }
            else
            {
                return(TvResult.AllCardsBusy);
            }

            if (result.IsTimeShifting || result.IsRecording)
            {
                context.OnZap(user);
            }
            return(TvResult.Succeeded);
        }
 /// <summary>
 /// Unlocks this card.
 /// </summary>
 /// <param name="user">The user.</param>
 ///
 public void Unlock(IUser user)
 {
     if (_cardHandler.Card != null)
     {
         ITvCardContext context = _cardHandler.Card.Context as ITvCardContext;
         context.Remove(user);
     }
 }
        /// <summary>
        /// Gets the teletext page.
        /// </summary>
        /// <param name="user">User</param>
        /// <param name="pageNumber">The page number.</param>
        /// <param name="subPageNumber">The sub page number.</param>
        /// <returns></returns>
        public byte[] GetTeletextPage(IUser user, int pageNumber, int subPageNumber)
        {
            try
            {
                if (_cardHandler.DataBaseCard.Enabled == false)
                {
                    return new byte[] { 1 }
                }
                ;
                try
                {
                    RemoteControl.HostName = _cardHandler.DataBaseCard.ReferencedServer().HostName;

                    if (!RemoteControl.Instance.CardPresent(_cardHandler.DataBaseCard.IdCard))
                    {
                        return new byte[] { 1 }
                    }
                    ;
                    if (_cardHandler.IsLocal == false)
                    {
                        return(RemoteControl.Instance.GetTeletextPage(user, pageNumber, subPageNumber));
                    }
                }
                catch (Exception)
                {
                    Log.Error("card: unable to connect to slave controller at:{0}",
                              _cardHandler.DataBaseCard.ReferencedServer().HostName);
                    return(new byte[] { 1 });
                }

                ITvCardContext context = _cardHandler.Card.Context as ITvCardContext;
                if (context == null)
                {
                    return new byte[] { 1 }
                }
                ;
                context.GetUser(ref user);
                ITvSubChannel subchannel = _cardHandler.Card.GetSubChannel(user.SubChannel);
                if (subchannel == null)
                {
                    return new byte[] { 1 }
                }
                ;
                if (subchannel.TeletextDecoder == null)
                {
                    return new byte[] { 1 }
                }
                ;
                return(subchannel.TeletextDecoder.GetRawPage(pageNumber, subPageNumber));
            }
            catch (Exception ex)
            {
                Log.Write(ex);
                return(new byte[] { 1 });
            }
        }
        public TvStoppedReason GetTvStoppedReason(IUser user)
        {
            ITvCardContext context = _cardHandler.Card.Context as ITvCardContext;

            if (context == null)
            {
                return(TvStoppedReason.UnknownReason);
            }

            return(context.GetTimeshiftStoppedReason(user));
        }
        public void SetTvStoppedReason(IUser user, TvStoppedReason reason)
        {
            ITvCardContext context = _cardHandler.Card.Context as ITvCardContext;

            if (context == null)
            {
                return;
            }

            context.SetTimeshiftStoppedReason(user, reason);
        }
 /// <summary>
 /// Determines whether the card is locked and ifso returns by which user
 /// </summary>
 /// <param name="user">The user.</param>
 /// <returns>
 ///     <c>true</c> if the specified card is locked; otherwise, <c>false</c>.
 /// </returns>
 public bool IsLocked(out IUser user)
 {
     user = null;
     if (_cardHandler.Card != null)
     {
         ITvCardContext context = _cardHandler.Card.Context as ITvCardContext;
         context.IsLocked(out user);
         return(user != null);
     }
     return(false);
 }
Ejemplo n.º 10
0
        /// <summary>
        /// Pauses the card.
        /// </summary>
        public void PauseCard(IUser user)
        {
            try
            {
                if (_dbsCard.Enabled == false)
                {
                    return;
                }
                if (IsLocal == false)
                {
                    try
                    {
                        RemoteControl.HostName = _dbsCard.ReferencedServer().HostName;
                        RemoteControl.Instance.PauseCard(user);
                        return;
                    }
                    catch (Exception)
                    {
                        Log.Error("card: unable to connect to slave controller at:{0}", _dbsCard.ReferencedServer().HostName);
                        return;
                    }
                }
                Log.Info("Pausecard");

                //remove all subchannels, except for this user...
                ITvSubChannel[] channels = _card.SubChannels;
                for (int i = 0; i < channels.Length; ++i)
                {
                    _card.FreeSubChannel(channels[i].SubChannelId);
                }

                ITvCardContext context = _card.Context as ITvCardContext;
                if (context != null)
                {
                    context.Clear();
                }

                if (_card.SupportsPauseGraph)
                {
                    _card.PauseGraph();
                }
                else
                {
                    _card.StopGraph();
                }
            }
            catch (ThreadAbortException)
            {
            }
            catch (Exception ex)
            {
                Log.Write(ex);
            }
        }
Ejemplo n.º 11
0
        /// <summary>
        /// Returns if the card is timeshifting or not
        /// </summary>
        /// <returns>true when card is timeshifting otherwise false</returns>
        public bool IsTimeShifting(ref IUser user)
        {
            try
            {
                if (_cardHandler.DataBaseCard.Enabled == false)
                {
                    return(false);
                }

                try
                {
                    RemoteControl.HostName = _cardHandler.DataBaseCard.ReferencedServer().HostName;
                    if (!RemoteControl.Instance.CardPresent(_cardHandler.DataBaseCard.IdCard))
                    {
                        return(false);
                    }
                    if (_cardHandler.IsLocal == false)
                    {
                        return(RemoteControl.Instance.IsTimeShifting(ref user));
                    }
                }
                catch (Exception)
                {
                    Log.Error("card: unable to connect to slave controller at:{0}",
                              _cardHandler.DataBaseCard.ReferencedServer().HostName);
                    return(false);
                }
                ITvCardContext context = _cardHandler.Card.Context as ITvCardContext;
                if (context == null)
                {
                    return(false);
                }
                bool userExists;
                context.GetUser(ref user, out userExists);
                if (!userExists)
                {
                    return(false);
                }
                ITvSubChannel subchannel = _cardHandler.Card.GetSubChannel(user.SubChannel);
                if (subchannel == null)
                {
                    return(false);
                }
                return(subchannel.IsTimeShifting);
            }
            catch (Exception ex)
            {
                Log.Write(ex);
                return(false);
            }
        }
Ejemplo n.º 12
0
        /// <summary>
        /// Gets the current channel name.
        /// </summary>
        /// <param name="user">The user.</param>
        /// <returns>channel</returns>
        public string CurrentChannelName(ref IUser user)
        {
            try
            {
                if (_dbsCard.Enabled == false)
                {
                    return("");
                }
                if (IsLocal == false)
                {
                    try
                    {
                        RemoteControl.HostName = _dbsCard.ReferencedServer().HostName;
                        return(RemoteControl.Instance.CurrentChannelName(ref user));
                    }
                    catch (Exception)
                    {
                        Log.Error("card: unable to connect to slave controller at:{0}", _dbsCard.ReferencedServer().HostName);
                        return("");
                    }
                }

                ITvCardContext context = _card.Context as ITvCardContext;
                if (context == null)
                {
                    return("");
                }
                context.GetUser(ref user);
                ITvSubChannel subchannel = _card.GetSubChannel(user.SubChannel);
                if (subchannel == null)
                {
                    return("");
                }
                if (subchannel.CurrentChannel == null)
                {
                    return("");
                }
                return(subchannel.CurrentChannel.Name);
            }
            catch (ThreadAbortException)
            {
                return("");
            }
            catch (Exception ex)
            {
                Log.Write(ex);
                return("");
            }
        }
        public void HeartBeartUser(IUser user)
        {
            ITvCardContext context = _cardHandler.Card.Context as ITvCardContext;

            if (context == null)
            {
                return;
            }
            if (!context.DoesExists(user))
            {
                return;
            }

            context.HeartBeatUser(user);
        }
Ejemplo n.º 14
0
        /// <summary>
        /// Returns the position in the current timeshift file and the id of the current timeshift file
        /// </summary>
        /// <param name="user">The user.</param>
        /// <param name="position">The position in the current timeshift buffer file</param>
        /// <param name="bufferId">The id of the current timeshift buffer file</param>
        public bool GetCurrentFilePosition(ref IUser user, ref Int64 position, ref long bufferId)
        {
            try
            {
                if (_cardHandler.DataBaseCard.Enabled == false)
                {
                    return(false);
                }

                try
                {
                    RemoteControl.HostName = _cardHandler.DataBaseCard.ReferencedServer().HostName;
                    if (!RemoteControl.Instance.CardPresent(_cardHandler.DataBaseCard.IdCard))
                    {
                        return(false);
                    }
                    if (_cardHandler.IsLocal == false)
                    {
                        return(RemoteControl.Instance.TimeShiftGetCurrentFilePosition(ref user, ref position,
                                                                                      ref bufferId));
                    }
                }
                catch (Exception)
                {
                    Log.Error("card: unable to connect to slave controller at:{0}",
                              _cardHandler.DataBaseCard.ReferencedServer().HostName);
                    return(false);
                }
                ITvCardContext context = _cardHandler.Card.Context as ITvCardContext;
                if (context == null)
                {
                    return(false);
                }
                context.GetUser(ref user);
                ITvSubChannel subchannel = _cardHandler.Card.GetSubChannel(user.SubChannel);
                if (subchannel == null)
                {
                    return(false);
                }
                subchannel.TimeShiftGetCurrentFilePosition(ref position, ref bufferId);
                return(position != -1);
            }
            catch (Exception ex)
            {
                Log.Write(ex);
                return(false);
            }
        }
Ejemplo n.º 15
0
 private bool UserExists(ITvCardContext ctx, IUser user)
 {
     foreach (User u in ctx.Users)
     {
         if (
             u.CardId == user.CardId &&
             u.IdChannel == user.IdChannel &&
             u.IsAdmin == user.IsAdmin &&
             u.Name == user.Name &&
             u.SubChannel == user.SubChannel)
         {
             return(true);
         }
     }
     return(false);
 }
Ejemplo n.º 16
0
        /// <summary>
        /// Sets the current audio stream.
        /// </summary>
        /// <param name="user">User</param>
        /// <param name="stream">The stream.</param>
        public void Set(IUser user, IAudioStream stream)
        {
            if (_cardHandler.DataBaseCard.Enabled == false)
            {
                return;
            }

            try
            {
                RemoteControl.HostName = _cardHandler.DataBaseCard.ReferencedServer().HostName;
                if (!RemoteControl.Instance.CardPresent(_cardHandler.DataBaseCard.IdCard))
                {
                    return;
                }
                Log.WriteFile("card: SetCurrentAudioStream: {0} - {1}", _cardHandler.DataBaseCard.IdCard, stream);
                if (_cardHandler.IsLocal == false)
                {
                    Log.WriteFile("card: SetCurrentAudioStream: controlling remote instance {0}", RemoteControl.HostName);
                    RemoteControl.Instance.SetCurrentAudioStream(user, stream);
                }
            }
            catch (Exception)
            {
                Log.Error("card: unable to connect to slave controller at:{0}",
                          _cardHandler.DataBaseCard.ReferencedServer().HostName);
                return;
            }

            ITvCardContext context = _cardHandler.Card.Context as ITvCardContext;

            if (context == null)
            {
                Log.WriteFile("card: SetCurrentAudioStream: TvCardContext == null");
                return;
            }

            context.GetUser(ref user);
            ITvSubChannel subchannel = _cardHandler.Card.GetSubChannel(user.SubChannel);

            if (subchannel == null)
            {
                Log.WriteFile("card: SetCurrentAudioStream: ITvSubChannel == null");
                return;
            }

            subchannel.CurrentAudioStream = stream;
        }
Ejemplo n.º 17
0
        /// <summary>
        /// returns the date/time when timeshifting has been started for the card specified
        /// </summary>
        /// <returns>DateTime containg the date/time when timeshifting was started</returns>
        public DateTime TimeShiftStarted(IUser user)
        {
            try
            {
                if (_cardHandler.DataBaseCard.Enabled == false)
                {
                    return(DateTime.MinValue);
                }

                try
                {
                    RemoteControl.HostName = _cardHandler.DataBaseCard.ReferencedServer().HostName;
                    if (!RemoteControl.Instance.CardPresent(_cardHandler.DataBaseCard.IdCard))
                    {
                        return(DateTime.MinValue);
                    }
                    if (_cardHandler.IsLocal == false)
                    {
                        return(RemoteControl.Instance.TimeShiftStarted(user));
                    }
                }
                catch (Exception)
                {
                    Log.Error("card: unable to connect to slave controller at:{0}",
                              _cardHandler.DataBaseCard.ReferencedServer().HostName);
                    return(DateTime.MinValue);
                }

                ITvCardContext context = _cardHandler.Card.Context as ITvCardContext;
                if (context == null)
                {
                    return(DateTime.MinValue);
                }
                context.GetUser(ref user);
                ITvSubChannel subchannel = _cardHandler.Card.GetSubChannel(user.SubChannel);
                if (subchannel == null)
                {
                    return(DateTime.MinValue);
                }
                return(subchannel.StartOfTimeShift);
            }
            catch (Exception ex)
            {
                Log.Write(ex);
                return(DateTime.MinValue);
            }
        }
Ejemplo n.º 18
0
 private void SetContextOwnerToNextRecUser(ITvCardContext context)
 {
     IUser[] users = context.Users;
     foreach (IUser t in users)
     {
         ITvSubChannel subchannel = GetSubChannel(t.SubChannel);
         if (subchannel != null)
         {
             if (subchannel.IsRecording)
             {
                 Log.Write("card: StopRecording setting new context owner on user '{0}'", t.Name);
                 context.Owner = t;
                 break;
             }
         }
     }
 }
        /// <summary>
        /// Returns the rotation time for a specific teletext page
        /// </summary>
        /// <param name="user">User</param>
        /// <param name="pageNumber">The pagenumber (0x100-0x899)</param>
        /// <returns>timespan containing the rotation time</returns>
        public TimeSpan TeletextRotation(IUser user, int pageNumber)
        {
            try
            {
                if (_cardHandler.DataBaseCard.Enabled == false)
                {
                    return(new TimeSpan(0, 0, 0, 15));
                }
                try
                {
                    RemoteControl.HostName = _cardHandler.DataBaseCard.ReferencedServer().HostName;
                    if (!RemoteControl.Instance.CardPresent(_cardHandler.DataBaseCard.IdCard))
                    {
                        return(new TimeSpan(0, 0, 0, 15));
                    }
                    if (_cardHandler.IsLocal == false)
                    {
                        return(RemoteControl.Instance.TeletextRotation(user, pageNumber));
                    }
                }
                catch (Exception)
                {
                    Log.Error("card: unable to connect to slave controller at:{0}",
                              _cardHandler.DataBaseCard.ReferencedServer().HostName);
                    return(new TimeSpan(0, 0, 0, 15));
                }

                ITvCardContext context = _cardHandler.Card.Context as ITvCardContext;
                if (context == null)
                {
                    return(new TimeSpan(0, 0, 0, 15));
                }
                context.GetUser(ref user);
                ITvSubChannel subchannel = _cardHandler.Card.GetSubChannel(user.SubChannel);
                if (subchannel == null)
                {
                    return(new TimeSpan(0, 0, 0, 15));
                }
                return(subchannel.TeletextDecoder.RotationTime(pageNumber));
            }
            catch (Exception ex)
            {
                Log.Write(ex);
                return(new TimeSpan(0, 0, 0, 15));
            }
        }
        /// <summary>
        /// turn on/off teletext grabbing
        /// </summary>
        /// <param name="user">User</param>
        /// <param name="onOff">turn on/off teletext grabbing</param>
        public void GrabTeletext(IUser user, bool onOff)
        {
            try
            {
                if (_cardHandler.DataBaseCard.Enabled == false)
                {
                    return;
                }
                try
                {
                    RemoteControl.HostName = _cardHandler.DataBaseCard.ReferencedServer().HostName;
                    if (!RemoteControl.Instance.CardPresent(_cardHandler.DataBaseCard.IdCard))
                    {
                        return;
                    }
                    if (_cardHandler.IsLocal == false)
                    {
                        RemoteControl.Instance.GrabTeletext(user, onOff);
                    }
                }
                catch (Exception)
                {
                    Log.Error("card: unable to connect to slave controller at:{0}",
                              _cardHandler.DataBaseCard.ReferencedServer().HostName);
                    return;
                }

                ITvCardContext context = _cardHandler.Card.Context as ITvCardContext;
                if (context == null)
                {
                    return;
                }
                context.GetUser(ref user);
                ITvSubChannel subchannel = _cardHandler.Card.GetSubChannel(user.SubChannel);
                if (subchannel == null)
                {
                    return;
                }
                subchannel.GrabTeletext = onOff;
            }
            catch (Exception ex)
            {
                Log.Write(ex);
                return;
            }
        }
 /// <summary>
 /// Gets the teletext pagenumber for the blue button
 /// </summary>
 /// <param name="user">The user.</param>
 /// <returns>Teletext pagenumber for the blue button</returns>
 public int GetTeletextBluePageNumber(IUser user)
 {
     try
     {
         if (_cardHandler.DataBaseCard.Enabled == false)
         {
             return(-1);
         }
         if (_cardHandler.IsLocal == false)
         {
             try
             {
                 RemoteControl.HostName = _cardHandler.DataBaseCard.ReferencedServer().HostName;
                 return(RemoteControl.Instance.GetTeletextBluePageNumber(user));
             }
             catch (Exception)
             {
                 Log.Error("card: unable to connect to slave controller at:{0}",
                           _cardHandler.DataBaseCard.ReferencedServer().HostName);
                 return(-1);
             }
         }
         ITvCardContext context = _cardHandler.Card.Context as ITvCardContext;
         if (context == null)
         {
             return(-1);
         }
         context.GetUser(ref user);
         ITvSubChannel subchannel = _cardHandler.Card.GetSubChannel(user.SubChannel);
         if (subchannel == null)
         {
             return(-1);
         }
         if (subchannel.TeletextDecoder == null)
         {
             return(-1);
         }
         return(subchannel.TeletextDecoder.PageBlue);
     }
     catch (Exception ex)
     {
         Log.Write(ex);
         return(-1);
     }
 }
        private TvResult GetTvResultFromTimeshiftingSubchannel(ref IUser user, ITvCardContext context)
        {
            TvResult result;
            bool     isScrambled;

            if (WaitForFile(ref user, out isScrambled))
            {
                context.OnZap(user);
                StartLinkageScanner();
                StartTimeShiftingEPGgrabber(user);
                result = TvResult.Succeeded;
            }
            else
            {
                result = GetFailedTvResult(isScrambled);
            }
            return(result);
        }
Ejemplo n.º 23
0
        /// <summary>
        /// Fetches the stream quality information
        /// </summary>
        /// <param name="user">user</param>
        /// <param name="totalTSpackets">Amount of packets processed</param>
        /// <param name="discontinuityCounter">Number of stream discontinuities</param>
        /// <returns></returns>
        public void GetStreamQualityCounters(IUser user, out int totalTSpackets, out int discontinuityCounter)
        {
            totalTSpackets       = 0;
            discontinuityCounter = 0;

            ITvCardContext context = _cardHandler.Card.Context as ITvCardContext;
            bool           userExists;

            context.GetUser(ref user, out userExists);
            ITvSubChannel subchannel = _cardHandler.Card.GetSubChannel(user.SubChannel);

            TvDvbChannel dvbSubchannel = subchannel as TvDvbChannel;

            if (dvbSubchannel != null)
            {
                dvbSubchannel.GetStreamQualityCounters(out totalTSpackets, out discontinuityCounter);
            }
        }
        /// <summary>
        /// Determines whether the specified user is owner of this card
        /// </summary>
        /// <param name="user">The user.</param>
        /// <returns>
        ///     <c>true</c> if the specified user is owner; otherwise, <c>false</c>.
        /// </returns>
        public bool IsOwner(IUser user)
        {
            if (_cardHandler.IsLocal == false)
            {
                try
                {
                    RemoteControl.HostName = _cardHandler.DataBaseCard.ReferencedServer().HostName;
                    return(RemoteControl.Instance.IsOwner(_cardHandler.DataBaseCard.IdCard, user));
                }
                catch (Exception)
                {
                    Log.Error("card: unable to connect to slave controller at:{0}",
                              _cardHandler.DataBaseCard.ReferencedServer().HostName);
                    return(false);
                }
            }
            ITvCardContext context = _cardHandler.Card.Context as ITvCardContext;

            return(context.IsOwner(user));
        }
Ejemplo n.º 25
0
        /// <summary>
        /// Gets the current audio stream.
        /// </summary>
        /// <returns></returns>
        public IAudioStream GetCurrent(IUser user)
        {
            if (_cardHandler.DataBaseCard.Enabled == false)
            {
                return(null);
            }

            try
            {
                RemoteControl.HostName = _cardHandler.DataBaseCard.ReferencedServer().HostName;
                if (!RemoteControl.Instance.CardPresent(_cardHandler.DataBaseCard.IdCard))
                {
                    return(null);
                }
                if (_cardHandler.IsLocal == false)
                {
                    return(RemoteControl.Instance.GetCurrentAudioStream(user));
                }
            }
            catch (Exception)
            {
                Log.Error("card: unable to connect to slave controller at:{0}",
                          _cardHandler.DataBaseCard.ReferencedServer().HostName);
                return(null);
            }

            ITvCardContext context = _cardHandler.Card.Context as ITvCardContext;

            if (context == null)
            {
                return(null);
            }
            context.GetUser(ref user);
            ITvSubChannel subchannel = _cardHandler.Card.GetSubChannel(user.SubChannel);

            if (subchannel == null)
            {
                return(null);
            }
            return(subchannel.CurrentAudioStream);
        }
Ejemplo n.º 26
0
 /// <summary>
 /// Returns whether the channel to which the card is tuned is
 /// scrambled or not.
 /// </summary>
 /// <returns>yes if channel is scrambled and CI/CAM cannot decode it, otherwise false</returns>
 public bool IsScrambled(ref IUser user)
 {
     try
     {
         if (_dbsCard.Enabled == false)
         {
             return(true);
         }
         if (IsLocal == false)
         {
             try
             {
                 RemoteControl.HostName = _dbsCard.ReferencedServer().HostName;
                 return(RemoteControl.Instance.IsScrambled(ref user));
             }
             catch (Exception)
             {
                 Log.Error("card: unable to connect to slave controller at:{0}", _dbsCard.ReferencedServer().HostName);
                 return(false);
             }
         }
         ITvCardContext context = _card.Context as ITvCardContext;
         if (context == null)
         {
             return(false);
         }
         context.GetUser(ref user);
         ITvSubChannel subchannel = _card.GetSubChannel(user.SubChannel);
         if (subchannel == null)
         {
             return(false);
         }
         return(false == subchannel.IsReceivingAudioVideo);
     }
     catch (Exception ex)
     {
         Log.Write(ex);
         return(false);
     }
 }
        /// <summary>
        /// Gets the users for this card.
        /// </summary>
        /// <returns></returns>
        public IUser[] GetUsers()
        {
            if (_cardHandler.IsLocal == false)
            {
                try
                {
                    RemoteControl.HostName = _cardHandler.DataBaseCard.ReferencedServer().HostName;
                    return(RemoteControl.Instance.GetUsersForCard(_cardHandler.DataBaseCard.IdCard));
                }
                catch (Exception)
                {
                    Log.Error("card: unable to connect to slave controller at:{0}",
                              _cardHandler.DataBaseCard.ReferencedServer().HostName);
                    return(null);
                }
            }
            ITvCardContext context = _cardHandler.Card.Context as ITvCardContext;

            if (context == null)
            {
                return(null);
            }
            return(context.Users);
        }
Ejemplo n.º 28
0
        /// <summary>
        /// Stops the time shifting.
        /// </summary>
        /// <returns></returns>
        public bool Stop(ref IUser user)
        {
            try
            {
                if (_cardHandler.DataBaseCard.Enabled == false)
                {
                    return(true);
                }

                ITvSubChannel subchannel = _cardHandler.Card.GetSubChannel(user.SubChannel);
                if (subchannel is BaseSubChannel)
                {
                    ((BaseSubChannel)subchannel).AudioVideoEvent -= AudioVideoEventHandler;
                }

                Log.Write("card {2}: StopTimeShifting user:{0} sub:{1}", user.Name, user.SubChannel,
                          _cardHandler.Card.Name);

                lock (this)
                {
                    try
                    {
                        RemoteControl.HostName = _cardHandler.DataBaseCard.ReferencedServer().HostName;
                        if (!RemoteControl.Instance.CardPresent(_cardHandler.DataBaseCard.IdCard))
                        {
                            return(true);
                        }

                        Log.Write("card: StopTimeShifting user:{0} sub:{1}", user.Name, user.SubChannel);

                        if (_cardHandler.IsLocal == false)
                        {
                            return(RemoteControl.Instance.StopTimeShifting(ref user));
                        }
                    }
                    catch (Exception)
                    {
                        Log.Error("card: unable to connect to slave controller at:{0}",
                                  _cardHandler.DataBaseCard.ReferencedServer().HostName);
                        return(false);
                    }

                    ITvCardContext context = _cardHandler.Card.Context as ITvCardContext;
                    if (context == null)
                    {
                        return(true);
                    }
                    if (_linkageScannerEnabled)
                    {
                        _cardHandler.Card.ResetLinkageScanner();
                    }

                    if (_cardHandler.IsIdle)
                    {
                        _cardHandler.PauseCard(user);
                    }
                    else
                    {
                        Log.Debug("card not IDLE - removing user: {0}", user.Name);
                        _cardHandler.Users.RemoveUser(user);
                    }

                    context.Remove(user);
                    return(true);
                }
            }
            catch (Exception ex)
            {
                Log.Write(ex);
            }
            return(false);
        }
        /// <summary>
        /// Removes the user from this card
        /// </summary>
        /// <param name="user">The user.</param>
        public void RemoveUser(IUser user)
        {
            if (_cardHandler.IsLocal == false)
            {
                try
                {
                    RemoteControl.HostName = _cardHandler.DataBaseCard.ReferencedServer().HostName;
                    RemoteControl.Instance.RemoveUserFromOtherCards(_cardHandler.DataBaseCard.IdCard, user);
                    return;
                }
                catch (Exception)
                {
                    Log.Error("card: unable to connect to slave controller at:{0}",
                              _cardHandler.DataBaseCard.ReferencedServer().HostName);
                    return;
                }
            }
            ITvCardContext context = _cardHandler.Card.Context as ITvCardContext;

            if (context == null)
            {
                return;
            }
            if (!context.DoesExists(user))
            {
                return;
            }
            context.GetUser(ref user, _cardHandler.DataBaseCard.IdCard);

            Log.Debug("usermanagement.RemoveUser: {0}, subch: {1} of {2}, card: {3}", user.Name, user.SubChannel, _cardHandler.Card.SubChannels.Length, _cardHandler.DataBaseCard.IdCard);
            context.Remove(user);
            if (!context.ContainsUsersForSubchannel(user.SubChannel))
            {
                //only remove subchannel if it exists.
                if (_cardHandler.Card.GetSubChannel(user.SubChannel) != null)
                {
                    int usedSubChannel = user.SubChannel;
                    // Before we remove the subchannel we have to stop it
                    ITvSubChannel subChannel = _cardHandler.Card.GetSubChannel(user.SubChannel);
                    if (subChannel.IsTimeShifting)
                    {
                        subChannel.StopTimeShifting();
                    }
                    else if (subChannel.IsRecording)
                    {
                        subChannel.StopRecording();
                    }
                    _cardHandler.Card.FreeSubChannel(user.SubChannel);
                    CleanTimeshiftFilesThread cleanTimeshiftFilesThread =
                        new CleanTimeshiftFilesThread(_cardHandler.DataBaseCard.TimeShiftFolder,
                                                      String.Format("live{0}-{1}.ts", _cardHandler.DataBaseCard.IdCard,
                                                                    usedSubChannel));
                    Thread cleanupThread = new Thread(cleanTimeshiftFilesThread.CleanTimeshiftFiles);
                    cleanupThread.IsBackground = true;
                    cleanupThread.Name         = "TS_File_Cleanup";
                    cleanupThread.Priority     = ThreadPriority.Lowest;
                    cleanupThread.Start();
                }
            }
            if (_cardHandler.IsIdle)
            {
                if (_cardHandler.Card.SupportsPauseGraph)
                {
                    _cardHandler.Card.PauseGraph();
                }
                else
                {
                    _cardHandler.Card.StopGraph();
                }
            }
        }
Ejemplo n.º 30
0
 private bool UserExists (ITvCardContext ctx, IUser user)
 {
   foreach (User u in ctx.Users)
   {
     if (
         u.CardId == user.CardId && 
         u.IdChannel == user.IdChannel && 
         u.IsAdmin == user.IsAdmin && 
         u.Name == user.Name && 
         u.SubChannel == user.SubChannel)
     {
       return true;
     }
   }
   return false;
 }
Ejemplo n.º 31
0
 private TvResult GetTvResultFromTimeshiftingSubchannel(ref IUser user, ITvCardContext context)
 {
   TvResult result;
   bool isScrambled;
   if (WaitForFile(ref user, out isScrambled))
   {
     context.OnZap(user);
     StartLinkageScanner();
     StartTimeShiftingEPGgrabber(user);
     result = TvResult.Succeeded;
   }
   else
   {
     result = GetFailedTvResult(isScrambled);
   }
   return result;
 }
Ejemplo n.º 32
0
 private void SetContextOwnerToNextRecUser(ITvCardContext context)
 {
   IUser[] users = context.Users;
   foreach (IUser t in users)
   {
     ITvSubChannel subchannel = GetSubChannel(t.SubChannel);
     if (subchannel != null)
     {
       if (subchannel.IsRecording)
       {
         Log.Write("card: StopRecording setting new context owner on user '{0}'", t.Name);
         context.Owner = t;
         break;
       }
     }
   }
 }
Ejemplo n.º 33
0
        private bool BeforeTune(IChannel channel, ref IUser user, out TvResult result)
        {
            result = TvResult.UnknownError;
            //@FIX this fails for back-2-back recordings
            //if (CurrentDbChannel(ref user) == idChannel && idChannel >= 0)
            //{
            //  return true;
            //}
            Log.Debug("card: user: {0}:{1}:{2} tune {3}", user.Name, user.CardId, user.SubChannel, channel.ToString());
            _cardHandler.Card.CamType = (CamType)_cardHandler.DataBaseCard.CamType;
            _cardHandler.SetParameters();

            //check if transponder differs
            ITvCardContext context = _cardHandler.Card.Context as ITvCardContext;

            if (_cardHandler.Card.SubChannels.Length > 0)
            {
                if (IsTunedToTransponder(channel) == false)
                {
                    if (context.IsOwner(user) || user.IsAdmin)
                    {
                        Log.Debug("card: to different transponder");

                        //remove all subchannels, except for this user...
                        IUser[] users = context.Users;
                        for (int i = 0; i < users.Length; ++i)
                        {
                            if (users[i].Name != user.Name)
                            {
                                Log.Debug("  stop subchannel: {0} user: {1}", i, users[i].Name);

                                //fix for b2b mantis; http://mantis.team-mediaportal.com/view.php?id=1112
                                if (users[i].IsAdmin)
                                // if we are stopping an on-going recording/schedule (=admin), we have to make sure that we remove the schedule also.
                                {
                                    Log.Debug("user is scheduler: {0}", users[i].Name);
                                    int recScheduleId = RemoteControl.Instance.GetRecordingSchedule(users[i].CardId,
                                                                                                    users[i].IdChannel);

                                    if (recScheduleId > 0)
                                    {
                                        Schedule schedule = Schedule.Retrieve(recScheduleId);
                                        Log.Info("removing schedule with id: {0}", schedule.IdSchedule);
                                        RemoteControl.Instance.StopRecordingSchedule(schedule.IdSchedule);
                                        schedule.Delete();
                                    }
                                }
                                else
                                {
                                    _cardHandler.Card.FreeSubChannel(users[i].SubChannel);
                                    context.Remove(users[i]);
                                }
                            }
                        }
                    }
                    else
                    {
                        Log.Debug("card: user: {0} is not the card owner. Cannot switch transponder", user.Name);
                        result = TvResult.NotTheOwner;
                        return(false);
                    }
                }
                else // same transponder, free previous subchannel before tuning..
                {
                    _cardHandler.Card.FreeSubChannel(user.SubChannel);
                }
            }

            if (OnBeforeTuneEvent != null)
            {
                OnBeforeTuneEvent(_cardHandler);
            }

            TvCardBase card = _cardHandler.Card as TvCardBase;

            if (card != null)
            {
                card.AfterTuneEvent -= new TvCardBase.OnAfterTuneDelegate(Card_OnAfterTuneEvent);
                card.AfterTuneEvent += new TvCardBase.OnAfterTuneDelegate(Card_OnAfterTuneEvent);
            }
            else
            {
                HybridCard hybridCard = _cardHandler.Card as HybridCard;
                if (hybridCard != null)
                {
                    hybridCard.AfterTuneEvent = new TvCardBase.OnAfterTuneDelegate(Card_OnAfterTuneEvent);
                }
            }

            result = TvResult.Succeeded;
            return(true);
        }