示例#1
0
        /// <summary>
        /// 启动事件中的一个频道和节目
        /// </summary>
        /// <param name="eventData"></param>
        /// <param name="ec"></param>
        /// <param name="cancellationToken"></param>
        private static void StartOneChannelAndProgram(AMSEvent eventData, AMSEventChannel ec, CancellationToken cancellationToken)
        {
            try
            {
                if (ec.State == AMSEventState.NotStart)
                {
                    AMSEventSqlAdapter.Instance.UpdateEventChannelState(ec.EventID, ec.ChannelID, AMSEventState.Starting);
                }

                AMSChannel channel = StartChannel(ec.ChannelID, cancellationToken);

                if (cancellationToken.IsCancellationRequested == false)
                {
                    if (channel != null && channel.State == AMSChannelState.Running)
                    {
                        LockHelper.ExtendLockTime(eventData);

                        StartProgram(eventData, channel, ec, cancellationToken);
                    }
                }
            }
            catch (System.Exception ex)
            {
                TraceHelper.AMSTaskTraceSource.TraceEvent(TraceEventType.Error, 60020, ex.ToString());
            }
        }
示例#2
0
        /// <summary>
        /// 在一个事件下增加频道(UI上用于频道列表)
        /// </summary>
        /// <param name="eventID"></param>
        /// <param name="channelIDs"></param>
        /// <returns></returns>
        public int AddChannel(string eventID, IEnumerable <string> channelIDs)
        {
            eventID.CheckStringIsNullOrEmpty("eventID");
            channelIDs.NullCheck("channelIDs");

            StringBuilder strB = new StringBuilder();

            AMSEventChannel eventChannel = new AMSEventChannel();

            eventChannel.EventID   = eventID;
            eventChannel.State     = AMSEventState.NotStart;
            eventChannel.IsDefault = false;

            foreach (string channelID in channelIDs)
            {
                eventChannel.ChannelID = channelID;

                if (strB.Length > 0)
                {
                    strB.Append(TSqlBuilder.Instance.DBStatementSeperator);
                }

                strB.Append(ORMapping.GetInsertSql(eventChannel, TSqlBuilder.Instance));
            }

            int result = 0;

            if (strB.Length > 0)
            {
                result = DbHelper.RunSqlWithTransaction(strB.ToString(), this.GetConnectionName());
            }

            return(result);
        }
示例#3
0
        public int UpdateEventChannel(AMSEventChannel ec)
        {
            ec.NullCheck("ec");

            string sql = ORMapping.GetUpdateSql(ec, TSqlBuilder.Instance);

            return(DbHelper.RunSql(sql, this.GetConnectionName()));
        }
示例#4
0
        private static void StartProgram(AMSEvent eventData, AMSChannel channel, AMSEventChannel ec, CancellationToken cancellationToken)
        {
            TraceHelper.AMSTaskTraceSource.TraceEvent(TraceEventType.Verbose, 60017, "Start Program:\n{0}", channel.ToTraceInfo());

            SimulateOrExecuteAction(() => LiveChannelManager.StartProgram(channel, eventData, ec), () => ec.State = AMSEventState.Running);

            AMSEventSqlAdapter.Instance.UpdateEventChannel(ec);

            TraceHelper.AMSTaskTraceSource.TraceEvent(TraceEventType.Verbose, 60017, "Program Started:\n{0}", channel.ToTraceInfo());
        }
示例#5
0
        protected override string GetInsertSql(AMSEvent data, ORMappingItemCollection mappings, Dictionary <string, object> context)
        {
            StringBuilder strB = new StringBuilder();

            strB.Append(base.GetInsertSql(data, mappings, context));
            strB.Append(TSqlBuilder.Instance.DBStatementSeperator);

            AMSEventChannel eventChannel = AMSEventChannel.FromAMSEvent(data);

            strB.Append(ORMapping.GetInsertSql(eventChannel, TSqlBuilder.Instance));

            return(strB.ToString());
        }
示例#6
0
        /// <summary>
        /// 停止一个节目
        /// </summary>
        /// <param name="eventData"></param>
        /// <param name="ec"></param>
        /// <param name="cancellationToken"></param>
        private static void StopOneProgram(AMSEvent eventData, AMSEventChannel ec, CancellationToken cancellationToken)
        {
            try
            {
                if (ec.State == AMSEventState.Running)
                {
                    AMSEventSqlAdapter.Instance.UpdateEventChannelState(ec.EventID, ec.ChannelID, AMSEventState.Stopping);
                }

                StopProgram(eventData, ec, cancellationToken);
            }
            catch (System.Exception ex)
            {
                TraceHelper.AMSTaskTraceSource.TraceEvent(TraceEventType.Error, 60021, ex.ToString());
            }
        }
示例#7
0
        private static void StopProgram(AMSEvent eventData, AMSEventChannel ec, CancellationToken cancellationToken)
        {
            TraceHelper.AMSTaskTraceSource.TraceEvent(TraceEventType.Verbose, 60018, "Stop Program:\n{0}", eventData.ToTraceInfo());

            AMSChannel channel = AMSChannelSqlAdapter.Instance.LoadByID(ec.ChannelID);

            if (channel != null)
            {
                SimulateOrExecuteAction(() => LiveChannelManager.StopProgram(channel, eventData, ec), () => ec.State = AMSEventState.Completed);
            }
            else
            {
                ec.State = AMSEventState.Completed;
            }

            AMSEventSqlAdapter.Instance.UpdateEventChannel(ec);

            TraceHelper.AMSTaskTraceSource.TraceEvent(TraceEventType.Verbose, 60018, "Program Stopped:\n{0}", eventData.ToTraceInfo());
        }
