首先第一篇先讲一讲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

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

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

    公司要做一个游戏接入腾讯QQ游戏大厅,腾讯要求制作一个launcher,公司之前并没有接入过腾讯,所以大家其实都不懂,而我又是新人,所以刚拿到这个任务的时候整个人就是一个大写的懵逼.在网上查找了不少的 ...

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

    额...刚开始信誓旦旦说要写launcher制作的博客,还没写完就被抛到脑后了真是没毅力.最近把之前写的wpf的launcher改成了mfc版,遇到很多问题,写了三个星期才写完,好好记录一下吧.我也想 ...

  3. Unity下的开发框架--适应web和微端游戏异步资源请求的框架

    一.   内容简介: 1.   框架对Web与微端游戏特性的支持: Web和微端游戏最重要的特性是,资源是持续从服务器上即时下载下来的.而保证体验流畅的关键就是保证资源下载分散到持续的体验过程中,并保 ...

  4. 微端启动器LAUNCHER的制作之MFC版二(下载)

    用了C#再回来用C++写真的有一种我已经不属于这个世界的感觉.C++的下载就没有C#那么方便了,我用的是libcurl.dll,官网上下载的源码自己cmake出来编译的,c++的库引用有debug和r ...

  5. Egret微端 创建项目(一)

    开发环境: window7 egret engine:5.0.14 egret wing:4.1.0 微端:v0.0.14 官方教程:http://developer.egret.com/cn/git ...

  6. dotNet开发游戏微端

    需求分析 功能要求 当玩家使用不支持 unity webplayer 的浏览器进入游戏时,让玩家通过微端玩游戏. 确保微端的功能和页游戏功能一致. 大体功能就是为unity web game开发微端, ...

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

    本人于2013年9月23号加入一个页游项目组, 并作为项目组的客户端小组的主程, 带领一个4个人(峰值)的前端小组, 进行微端的开发.微端项目于2014年8月底大体完成, 历时11个月.9月份之后微端 ...

  8. 微端 代码project as air 分享

    分享 ^_^ 1. 使用 air , as . 2. 微端下载和更新技术 成功上线棋牌游戏.它可用于传统的游戏开发. 地址: http://download.csdn.net/detail/stone ...

  9. 亲历H5移动端游戏微信支付接入及那些坑(二)——获取Openid和授权

    第一篇中将一些坑说明,那么这篇开始正式进入接入步骤.具体的参数说明,我不会列出,毕竟微信官方文档都有,我想大家都看的懂,而且这接口也有可能微信会变动,所以不列出来,也是不想引起大家的误解,接入步骤只起 ...

随机推荐

  1. Bootstrap学习指南

    一.Bootstrap简介 二.Bootstrap安装 三.Bootstrap CSS 四.Bootstrap 布局组件 五.Bootstrap 插件 六.Bootstrap定制

  2. (中等) POJ 1054 The Troublesome Frog,记忆化搜索。

    Description In Korea, the naughtiness of the cheonggaeguri, a small frog, is legendary. This is a we ...

  3. kafka第五篇

    架构设计:http://www.linuxeden.com/html/news/20130309/136716_2.html 代码实现consumer 和producer

  4. WIN32动态链接库设计与使用

    WINDOWS动态链接库技术能很好地实现代码的分模块,综合来说,windows动态链接库分为三种WIN32动态链接库,使用WINDOWS api函数调用设计,贴近底层,体积小,是最初Windows程序 ...

  5. log4j的用法

    1.导入 2.在src下新建log4j.properties,内容如下 log4j.rootLogger=DEBUG, A1 ,R log4j.appender.A1=org.apache.log4j ...

  6. UVa 11631 - Dark roads

    题目大意:政府为了减小开支决定关闭一些路灯,同时保证照亮的路能连接所有路口. 又是一个MST问题,Kruskal算法,不过数据规模比较大,又Submission Error了...扔这吧... #in ...

  7. [Angular Tutorial] 3-Components

    在先前的步骤中,我们看到了一个控制器和一个模板如何一起工作来将一个静态的HTML文件转化为动态页面(view).一般说来,这在单页应用中一种非常常见的模式(在Angular应用中尤其是这样): ·客户 ...

  8. 基于RBAC的权限设计模型

    个部件模型组成,这4个部件模型分别是基本模型RBAC0(Core RBAC).角色分级模型RBAC1(Hierarchal RBAC).角色限制模型RBAC2(Constraint RBAC)和统一模 ...

  9. iOS 操作系统整体架构层次讲解

    iOS的系统架构分为四个层次:核心操作系统层(Core OS layer).核心服务层(Core Services layer).媒体层(Media layer)和可触摸层(Cocoa Touch l ...

  10. ANT风格URL规则

    转: 我们在看Java技术书籍的过程中,当加载文件时总会遇到是否支持ant风格路径加载,这里说的ant风格是什么意思呢,今天我查了一下,明白了什么意思,现在总结一下 ANT通配符有三种: 通配符 说明 ...