微端游戏启动器launcher的制作之下载篇(系列一)

首先第一篇先讲一讲launcher最核心的功能---下载功能。

这个部分估计得好几篇才能写完,东西比较多也比较杂,慢慢来吧,我的东西也在继续改进中。。。。。。

从web上下载文件需要用到几个类,HttpWebRequest(http请求)、HttpWebResponse(http应答),Stream(文件流),大致流程就是先创建一个请求,然后等待web服务器应答,这时候它会去找这个网址存在不存在,如果不存在就会报错,所以最好是放在try/catch块中防止程序崩掉。然后你就可以创建一个web请求流文件了。注意这里要创建两个流文件,一个是从web上获取应答的,一个是创建一个本地文件用于写入你请求到的数据们~~~然后就等着它获取数据吧。这里一定要注意的是因为是文件操作所以文件打开一次就要关闭一次,一定要关闭一定要关闭一定要关闭重要的事情说三遍,如果你不关闭的话就会出现数据丢失。

具体的就上代码吧,因为我自己也是这样,看人家的博文长篇大论没有代码的话结果就是依旧不会~~~

                HttpWebRequest Myrqt = (HttpWebRequest)HttpWebRequest.Create(URL);
                HttpWebResponse Myrpe = (HttpWebResponse)Myrqt.GetResponse();
                totalBytes = Myrpe.ContentLength;          //从web响应上得到的总字节数,这个是为了做进度条
                Stream st = Myrpe.GetResponseStream();         //从web请求创建流
                Stream so = new FileStream(filePath + "\\" + FileName, FileMode.Create);//创建写文件流

                byte[] by = new byte[1024];
                int osize = st.Read(by, 0, (int)by.Length);
                while (osize > 0)
                {

                    so.Write(by, 0, osize);
                    osize = st.Read(by, 0, (int)by.Length);
                }
                so.Close();
                st.Close();

  现在一个文件的下载功能就做好了,但是我们不可能只下载一个文件,总不可能把所有文件的url都写一遍然后请求下载吧,这样如果web服务器上增加了新文件,整个launcher就得重新改了。。。。。。这就涉及到了我们之前所说的配置文件,配置文件有两个字段是必须要的,一个就是文件的路径,加上了你的web服务器的url就能变成下载地址了,一个是MD5码。

所以我们现在要跳到配置文件的生成上了吗?!好像这样有点乱又好像很有逻辑的样子~

好吧,我们先说说配置文件。

我这里所使用的配置文件是xml文件,当然你也可以用txt啊excel表啊,只是写入方法和读取方法不一样而已,我只讲xml文件,其他大家自己去探索吧。(其实是因为其它我也没用过不知道~~~)

我们需要用到两个namespace,System.Xml和System.IO,好吧只要你有文件操作必然要用到System.IO这个namespace的。现在我们假设你所有的要上传到web服务器的文件全部放在一个文件夹下,什么?不在一个文件夹下?那就放到一起吧,何苦为难你自己。。。。。。我们暂时把这个文件叫做总文件夹。

具体怎么创建我就不写了,主要是在写入的过程中你需要遍历文件夹中的所有文件包含其子文件,这需要用到递归,找到文件之后就创建一个节点,然后把它的FileInfo.DirectoryName作为你的节点的一个字段放入你的xml文件中,然后计算出它的MD5码作为另一个字段也放入这个节点下,然后就能看到效果啦。

<file size="309" MD5="ca9e7a2df6c52c9b48b76fb6e232f651" name="D:\myfile\AssetBundleList.txt"> </file>

但是这样你会发现一个问题,你的路径里面多了一段你的总文件夹的绝对路径,然而我们并不需要,总不会传到web上路径还带个盘目录吧,所以我们需要移除这一段。大家肯定说直接replace成空就好了啊,但是这里还有一个问题,如果你的总文件夹路径是直接写在代码里的话(例如D:\\myfile),在你的xml文件里的路径就会变成D:\myfile,这样你直接移除的话他就会找不到啦,所以你必须先把“\\”替换成@“\”(它是个转意符,要让它变成字符的话就要加@),然后再移除,“//”也一样,要转换成@“\”,不过你也可以试试直接传@“D:\mfile”,我没试过,或许可行?

这里就不上代码了,如果不会的话可以问我,我是不会告诉你们的~哈哈哈,没有啦,如果你是C#程序员,你一定比我清楚,如果你不是,度娘一定比我清楚~但是如果说你是窗体程序,总文件夹的路径是从窗口输入的话就不存在这个问题啦,它会自己识别成“\”的。。。。。。。

下面就是计算MD5码的方式。

 public string CalculateMD5(string fileName)      //计算MD5码,参数为文件名,返回值为MD5码
        {
            try
            {
                FileStream file = new FileStream(filePath + "//" + fileName, FileMode.Open);
                System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
                byte[] retVal = md5.ComputeHash(file);
                file.Close();

                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < retVal.Length; i++)
                {
                    sb.Append(retVal[i].ToString("x2"));
                }
                return sb.ToString();
            }
            catch (Exception ex)
            {
                throw new Exception("GetMD5HashFromFile() fail,error:" + ex.Message);
            }
        }

  好啦,这一篇就到这了,我们下一篇再继续说~~~

转载请注明出处:http://www.cnblogs.com/shellxi/p/5553566.html

时间: 2024-08-13 08:46:47

微端游戏启动器launcher的制作之下载篇(系列一)的相关文章

