/// <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()); } }
/// <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); }
public int UpdateEventChannel(AMSEventChannel ec) { ec.NullCheck("ec"); string sql = ORMapping.GetUpdateSql(ec, TSqlBuilder.Instance); return(DbHelper.RunSql(sql, this.GetConnectionName())); }
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()); }
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()); }
/// <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()); } }
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()); }
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); } } }
/// <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()); } }
/// <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()); } }
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()); }
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()); }