示例#8
0
        public static void StopEvent(AMSQueueItem message, CancellationToken cancellationToken)
        {
            AMSEvent eventData = null;

            try
            {
                eventData = AMSEventSqlAdapter.Instance.LoadByID(message.ResourceID);

                if (eventData != null)
                {
                    if (eventData.State == AMSEventState.Running)
                    {
                        AMSEventSqlAdapter.Instance.UpdateState(eventData.ID, AMSEventState.Stopping);
                    }

                    AMSEventChannelCollection ecs = AMSEventSqlAdapter.Instance.LoadEventAndChannel(eventData.ID);

                    Task[] stopProgramTasks = new Task[ecs.Count];

                    for (int i = 0; i < stopProgramTasks.Length; i++)
                    {
                        AMSEventChannel ec = ecs[i];
                        stopProgramTasks[i] = Task.Factory.StartNew(() => StopOneProgram(eventData, ec, cancellationToken));
                    }

                    Task.WaitAll(stopProgramTasks.ToArray());

                    AMSEventSqlAdapter.Instance.UpdateCompletedStateByChannels(eventData.ID);
                }
            }
            finally
            {
                if (eventData != null)
                {
                    LockHelper.Unlock(eventData);
                }
            }
        }
示例#9
0
        /// <summary>
        /// 停止一个节目
        /// </summary>
        /// <param name="eventData"></param>
        /// <param name="ec"></param>
        /// <param name="cancellationToken"></param>
        private static void StopOneProgram(AMSEvent eventData, AMSEventChannel ec, CancellationToken cancellationToken)
        {
            try
            {
                if (ec.State == AMSEventState.Running)
                    AMSEventSqlAdapter.Instance.UpdateEventChannelState(ec.EventID, ec.ChannelID, AMSEventState.Stopping);

                InnerStopProgram(eventData, ec, cancellationToken);
            }
            catch (System.Exception ex)
            {
                TraceHelper.AMSTaskTraceSource.TraceEvent(TraceEventType.Error, 60021, ex.ToString());
            }
        }
示例#10
0
        /// <summary>
        /// 启动事件中的一个频道和节目
        /// </summary>
        /// <param name="eventData"></param>
        /// <param name="ec"></param>
        /// <param name="cancellationToken"></param>
        private static void StartOneChannelAndCreateProgram(AMSEvent eventData, AMSEventChannel ec, CancellationToken cancellationToken)
        {
            try
            {
                if (ec.State == AMSEventState.NotStart)
                    AMSEventSqlAdapter.Instance.UpdateEventChannelState(ec.EventID, ec.ChannelID, AMSEventState.Starting);

                AMSChannel channel = InnerStartChannel(ec.ChannelID, cancellationToken);

                if (cancellationToken.IsCancellationRequested == false)
                {
                    if (channel != null && channel.State == AMSChannelState.Running)
                    {
                        LockHelper.ExtendLockTime(eventData);

                        InnerCreateProgram(eventData, channel, ec, cancellationToken);
                    }
                }
            }
            catch (System.Exception ex)
            {
                TraceHelper.AMSTaskTraceSource.TraceEvent(TraceEventType.Error, 60020, ex.ToString());
            }
        }
示例#11
0
        private static void InnerStopProgram(AMSEvent eventData, AMSEventChannel ec, CancellationToken cancellationToken)
        {
            TraceHelper.AMSTaskTraceSource.TraceEvent(TraceEventType.Verbose, 60018, "Stop Program:\n{0}", eventData.ToTraceInfo());

            AMSChannel channel = AMSChannelSqlAdapter.Instance.LoadByID(ec.ChannelID);

            if (channel != null)
                SimulateOrExecuteAction(() => LiveChannelManager.StopProgram(channel, eventData, ec), () => ec.State = AMSEventState.Completed);
            else
                ec.State = AMSEventState.Completed;

            AMSEventSqlAdapter.Instance.UpdateEventChannel(ec);

            TraceHelper.AMSTaskTraceSource.TraceEvent(TraceEventType.Verbose, 60018, "Program Stopped:\n{0}", eventData.ToTraceInfo());
        }
示例#12
0
        private static void InnerStartProgram(AMSEvent eventData, AMSChannel channel, AMSEventChannel ec, CancellationToken cancellationToken)
        {
            TraceHelper.AMSTaskTraceSource.TraceEvent(TraceEventType.Verbose, 60017, "Start Program:\n{0}", channel.ToTraceInfo());

            SimulateOrExecuteAction(() => LiveChannelManager.StartProgram(channel, eventData, ec), () => ec.State = AMSEventState.Running);

            AMSEventSqlAdapter.Instance.UpdateEventChannel(ec);

            TraceHelper.AMSTaskTraceSource.TraceEvent(TraceEventType.Verbose, 60017, "Program Started:\n{0}", channel.ToTraceInfo());
        }