📄 clsxuqiuchaxunkongzhi.cs
字号:
//===========================================================================
// Smarclient FPMS Demo Project a sample project for SmartClient technology.
// Smarclient FPMS Demo is designed and implemented bases Microsoft Application Block tech.
// Author: SFPMS Team, Date 2004-11
// Vision 1.0
// Revison History
//=============================================================================
using System;
using System.Configuration;
using System.Data;
using System.Diagnostics;
using System.Windows.Forms;
using System.Threading;
using System.Timers;
using System.IO;
using System.Xml;
using Microsoft.ApplicationBlocks.ApplicationUpdater;
using Microsoft.ApplicationBlocks.SmartClient.Offline;
using JSW.Tool;
using JSW.FPMS.Tool;
using JSW.FPMS.Xiang.ShiTu;
using JSW.FPMS.Xiang.YeWu;
using JSW.FPMS.Xiang.ShuJu;
using JSW.FPMS.Xiang.ShiJian;
namespace JSW.FPMS.Xiang.KongZhi
{
/// <summary>
/// clsXuQiuChaXunKongZhi 需求查询控制器,响应界面业务请求,处理反馈消息,管理应用程序状态等
/// MVC结构中的Controler角色
/// </summary>
public class clsXuQiuChaXunKongZhi
{
#region 成员变量区域
//界面
private XuQiuChaXunForm jieMian = null;
//MOAB引用
private OfflineBlockBuilder lixianKongZhi = null;
//业务代表引用
private clsYeWuDaiBiao yewuDaiBiao = null;
//数据管理
private clsShuJuGuanLi shujuGuanLi = null;
//网络状态
private Microsoft.ApplicationBlocks.SmartClient.Offline.ConnectionState wangluoZhuangTai;
//MUAB引用
private ApplicationUpdateManager gengXinKongZhi = null;
//组件更新线程
private Thread gengXinXC = null;
//组件更新是否开始
private bool shifouGengXin = false;
private delegate void MarshalEventDelegate( object sender, UpdaterActionEventArgs e );
//是否连接
private bool shifouLianJie = false;
#endregion
#region 私有方法区域
#region 事件响应方法区域
/// <summary>
/// 连接状态变化处理函数
/// </summary>
private void ConnectionManagerConnectionStateChangedEvent(object sender,
ConnectionStateChangedEventArgs args)
{
clsRiZhiChuLi.JiLuRiZhi("..........."+ args.CurrentState.ToString());
wangluoZhuangTai = args.CurrentState;
if(Microsoft.ApplicationBlocks.SmartClient.Offline.ConnectionState.OnLine == wangluoZhuangTai)//已经上线
{
shifouLianJie = true;
//开始组件更新
this.KaiShiZuJianGengXin();
}
else//没有上线
{
shifouLianJie = false;
//停止组件更新
this.TingZhiZuJianGengXin();
}
//设置界面状态条情况
this.jieMian.LianJieZhuangTai(this.shifouLianJie);
//设置界面数据更新时钟运行
this.jieMian.SheZhiTimer(this.shifouLianJie);
}
/// <summary>
/// 错误处理函数
/// </summary>
private void FailSafeServiceAgentErrorEvent(object sender, MethodExecutionFailureReportEventArgs args)
{
String cuowuXinXi = "";
//错误处理
if(args.Payload.FailureReason.GetType() == typeof(System.Web.Services.Protocols.SoapException))
{
System.Text.RegularExpressions.MatchCollection mc = System.Text.RegularExpressions.Regex.Matches(
args.Payload.FailureReason.Message,
"---> ([^:]+):");
if (mc.Count >= 1 && mc[0].Groups[1].Value == "System.Data.DBConcurrencyException")
{
cuowuXinXi += "数据同步错误";
}
}
cuowuXinXi += args.Payload.FailureReason.Message;
clsRiZhiChuLi.JiLuRiZhi(cuowuXinXi);
//根据情况,重新发送请求
}
/// <summary>
/// 业务代表错误事件响应函数
/// </summary>
/// <param name="sender"></param>
/// <param name="args"></param>
private void YeWuDaiBiaoReportErrorEvent(object sender, ReportErrorEventArgs args)
{
clsRiZhiChuLi.JiLuRiZhi(args.FailureReason);
}
/// <summary>
/// 需求提交返回处理函数
/// </summary>
/// <param name="sender"></param>
/// <param name="args"></param>
private void XuQiuTiJiaoFanHui(object sender, XuQiuTiJiaoFanHuiShiJianArgs args)
{
clsRiZhiChuLi.JiLuRiZhi("需求提交返回......");
}
/// <summary>
/// 需求查询返回处理函数
/// </summary>
/// <param name="sender"></param>
/// <param name="args"></param>
private void XuQiuChaXunFanHui(object sender, XuQiuChaXunFanHuiShiJianArgs args)
{
shujuGuanLi.ShuJuGengXin(clsChangLiang.SHUJU_XUQIU);
//如果需求数据变化了,更新页面
if(shujuGuanLi.XuQiuBianHua())
{
this.jieMian.GengXinXuQiu(shujuGuanLi.HuoDeShuJu(clsChangLiang.SHUJU_XUQIU));
}
clsRiZhiChuLi.JiLuRiZhi("需求更新数据返回。。。。。。");
}
/// <summary>
/// 获得基本数据返回处理函数
/// </summary>
/// <param name="sender"></param>
/// <param name="args"></param>
private void HuoDeJiBenShuJuFanHui(object sender, HuoDeJiBenShuJuFanHuiShiJianArgs args)
{
shujuGuanLi.ShuJuGengXin(clsChangLiang.SHUJU_JIBENSHUJU);
}
/// <summary>
/// 获得配置文件返回处理函数
/// </summary>
/// <param name="sender"></param>
/// <param name="args"></param>
private void HuoDePeiZhiFanHui(object sender, HuoDePeiZhiXinXiFanHuiShiJianArgs args)
{
shujuGuanLi.ShuJuGengXin(clsChangLiang.SHUJU_PEIZHIXINXI);
}
/// <summary>
///程序组件更新下载开始,使用异步调用方法,更新界面
/// </summary>
private void ChengXuXiaZaiKaiShi( object sender, UpdaterActionEventArgs e )
{
this.jieMian.Invoke(
new MarshalEventDelegate(this.jieMian.XiaZaiKaiShi),
new object[] { sender, e } );
}
/// <summary>
///程序组件文件可以运行,下载完成,并且经过检验后。
/// </summary>
private void ChengXuWenJianKeYiYunXing( object sender, UpdaterActionEventArgs e )
{
if(this.jieMian.YunXinChengXu(e))
{
YunXingXinChengXu(e.ServerInformation);
}
}
/// <summary>
///程序组件可以下载,如果存在新的版本,获得该版本
///2004-11-22 为了提高演示性能,根据设置来弹出发现新版本的对话框
/// </summary>
private void ChengXuZuJianKeYiXiaZai( object sender, UpdaterActionEventArgs e )
{
if(!this.shifouLianJie) {
//停止组件更新
this.TingZhiZuJianGengXin();
return;
}
//当发现新的版本的时候,如果设置为不提示,应用不弹出提示
if(ConfigurationSettings.AppSettings[clsChangLiang.TISHIXINBANBEN].Equals(clsChangLiang.TISHI_XINBANBEN))
{
//提示是否下载新的程序
string message = String.Format(
"发现新的乡级系统(版本:{0}),是否更新现有的乡级系统(版本:{1})?",
e.ServerInformation.AvailableVersion,
ConfigurationSettings.AppSettings["version"] ) ;
//提示是否更新组件,如果不更新,停止MUAB
DialogResult dialog = MessageBox.Show(this.jieMian, message,
"组件更新提示", MessageBoxButtons.YesNo,MessageBoxIcon.Question);
if( DialogResult.No == dialog )
{
//停止组件更新
this.TingZhiZuJianGengXin();
}
}
else
{
//停止组件更新
this.TingZhiZuJianGengXin();
}
}
/// <summary>
///程序组件下载完成
/// </summary>
private void ChengXuXiaZaiWanCheng( object sender, UpdaterActionEventArgs e )
{
this.jieMian.Invoke(
new MarshalEventDelegate(this.jieMian.XiaZaiJieShu),
new object[] { sender, e } );
}
/// <summary>
/// 文件检验失败
/// </summary>
private void gengXinKongZhi_FilesValidationFailed( object sender, UpdaterActionEventArgs e )
{
MessageBox.Show(this.jieMian,e.ServerInformation.ManifestSignature);
}
#endregion
/// <summary>
/// 运行新版本的应用程序
/// </summary>
/// <param name="server"></param>
private void YunXingXinChengXu( ServerApplicationInfo server )
{
XmlDocument doc = new XmlDocument();
doc.Load( AppDomain.CurrentDomain.SetupInformation.ConfigurationFile );
string baseDir = doc.SelectSingleNode("configuration/appUpdater/UpdaterConfiguration/application/client/baseDir").InnerText;
string newDir = Path.Combine( baseDir, "AppStart.exe" );
ProcessStartInfo process = new ProcessStartInfo( newDir );
process.WorkingDirectory = Path.Combine( newDir , server.AvailableVersion );
Process.Start( process );
this.XiaoHui();
Environment.Exit( 0 );
}
/// <summary>
/// 停止数据更新线程
/// </summary>
private void TingZhiShuJuGengXin()
{
//MOAB销毁
lixianKongZhi.Dispose();
}
/// <summary>
/// 开始组件更新
/// </summary>
private void KaiShiZuJianGengXin()
{
if(!shifouGengXin)
{
//获得MUAB实例
this.gengXinKongZhi = new ApplicationUpdateManager();
//注册应用程序组件更新事件
gengXinKongZhi.DownloadStarted +=new UpdaterActionEventHandler(ChengXuXiaZaiKaiShi );
gengXinKongZhi.FilesValidated +=new UpdaterActionEventHandler(ChengXuWenJianKeYiYunXing );
gengXinKongZhi.UpdateAvailable +=new UpdaterActionEventHandler(ChengXuZuJianKeYiXiaZai );
gengXinKongZhi.DownloadCompleted +=new UpdaterActionEventHandler(ChengXuXiaZaiWanCheng);
gengXinKongZhi.FilesValidationFailed += new UpdaterActionEventHandler(gengXinKongZhi_FilesValidationFailed);
//MUAB启动
this.gengXinXC = new Thread(new ThreadStart(this.gengXinKongZhi.StartUpdater) );
this.gengXinXC.Name="应用程序更新线程";
gengXinXC.Start();
//修改标识
shifouGengXin = true;
}
}
/// <summary>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -