首先第一篇先讲一讲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. Jboss 集群配置

    环境配置:CentOS 7 x64 * 3 IP:  172.24.0.100        172.24.0.101        172.24.0.102 服务器配置: 172.24.0.100 ...

  2. jvm 配置,看看

    http://my.oschina.net/qiangzigege/blog/661757

  3. chart.js在html中画曲线图

    http://www.bootcss.com/p/chart.js/docs/ http://www.chartjs.org/docs/   中有详细讲解 一.简介 Chart.js是一个基于HTML ...

  4. Mapreduce 反向索引

    反向索引主要用于全文搜索,就是形成一个word url这样的结构 file1: MapReduce is simple file2: MapReduce is powerful is simple f ...

  5. iOS开发——工厂模式

    工厂模式很好用,为表诚意,我直接搞个实用的例子放这,解析一个订单的数据,并且这个订单里面可能不止一件商品的做法. 还是直接上代码,不懂的地方,再提出来. 1.在MyOrderDeals.h文件中 #i ...

  6. JQueryUI确认框 confirm

    $(function(){ $('#AlertMsg').dialog({ autoOpen: false, width: 300, modal: true, position: 'center', ...

  7. IOS开发中数据持久化的几种方法--NSUserDefaults

    IOS开发中数据持久化的几种方法--NSUserDefaults IOS 开发中,经常会遇到需要把一些数据保存在本地的情况,那么这个时候我们有以下几种可以选择的方案: 一.使用NSUserDefaul ...

  8. java实现——035第一个只出现一次的字符

    import java.util.Hashtable; public class T035 { public static void main(String[] args) { FirstNotRep ...

  9. python 爬取的数据要如何展现(可视化)?

    我是把数据放在 mongodb ,然后单独一个脚本作分析,导出 json ,用 c3.js 画图,然后随便写个很简单的页面就好了. 展示在这里: http://107.170.207.236/job_ ...

  10. python and or用法

    and 和 or 是python的两个逻辑运算符,可以使用and , or来进行多个条件内容的判断.下面通过代码简单说明下and  or的用法: 1. or:当有一个条件为真时,该条件即为真.逻辑图如 ...