标签:
每次升级,客户端都会获取服务器端存放在upgradefile文件夹下的需要升级的文件和升级信息配置文件(即upgradeconfig.xml文件)
我们来看一下代码
//升级信息配置文件相对应的类 ( 升级信息配置文件是由这个类转化成的)
private UpgradeConfig upgradeConfig = null; //客户端存储升级配置文件的地址 是放在客户端根目录下的 (就是把服务器 upgradefile/upgradeconfig.xml下载到客户端存放的位置) string UPConfigFilePath = AppDomain.CurrentDomain.BaseDirectory + "UpgradeConfig.xml"; //启动升级程序 private void AppUpdate() { //UpgradeConfig 这个类存储返回的信息 也就是说服务器端返回来的是 UpgradeConfig类型的信息 //Test 是个文本类型的信息 是客户端发给服务器的 //其实在这里 "Test"这个值传递到服务器端后,服务器并没有使用,但是按照networkcomms的用法,又好像必须发送个信息,所以随便写个字符就行 //<string,UpgradeConfig>这里 string 代表发送到服务器的信息是string类型的
//发送一个逻辑类型是"GetUpMsg"的string类型的,具体内容为Test的信息给服务器,服务器收到"GetUpMsg"逻辑类型,会根据逻辑类型找到相应的处理方法,并返回一个UpgradeConfig类型的信息给客户端
//upgradeConfig获取的就是从服务器端返回来的消息,通讯框架帮我们接收到了返回的消息,隐藏了具体过程,我们使用起来就像调用本地方法一样 UpgradeConfig upgradeConifg = newTcpConnection.SendReceiveObject<string, UpgradeConfig>("GetUpMsg", "ResUpMsg", 5000, "Test"); //如果服务器返回的版本号大于本机的版本号
//GetUpgradeVersion()方法用于获取本地配置文件中的版本号
if (upgradeConifg.AppVersion > GetUpgradeVersion()) { //从配置文件中获取升级文件的名称,我们升级时,一般关闭当前程序,另外启动一个程序进行升级 string upgradeAppPath = System.Configuration.ConfigurationManager.AppSettings["UpgradeApp"]; string callBack = AppDomain.CurrentDomain.BaseDirectory + upgradeAppPath; if (File.Exists(callBack)) { //可以进行内网外网环境判断 //如果内网 此处假设为内网 if (true) { //启动升级程序 System.Diagnostics.Process process = System.Diagnostics.Process.Start(callBack); } //如果外网 加一个启动参数 else { System.Diagnostics.Process process = System.Diagnostics.Process.Start(callBack, "s"); } } else { MessageBox.Show("目标程序不存在" + callBack); } this.Close(); this.Dispose(); } }
我们看一下服务器端相应的处理
1:客户端定义了"GetUpMsg"逻辑类型,在服务器端要设定一下
可以在构造函数中添加
//返回更新文件信息<5> NetworkComms.AppendGlobalIncomingPacketHandler<string>("GetUpMsg", IncomingReqUpMsg);
这样的话,服务器端收到信息后,首先找出其逻辑类型,这里是 GetUpMsg,再根据逻辑类型,找到处理方法,这里是IncomingReqUpMsg
private UpgradeConfig upgradeConfig = null;
private string UPConfigFilePath = AppDomain.CurrentDomain.BaseDirectory + "UpgradeFile\\UpgradeConfig.xml";
//处理方法中参数为3个,只是统一的格式
// PacketHeader 消息头,Connnection 客户端相对应的连接,处理的消息的类型 这里是string private void IncomingReqUpMsg(PacketHeader header, Connection connection, string msg) { try {
//如果配置文件不存在,创建一个空的 if (!File.Exists(UPConfigFilePath)) { upgradeConfig = new UpgradeConfig(); upgradeConfig.Save(UPConfigFilePath); } else {
//存在,则加载配置文件到upgradeConfig类中 upgradeConfig = UpgradeConfig.LoadConfig(UPConfigFilePath); } //把服务器端的升级配置文件发给客户端 返回的消息类型是UpgradeConfig 类型需要与客户端中设定的返回类型一致 客户端收到后比较版本号 connection.SendObject("ResUpMsg", upgradeConfig); } catch (Exception ex) { LogTools.LogException(ex, "IncomingReqUpMsg"); } }
客户端收到UpgradeConfig类后,进行判断,如果需要升级,启动升级程序,然后升级程序会请求下载文件
www.networkcomms.cn
www.cnblogs.com/networkcomms 编辑
相关文章:
基于TCP网络通信的自动升级程序源码分析-客户端请求服务器上的升级信息
标签:
原文地址:http://www.cnblogs.com/networkcomms/p/4261493.html