public override void RunDeploy(DeployConfiState configState) { ZCProduct zc = base.BelongProduct as ZCProduct; zc.DeployConfigCheck = configState; if (zc.InProcess == false) { LogManager.InfoLog.LogProcInfo("VOBCDevice", "RunDeploy", "开始ZC产品:" + zc.ProductID + "部署过程"); BelongProduct.Report.ReportWindow("开始ZC产品:" + zc.ProductID + "部署过程"); //重置类型文件添加状态 zc.AddState.Reset(); zc.Bfis.Clear(); zc.Uis.Clear(); CDeviceDataFactory.Instance.ZcContainer.dataModify.Color(); zc.InProcess = true; } DeployExec(); if (zc.IsReadyUpdate()) { zc.FileUpdate(); } }
/// <summary> /// 重写函数“获取待发送文件列表并校验文件是否存在” /// </summary> /// <param name="vobc">VOBC产品对象类</param> /// <returns>执行结果 成功or失败</returns> public override bool GetFileListAndCheckExist(VOBCProduct vobc) { //处理结果 bool dealResult = true; //文件路径键值信息 Dictionary <string, string> filePathList = new Dictionary <string, string>(); //待烧录文件类型列表 List <vobcFileType> fileTypeList = new List <vobcFileType>(); //获取烧录文件配置 DeployConfiState configState = vobc.DeployConfigCheck; //检查引导文件勾选状态 if (configState.IsBootLoaderCheck) { filePathList.Add(m_mmiBootRomPath.Key, m_mmiBootRomPath.Value); fileTypeList.Add(vobcFileType.BootLoader); } //检查内核文件勾选状态 if (configState.IsCoreCheck) { filePathList.Add(m_mmiCorePath.Key, m_mmiCorePath.Value); fileTypeList.Add(vobcFileType.CORE); } //检查配置文件勾选状态 if (configState.IsNvRamCheck) { filePathList.Add(m_mmiConfigPath.Key, m_mmiConfigPath.Value); fileTypeList.Add(vobcFileType.NVRAM); } //有文件需要发送 if (filePathList.Count > 0) { //文件是否全部真实存在 若有任何一个不存在 该子子系统将不进行烧录 bool isFileAllExist = true; foreach (string filePath in filePathList.Keys) { //文件存在 if (System.IO.File.Exists(filePath)) { //文件存在 不执行操作 } //文件不存在 else { //不是所有文件都存在 isFileAllExist = false; //处理失败 dealResult = false; //启用跳过标志 将不执行该子子系统的部署 vobc.SkipFlag = true; //不在执行过程中 //vobc.InProcess = false; Modified @ 10.16 //日志信息 string logMsg = "VOBC" + vobc.ProductID + " 子子系统设备:" + DeviceType + "的待发送文件不存在,文件地址应为:" + filePath; //记录日志 LogManager.InfoLog.LogCommunicationInfo("VOBCMMIDevice", "GetFileListAndCheckExist", logMsg); //界面信息打印 vobc.Report.ReportWindow(logMsg); } } //如果文件都存在 数据添加到集合队列中 if (isFileAllExist) { ///构造VOBC产品MMI设备的checkfile m_vobcCheckFile.vobcSystemType = vobcSystemType.MMI; m_vobcCheckFile.vobcFilePathList = filePathList; m_vobcCheckFile.vobcFileTypeList = fileTypeList; vobc.CheckFileList.Add(m_vobcCheckFile); } else { //无操作 } } //没有文件需要发送 else { //处理失败 dealResult = false; //启用跳过标志 将不执行该子子系统的部署 vobc.SkipFlag = true; //日志信息 string logMsg = "VOBC" + vobc.ProductID + " 子子系统设备:" + DeviceType + "没有文件需要发送,部署停止,请检查选择并重新开始部署!"; //记录日志 LogManager.InfoLog.LogCommunicationInfo("VOBCMMIDevice", "GetFileListAndCheckExist", logMsg); //界面信息打印 vobc.Report.ReportWindow(logMsg); } return(dealResult); }
/// <summary> /// VOBC产品子子系统设备执行部署实现方法 /// </summary> /// <param name="configState">预检状态信息</param> public override void RunDeploy(DeployConfiState configState) { //获取当前正在处理的vobc产品类对象 VOBCProduct vobc = base.BelongProduct as VOBCProduct; //当前为VOBC产品第一个烧录设备 执行产品烧录前的准备过程 if (vobc.InProcess == false && vobc.SkipFlag == false) { ///清空烧录过程状态 vobc.ResetDeviceProcState(); //通知界面刷新 CDeviceDataFactory.Instance.VobcContainer.dataModify.Modify(); //预检状态信息赋值 vobc.DeployConfigCheck = configState; vobc.recvCheckCount = 0; //开始部署前清空更新成功文件计数 UpdateSuccessFileCount = 0; #region 给予更新状态实例赋初始值--依据用户在界面中勾选的烧录文件类型 vobc._updateFileState = new VOBCUpdateFileState(); vobc._updateFileState.AtoBootCompleteFlag = configState.IsBootLoaderCheck; vobc._updateFileState.AtpBootCompleteFlag = configState.IsBootLoaderCheck; vobc._updateFileState.ComBootCompleteFlag = configState.IsBootLoaderCheck; vobc._updateFileState.MmiBootCompleteFlag = configState.IsBootLoaderCheck; vobc._updateFileState.CcovBootCompleteFlag = configState.IsBootLoaderCheck; vobc._updateFileState.AtoCoreCompleteFlag = configState.IsCoreCheck; vobc._updateFileState.AtpCoreCompleteFlag = configState.IsCoreCheck; vobc._updateFileState.ComCoreCompleteFlag = configState.IsCoreCheck; vobc._updateFileState.MmiCoreCompleteFlag = configState.IsCoreCheck; vobc._updateFileState.CcovCoreCompleteFlag = configState.IsCoreCheck; vobc._updateFileState.AtoDataCompleteFlag = configState.IsDataCheck; vobc._updateFileState.AtpDataCompleteFlag = configState.IsDataCheck; vobc._updateFileState.CcovDataCompleteFlag = configState.IsDataCheck; vobc._updateFileState.AtoNvramCompleteFlag = configState.IsNvRamCheck; vobc._updateFileState.AtpNvramCompleteFlag = configState.IsNvRamCheck; vobc._updateFileState.MmiNvramCompleteFlag = configState.IsNvRamCheck; vobc._updateFileState.CcovConfigCompleteFlag = configState.IsIniCheck; #endregion //获取对端状态 VOBCProduct oppovobc = CDeviceDataFactory.Instance.GetOppositeProductByIDEnd(vobc.ProductID); //设备预检 string preCheckResult = PreCheck(vobc.VobcStateInfo, oppovobc.VobcStateInfo); //预检结论等于空即预检成功 不等于空 预检失败 if (preCheckResult != String.Empty) { //设置VOBC产品下的子子系统预检状态 foreach (IDevice device in vobc.CBelongsDevice) { device.PreCheckResult = false; device.PreCheckFailReason = preCheckResult; } //刷新界面 CDeviceDataFactory.Instance.VobcContainer.dataModify.Modify(); //记录警告日志 LogManager.InfoLog.LogProcWarning("VOBCDevice", "RunDeploy", "VOBC产品:" + base.BelongProduct.ProductID + "预检失败,原因" + preCheckResult); LogManager.InfoLog.LogProcWarning("VOBCDevice", "RunDeploy", "VOBC产品:" + base.BelongProduct.ProductID + "部署未执行,部署进程结束"); vobc.SkipFlag = true; vobc.InProcess = false; vobc.Report.ReportWindow("VOBC" + vobc.ProductID + "更新失败!请检查是否满足预检通过条件并重新开始部署"); ///通知刷新背景色 CDeviceDataFactory.Instance.VobcContainer.dataModify.Color(); } else { //设置VOBC产品下的子子系统预检状态 foreach (IDevice device in vobc.CBelongsDevice) { device.PreCheckResult = true; device.PreCheckFailReason = preCheckResult; } //记录日志 LogManager.InfoLog.LogProcInfo("VOBCDevice", "RunDeploy", "开始VOBC产品:" + base.BelongProduct.ProductID + "部署过程"); //设置跳过标志为false 后续代码根据此标志 执行具体部署 vobc.SkipFlag = false; //生成配置文件 BelongProduct.GenConfig(); //当前处于部署阶段 vobc.InProcess = true; } ////用完清空VobcStateInfo(有误) //vobc.VobcStateInfo = null; //oppovobc.VobcStateInfo = null; } //如果跳过标志为假且当前处在部署第一阶段,执行部署 if ((!vobc.SkipFlag) && (vobc.StepOne)) { vobc.InProcess = true; CDeviceDataFactory.Instance.VobcContainer.dataModify.Color(); //执行部署 DeployExec(); //若执行部署过程中 跳出标志被置为true if (vobc.SkipFlag == true) { ///当前处于部署之中 if (vobc.InProcess == true) { //刷新界面日志信息 vobc.Report.ReportWindow("VOBC" + vobc.ProductID + "更新失败:执行过程中出现失败环节,请重新开始部署"); vobc.InProcess = false; } ///通知刷新背景色 CDeviceDataFactory.Instance.VobcContainer.dataModify.Color(); } } //当前处于第一阶段但是跳过标志为true,则更新失败 else if (vobc.StepOne) { LogManager.InfoLog.LogProcInfo("VOBCDevice", "RunDeploy", base.BelongProduct.ProductID + "部署过程失败:生成配置文件前的相关环节失败或未收到允许上传的回复"); //vobc.Report.ReportWindow("更新失败!(生成配置文件前的相关环节失败或未收到允许上传的回复)"); //刷新界面 CDeviceDataFactory.Instance.VobcContainer.dataModify.Modify(); CDeviceDataFactory.Instance.VobcContainer.dataModify.Color(); } //当前处于第二阶段,任何在第二阶段运行至此处的设备不予理会,第一阶段结束后则证明更新标志为已下发 else { } }
/// <summary> /// 重写函数“获取待发送文件列表并校验文件是否存在” /// </summary> /// <param name="vobc">VOBC产品对象类</param> /// <returns>执行结果 成功or失败</returns> public override bool GetFileListAndCheckExist(VOBCProduct vobc) { //处理结果 bool dealResult = true; //if (base.BelongProduct.ProductID.Contains("TC1")) //{ // try // { // //CCOV统一使用一个配置文件config.ini,将红/蓝网关IP信息和WGB设备厂商信息写在一起 // File.Copy(System.Windows.Forms.Application.StartupPath + CShareLib.VOBC_GEN_FILEPATH + "\\Red\\config.ini", m_ccovIniPath.Key, true); // } // catch // { // MessageBox.Show("请检查CCOV配置文件路径"); // } //} //else if (base.BelongProduct.ProductID.Contains("TC2")) //{ // try // { // //CCOV统一使用一个配置文件config.ini,将红/蓝网关IP信息和WGB设备厂商信息写在一起 // File.Copy(System.Windows.Forms.Application.StartupPath + CShareLib.VOBC_GEN_FILEPATH + "\\Blue\\config.ini", m_ccovIniPath.Key, true); // } // catch // { // MessageBox.Show("请检查CCOV配置文件路径"); // } //} //else //{ // LogManager.InfoLog.LogCommunicationError("MainWindow", "ProductReport", "非法列车!"); //} //文件路径键值信息 Dictionary <string, string> filePathList = new Dictionary <string, string>(); //待烧录文件类型列表 List <vobcFileType> fileTypeList = new List <vobcFileType>(); //获取烧录文件配置 DeployConfiState configState = vobc.DeployConfigCheck; //检查引导文件勾选状态 if (configState.IsBootLoaderCheck) { filePathList.Add(m_ccovBootRomPath.Key, m_ccovBootRomPath.Value); fileTypeList.Add(vobcFileType.BootLoader); } //检查内核文件勾选状态 if (configState.IsCoreCheck) { filePathList.Add(m_ccovCorePath.Key, m_ccovCorePath.Value); fileTypeList.Add(vobcFileType.CORE); } //检查数据文件勾选状态 if (configState.IsDataCheck) { filePathList.Add(m_ccovDataPath.Key, m_ccovDataPath.Value); fileTypeList.Add(vobcFileType.DATA); } //检查ini配置文件勾选状态 if (configState.IsIniCheck) { filePathList.Add(m_ccovIniPath.Key, m_ccovIniPath.Value); fileTypeList.Add(vobcFileType.CCOVConfig); } //有文件需要发送 if (filePathList.Count > 0) { //文件是否全部真实存在 若有任何一个不存在 该子子系统将不进行烧录 bool isFileAllExist = true; foreach (string filePath in filePathList.Keys) { //文件存在 if (System.IO.File.Exists(filePath)) { //文件存在 不执行操作 } //文件不存在 else { //不是所有文件都存在 isFileAllExist = false; //处理失败 dealResult = false; //启用跳过标志 将不执行该子子系统的部署 vobc.SkipFlag = true; //不在执行过程中 //vobc.InProcess = false; Modified @ 10.16 //日志信息 string logMsg = "VOBC" + vobc.ProductID + " 子子系统设备:" + DeviceType + "的待发送文件不存在,文件地址应为:" + filePath; //记录日志 LogManager.InfoLog.LogCommunicationInfo("VOBCCCOVDevice", "GetFileListAndCheckExist", logMsg); //界面信息打印 vobc.Report.ReportWindow(logMsg); ///通知刷新背景色 CDeviceDataFactory.Instance.VobcContainer.dataModify.Color(); } } //如果文件都存在 数据添加到集合队列中 if (isFileAllExist) { ///构造VOBC产品CCOV设备的checkfile m_vobcCheckFile.vobcSystemType = vobcSystemType.CCOV; m_vobcCheckFile.vobcFilePathList = filePathList; m_vobcCheckFile.vobcFileTypeList = fileTypeList; vobc.CheckFileList.Add(m_vobcCheckFile); } else { //无操作 } } //没有文件需要发送 else { //处理失败 dealResult = false; //启用跳过标志 将不执行该子子系统的部署 vobc.SkipFlag = true; //日志信息 string logMsg = "VOBC" + vobc.ProductID + " 子子系统设备:" + DeviceType + "没有文件需要发送,部署停止,请检查选择并重新开始部署!"; //记录日志 LogManager.InfoLog.LogCommunicationInfo("VOBCCCOVDevice", "GetFileListAndCheckExist", logMsg); //界面信息打印 vobc.Report.ReportWindow(logMsg); } return(dealResult); }
/// <summary> /// 设备类型执行烧录操作抽象接口 /// </summary> /// <param name="configState">部署文件配置状态参数</param> public abstract void RunDeploy(DeployConfiState configState);