//游戏中下载配置文件方法 [建议复制粘贴成js文件 看]
/*
先不说获取数据的实现,简单来说一下这些数据的意义吧.
游戏里,有大量的数据,包括角色,道具,装备,活动,关卡,奖励等等等等这些东西,都是由大量的数据支撑起来的.
通过对这些数据的接触,自己也有很大的体会,呵呵 点到为止.进入正题
在游戏中 一般数据的保存格式是 .json .这些数据都是由策划部门进行精细的管理.一般游戏开发团队都会建立自己的数据管理工具,哪怕是临时的.
自己在项目开始的时候,也参与过这些管理工具的完善以及维护.主要是文件的读写,保存.然后根据服务器去划分不同的服务器.用的时angularJS框架.这个框架自己
了解的不是很多,我的等级就是会用.深入的没有去研究.如果有谁有经验的话,可以写几篇文章供参考一下.
数据的结构如果只是看这些json文件的话,而不看这些数据的源文件,你是看不明白的.必须要看策划的表,xlsx文件.
我解除过一个最复杂的配置文件,策划和自己沟通数据结构的时候,花费了大概半个小时的时间,自己才明白,
这些数据到底该怎么用.不过在使用的过程中,还是会遗忘一些东西.
不多说了 扯远了.
还有一个问题就是nodejs中fs模块的问题,自己在github上node的官方issue中提到过.
fs.readdir and fs.readdirSync is not work like the description on API #9089
*/
//考虑多个服务器的情况 所以在保存数据的时候 是根据服务器名称保存的
var fs = require('fs');
var http = require('http');
var async = require('async');
var serverType = 'merge';//合并服务器
var configNames = [];
var configNamesWithSuffix = [];
async.waterfall([
function(cb){
http.get('http://192.168.1.1:80000/getConfigNameByServerName?server='+serverType, function(res) {
res.on('data',function(data){
configNamesWithSuffix = JSON.parse(data) || [];//获取所有配置文件的名称 []
});
res.on('end',function(){
console.log('获取配置文件名成功!');
});
cb();
});
},
function(cb){
for(var i = 0;i < configNamesWithSuffix.length; i++){
var index = configNamesWithSuffix[i].indexOf('.')
var name = configNamesWithSuffix[i].substring(0,index);
configNames.push(name);
}
async.mapSeries(configNames,function(item,call){
if(fs.existsSync('./dataConfig/'+item+'.json')){
fs.unlinkSync('./dataConfig/'+item+'.json');
}
call();
},function(err,data){
cb();
});
},function(cb){
async.mapSeries(configNames,function(item,call){
var file = fs.createWriteStream('./dataConfig/'+item+'.json');
http.get('http://192.168.1.1:80000/getConfigByName?name=' + item + '&server='+serverType, function(res) {
res.on('data', function(data) {
file.write(data);
});
res.on('end', function() {
file.end();
call();
});
});
},function(err,result){
cb();
});
}
],function(err,result){
if(!err){
console.log('获取配置文件成功!');
} else{
console.log(err);
}
})