/************************************************************************************************************************/ internal void Init(IDbConnection conn) { // if (XConfig.DB == DbEnum.None) { if (XConfig.MySQL.Equals(conn.GetType().FullName, StringComparison.OrdinalIgnoreCase)) { XConfig.DB = DbEnum.MySQL; } else { throw new Exception("MyDAL 目前只支持 【MySQL】,后续将会支持【Oracle/SQLServer/PostgreSQL/DB2/Access/SQLite/Teradata/MariaDB】."); } } // Conn = conn; Parameters = new List <DicParam>(); AH = new AttributeHelper(this); VH = new CsValueHelper(this); GH = new GenericHelper(this); EH = new XExpression(this); CFH = new CsFuncHelper(); TSH = new ToStringHelper(); XC = new XCache(this); PH = new ParameterHelper(this); DPH = new DicParamHelper(this); BDH = new BatchDataHelper(); DS = new DataSource(this); AR = new AutoRetry(); // if (XConfig.DB == DbEnum.MySQL) { SqlProvider = new MySqlProvider(this); } }
public override async ValueTask<int> StartTaskAsync(TaskFullInfo task, ChannelInfo channel) { var backinfo = await msvClient.QueryTaskInfoAsync(channel.ChannelIndex, channel.Ip, Logger); if (backinfo != null) { if (backinfo.ulID > 0)//存在执行任务 { if (backinfo.ulID == task.TaskContent.TaskId) { return task.TaskContent.TaskId; } else if (backinfo.ulID < task.TaskContent.TaskId) { Logger.Info($"start msv in stop else {backinfo.ulID}"); await ForceStopTaskAsync(task, channel); } if (task.TaskSource == TaskSource.emStreamMediaUploadTask) { return 0; } //前一个任务是手动任务,特别处理无缝任务 bIsStopLastTask } switch (task.TaskSource) { case TaskSource.emMSVUploadTask: { if (!await restClient.SwitchMatrixSignalChannelAsync(task.TaskContent.SignalId, channel.ChannelId)) { Logger.Error($"Switchsignalchannel error {task.TaskContent.SignalId} {channel.ChannelId}"); } } break; case TaskSource.emRtmpSwitchTask: { if (!await restClient.SwitchMatrixChannelRtmpAsync(channel.ChannelId, task.ContentMeta.SignalRtmpUrl)) { Logger.Error($"Switchsignalchannel error {task.TaskContent.SignalId} {channel.ChannelId}"); } } break; case TaskSource.emVTRUploadTask: break; case TaskSource.emXDCAMUploadTask: break; case TaskSource.emIPTSUploadTask: break; case TaskSource.emStreamMediaUploadTask: break; case TaskSource.emUnknowTask: break; default: break; } string capparam = await GetCaptureParmAsync(task, channel); DateTime dtcurrent; DateTime dtbegin = (task.RetryTimes > 0 && task.NewBeginTime != DateTime.MinValue)?task.NewBeginTime : DateTimeFormat.DateTimeFromString(task.TaskContent.Begin).AddSeconds(-1* taskStartPrevious); while(true) { dtcurrent = DateTime.Now; if (dtcurrent >= dtbegin) { var recordinfo = msvClient.RecordReady(channel.ChannelIndex, channel.Ip, CreateTaskParam(task.TaskContent), "", capparam, Logger); bool backrecord = await msvClient.RecordAsync(recordinfo, channel.ChannelIndex, channel.Ip, Logger); if (backrecord) { var state = await AutoRetry.RunSyncAsync(() => msvClient.QueryDeviceStateAsync(channel.ChannelIndex, channel.Ip, true, Logger), (e) => { if (e == Device_State.WORKING) { return true; } return false; }, 4, 500).ConfigureAwait(true); if (state == Device_State.WORKING) { return task.TaskContent.TaskId; } else Logger.Error($"start task error {task.TaskContent.TaskId}"); } return 0; } else { await Task.Delay(dtbegin - dtcurrent); } } } else Logger.Error($"StartTaskAsync QueryTaskInfoAsync error back 0"); return 0; }