在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
我非常想把一些非必需的信息以CSV表的格式保存到客户端,以减少和服务器的通讯,降低压力。于是写了这么一个。 但因为大家觉得这样的话,需要每次登陆时来检测同步这些数据,会减慢登陆速度,于是没有用到。 我觉得日后服务器压力增大了以后,可以这么使用。 总体上是两部分: 加密和读取。 1 加密 使用quick自带的pack_files命令加密CSV文件。在quick\bin\pack_files.bat 具体使用方法可进去查看sample. 启动程序时,告诉lua堆栈加密的密钥等。 具体代码如下 打包时处理csv文件,记住yourkey yoursign 这是你自己设置的。 echo - encrypt res\csv\*.* to res\csvnew\ %QUICK_V3_ROOT%\quick\bin\win32\php.exe %QUICK_V3_ROOT%\quick\bin\lib\pack_files.php -i %APP_ANDROID_ROOT%assets\res\csv -o %APP_ANDROID_ROOT%assets\res\csvnew -es XXTEA -ek yourkey -es yoursign if exist "%APP_ANDROID_ROOT%assets\res\csv" rmdir /s /q "%APP_ANDROID_ROOT%assets\res\csv" ren %APP_ANDROID_ROOT%assets\res\csvnew csv AppDelegate.cpp中告诉C++你使用的key和sign, 7, 8分别是两个字符串的长度。 LuaStack *pStack = pEngine->getLuaStack(); pStack->setXXTEAKeyAndSign("yourkey", 7, "yoursign", 8);
2 读取。大概的思路是我们要从res目录下读取文件,而且这个文件是加密过的。 所以要注意以下两点: 文件全路径获取方法是用的是 cc.FileUtils:getInstance():fullPathForFilename() 读取文件内容时方法是 cc.HelperFunc:getFileData() 具体代码如下 单独的loader目录用来加载所有的文件。myapp.lua中,增加调用入口 require("app.loader.init") init.lua LoaderPath = "csv/" import(".LoaderA").new() import(".LoaderB").new() 某一个LoaderA.lua local CSVReader = require("utils.CSVReader").new() local LoaderA = class("LoaderA") function LoaderA:ctor() self.fn = "A.csv" self.items = {} self:load() end function LoaderA:load() self.rows = CSVReader:load(LoaderPath..self.fn) if not self.rows then return end local len = #self.rows for i = 1, len do local item = self.rows[i] self:parseColumn(item) end printInfo("LoaderA end: %d ", len) end function LoaderA:parseColumn(itemArr) local info = {} info.column1 = checkint(itemArr[1]) info.column2 = itemArr[2] or "" info.column3 = checkint(itemArr[3]) self.items[#self.items+1] = info end return LoaderA
CSVReader.lua local CSVReader = class("CSVReader") function CSVReader:ctor() end function CSVReader:load(filename) self.fn = cc.FileUtils:getInstance():fullPathForFilename(filename) local fileExits = cc.FileUtils:getInstance():isFileExist(self.fn) if not fileExits then printError("file not exist %s", self.fn) return nil end -- 这里使用cc.HelperFunc:getFileData() 而非 cc.FileUtils:getInstance():getStringFromFile(self.fn) -- 就是因为加密了 local str = cc.HelperFunc:getFileData(self.fn) return self:parse(str) end function CSVReader:parse(str) local content = {} local list = string.split(str, "\r\n") if #list <= 1 then return content end table.remove(list, 1) -- 第一行是各字段说明 for i = 1, #list do local linestr = string.ltrim(list[i]) if string.sub(linestr, 1, 1) ~= "#" then -- #开头的行为注释行 local rows = string.split(linestr, ",") content[#content + 1] = rows end end return content end return CSVReader A.csv #column1,#column2,#column3,
10000,lang10000,1,
10001,lang10001,1,
10002,lang10002,1,
10003,lang10003,1,
|
请发表评论