微端游戏启动器launcher的制作(序篇)

公司要做一个游戏接入腾讯QQ游戏大厅,腾讯要求制作一个launcher,公司之前并没有接入过腾讯,所以大家其实都不懂,而我又是新人,所以刚拿到这个任务的时候整个人就是一个大写的懵逼.在网上查找了不少的资料,但是关于launcher的实在太少了,所以经历了半个多月终于写完launcher的我决定写这个系列的博客,希望能给大家一个参考.我是用C#写的,因为能查到的文档实在太少,所以流程基本都是自己实现的,如果有错希望大家指出. 首先launcher是什么: 我的理解就是一个游戏启动器,微端游戏为了避

微端游戏启动器LAUNCHER的制作之MFC版一(序和进程通信)

额...刚开始信誓旦旦说要写launcher制作的博客,还没写完就被抛到脑后了真是没毅力.最近把之前写的wpf的launcher改成了mfc版,遇到很多问题,写了三个星期才写完,好好记录一下吧.我也想把wpf版的写完,毕竟过了快一年了......我就决定在mfc版中穿插两种方式的对比把我想要写的比较让我头疼的地方写出来吧. 首先说一下改成C++版主要是因为wpf需要的框架支持很多,有的电脑上没有的话就启动不了.mfc也需要很多的库支持,为了避免这个问题我们只能用静态库的方式了,大是大了点但是经过

微端游戏启动器LAUNCHER的制作MFC版之三(界面)

其实刚开始用wpf写launcher的原因也就是因为用mfc写界面非常的麻烦,尤其是对于我这种后端转前端的程序员来说.在写这个launcher之前我连对话框单文档多文档有什么区别都不知道.而现在的界面不像是以前,现在的界面都是各种异形,要求做得非常漂亮的.当然你会说有直接的界面库可以用,但是在网上找了一圈之后发现很多的界面库都是从好几年前就没有再维护了,要么就是商业版的,简而言之要钱.我们老大看我直接硬写界面的时候也跟我说你用界面库啊,然后帮我找了一圈,我还默默的期待了一下能够有什么好的办法,后

Egret之微端Android

一 : 注册微端项目 需要在Egret Launcher中注册一个游戏 , 本文只做基础测试,所以使用的是Egret官方提供的测试地址:http://tool.egret-labs.org/Weiduan/game/index.html 二:设置导出(创建Android工程目录) 三:将生成好的Android项目导入到Android Studio中 四:清理和编辑项目 五:生成APK文件 六:结果 ①,安装的程序注,如果需要更改icon , 则②,运行结果(Very Good) 七:关于接SDK

微端 代码工程 as air 分享

分享 ^_^ 1. 用到 air , as , 2. 微端下载及更新技术 成功上线的棋牌游戏,可以用于传统游戏开发! 地址: http://download.csdn.net/detail/stonechang/7560085 微端 代码工程 as air 分享,布布扣,bubuko.com

2D客户端+微端技术总结

本人于2013年9月23号加入一个页游项目组, 并作为项目组的客户端小组的主程, 带领一个4个人(峰值)的前端小组, 进行微端的开发.微端项目于2014年8月底大体完成, 历时11个月.9月份之后微端项目组一直在做细节上的调整和优化, 处于半打加油状态.根据公司战略调整, 微端项目组于2015年4月中旬开始移植微端到另外一个页游项目组, 经过一个月时间的奋战(此时微端小组原先成员只剩下我和另外一个同事, 后来临时找了一个刚毕业的小伙, 一共3个人), 移植工作基本完成. 我个人也与5月底提交离职

egret微端, 非原生打包相关

http://developer.egret.com/cn/github/egret-docs/Native/native/microclient/index.html 可参见该链接,在安卓studio里面打开 通过上述egret打包的微端,如果想运行自己的游戏,则需要将自己的egret项目进行发布,将发布之后的 文件粘贴到 egret微端 的game文件夹下: 原文地址:https://www.cnblogs.com/RitaLee/p/10374607.html

使用Html5+C#+微信 开发移动端游戏详细教程 :(三)使用html5引擎搭建游戏框架

教程里的案例我们是通过H5游戏引擎开发,目前H5的游戏引擎比较好用的是白鹭,不过对于新手来说白鹭的开发环境和工具使用过于复杂,这里推荐一个国内大神编写的游戏引擎:lufylegend. 直接在页面引入Js文件,就可以开发了,运行效率非常高效,语法是仿AS3语法,懂C#的人上手会很快. Lufylegend引擎具体的API和使用方法可以参考官网和论坛: http://www.lufylegend.com/api/zh_CN/out/classes/FPS.html 之前微信上有一款"怪兽必须死&q

Team--时代团队PC端游戏冲刺计划完成与项目远景规划

number1:本周冲刺的目标 完成与android版功能基本相似的功能 游戏中玩家必须控制一只小鸟,跨越由各种不同长度水管所组成的障碍,而这只鸟其实是根本不会飞的--所以玩家每点击一下小鸟就会飞高一点,不点击就会下降,玩          家必须控制节奏,拿捏点击的时间点,让小鸟能在落下的瞬间跳起来,恰好能够通过狭窄的水管缝隙,只要稍一分神,马上就会失败阵亡. number2:项目远景目标 功能的增加: ①不同鸟的选择,根据玩家水平和玩家的目前的状态,对不同的鸟解锁 ② 背景的选择(根据用户的