基于TCP网络通信的自动升级程序源码分析-客户端请求服务器上的升级信息

每次升级,客户端都会获取服务器端存放在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网络通信的自动升级程序c#源码

[源码下载]Demo2.模拟简单登陆-效果图 基于networkcomms2.3.1

[源码下载]Demo1 客户端从服务器获取信息(基于networkcomms2.3.1)

相关文章:

基于TCP网络通信的自动升级程序源码分析--生成升级文件相关的配置文件

基于TCP网络通信的自动升级程序源码分析-客户端连接服务器

基于TCP网络通信的自动升级程序源码分析-客户端请求服务器上的升级信息

基于TCP网络通信的自动升级程序源码分析-启动升级文件下载程序

基于TCP网络通信的自动升级程序源码分析-服务器发送文件

基于TCP网络通信的自动升级程序源码分析-客户端接收文件

时间: 2024-12-23 09:09:17

基于TCP网络通信的自动升级程序源码分析-客户端请求服务器上的升级信息的相关文章

基于TCP网络通信的自动升级程序源码分析-客户端接收文件

升级程序客户端接收文件 /// <summary> /// 文件数据缓存 索引是 ConnectionInfo对象 数据包的顺序号 值是数据 /// </summary> Dictionary<ConnectionInfo, Dictionary<long, byte[]>> incomingDataCache = new Dictionary<ConnectionInfo, Dictionary<long, byte[]>>();

基于TCP网络通信的自动升级程序源码分析-客户端连接服务器

服务器开始监听 //从配置文件获取要监听的IP和端口 string strIP = System.Configuration.ConfigurationManager.AppSettings["IPAddress"]; int port = int.Parse(System.Configuration.ConfigurationManager.AppSettings["Port"]); //开始监听 Connection.StartListening(Connect

基于TCP网络通信的自动升级程序源码分析-启动升级文件下载程序

升级程序启动后,首先会连接服务器 private void Connect() { try { int port = int.Parse(System.Configuration.ConfigurationManager.AppSettings["Port"]); connnectionInfo = new ConnectionInfo(IPAddress, port); connection = TCPConnection.GetConnection(connnectionInfo)

基于TCP网络通信的自动升级程序源码分析--生成升级文件相关的配置文件

先从服务器端生成的配置文件说起吧 配置文件名称upgradeconfig.xml 文件内容大致如下 <?xml version="1.0" encoding="utf-8"?> <UpgradeConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">

【开源下载】基于TCP网络通信的自动升级程序c#源码

本程序使用开源的来自英国的networkcomms2.3.1网络通讯框架(c#语言编写) [http://www.networkcomms.net] 使用networkcomms框架作为工作中的主要编程框架1年多的时间了,networkcomms的有优美.稳定深深打动了我,基于此框架开发了不少程序,特别的稳定. networkcomms框架由英国剑桥的2位工程师开发,支持.net2.0以上平台,原生态的支持xamarion.android(安卓),xamarin.ios,以及蓝牙等多平台开发.

基于RTL819X实现的Router/AP的源码分析[一]

*************************************************************************************************************************** 作者:EasyWave                                                                               时间:2015.01.11 类别:路由器类-基于RTL819X实现的Ro

传奇源码分析-客户端(游戏逻辑处理源分析三)

6. 接收怪物,商人,其它玩家的消息:ProcessUserHuman:(其它玩家-服务器处理)CPlayerObject->SearchViewRange();CPlayerObject->Operate();遍历UserInfoList列表,依次调用每个UserInfo的Operate来处理命令队列中的所有操作; pUserInfo->Operate()调用m_pxPlayerObject->Operate()调用.根据分发消息(RM_TURN)向客户端发送SM_TURN消息.

传奇源码分析-客户端(游戏逻辑处理源分析四)

现在假设玩家开始操作游戏:传奇的客户端源代码工程WindHorn一.CWHApp派生CWHWindow和CWHDXGraphicWindow.二.CWHDefProcess派生出CloginProcess.CcharacterProcess.CgameProcess客户端WinMain调用CWHDXGraphicWindow g_xMainWnd;创建一个窗口.客户端CWHDXGraphicWindow在自己的Create函数中调用了CWHWindow的Create来创建窗口,然后再调用自己的C

传奇源码分析-客户端(游戏逻辑处理源分析五 服务器端响应)

器执行流程:(玩家走动) GameSrv服务器ProcessUserHuman线程处理玩家消息:遍历UserInfoList列表,依次调用每个UserInfo的Operate来处理命令队列中的所有操作; pUserInfo->Operate()调用m_pxPlayerObject->Operate()调用.判断玩家if (!m_fIsDead),如果已死,则发送_MSG_FAIL消息.我们在前面看到过,该消息是被优先处理的.否则则调用WalkTo,并发送_MSG_GOOD消息给客户端.Walk