//游戲中下載配置文件方法 ?[建議復(fù)制粘貼成js文件 看]
/*
先不說獲取數(shù)據(jù)的實(shí)現(xiàn),簡單來說一下這些數(shù)據(jù)的意義吧.
游戲里,有大量的數(shù)據(jù),包括角色,道具,裝備,活動(dòng),關(guān)卡,獎(jiǎng)勵(lì)等等等等這些東西,都是由大量的數(shù)據(jù)支撐起來的.
通過對(duì)這些數(shù)據(jù)的接觸,自己也有很大的體會(huì),呵呵 點(diǎn)到為止.進(jìn)入正題
在游戲中 一般數(shù)據(jù)的保存格式是 .json .這些數(shù)據(jù)都是由策劃部門進(jìn)行精細(xì)的管理.一般游戲開發(fā)團(tuán)隊(duì)都會(huì)建立自己的數(shù)據(jù)管理工具,哪怕是臨時(shí)的.
自己在項(xiàng)目開始的時(shí)候,也參與過這些管理工具的完善以及維護(hù).主要是文件的讀寫,保存.然后根據(jù)服務(wù)器去劃分不同的服務(wù)器.用的時(shí)angularJS框架.這個(gè)框架自己
了解的不是很多,我的等級(jí)就是會(huì)用.深入的沒有去研究.如果有誰有經(jīng)驗(yàn)的話,可以寫幾篇文章供參考一下.
數(shù)據(jù)的結(jié)構(gòu)如果只是看這些json文件的話,而不看這些數(shù)據(jù)的源文件,你是看不明白的.必須要看策劃的表,xlsx文件.
我解除過一個(gè)最復(fù)雜的配置文件,策劃和自己溝通數(shù)據(jù)結(jié)構(gòu)的時(shí)候,花費(fèi)了大概半個(gè)小時(shí)的時(shí)間,自己才明白,
這些數(shù)據(jù)到底該怎么用.不過在使用的過程中,還是會(huì)遺忘一些東西.
不多說了 扯遠(yuǎn)了.
還有一個(gè)問題就是nodejs中fs模塊的問題,自己在github上node的官方issue中提到過.
fs.readdir and fs.readdirSync is not work like the description on API #9089
*/
//考慮多個(gè)服務(wù)器的情況 所以在保存數(shù)據(jù)的時(shí)候 是根據(jù)服務(wù)器名稱保存的
var fs = require('fs');
var http = require('http');
var async = require('async');
var serverType = 'merge';//合并服務(wù)器
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);
}
})