quick-cocos2dx lua中读取 加密 csv表
我非常想把一些非必需的信息以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", , "yoursign", );
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 = , 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[])
info.column2 = itemArr[] or ""
info.column3 = checkint(itemArr[])
self.items[#self.items+] = 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 <= then
return content
end
table.remove(list, ) -- 第一行是各字段说明
for i = , #list do
local linestr = string.ltrim(list[i])
if string.sub(linestr, , ) ~= "#" then -- #开头的行为注释行
local rows = string.split(linestr, ",")
content[#content + ] = 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,
quick-cocos2dx lua中读取 加密 csv表的更多相关文章
- cocos2d-x lua 中使用protobuf并对http进行处理
cocos2d-x lua 中使用protobuf并对http进行处理 本文介绍 cocos2d-x lua 中使用http 和 基于cocos2d-x 对lua http的封装(部分ok) 本博客链 ...
- Cocos2d-x Lua中帧动画
帧动画就是按一定时间间隔.一定的顺序.一帧一帧地显示帧图片.我们的美工要为精灵的运动绘制每一帧图片,因此帧动画会由很多帧组成,按照一定的顺序切换这些图片就可以了. 在Cocos2d-x Lua中播放帧 ...
- Cocos2d-x Lua中使用标签
游戏场景中的文字包括了静态文字和动态文字.静态文字如下图所示游戏场景中①号文字“COCOS2DX”,动态文字如图4-1所示游戏场景中的②号文字“Hello World”.静态文字一般是由美工使用Pho ...
- quick cocos2dx lua 内存释放
前言 对于内存的优化,网上有很多例子和教程.总体来说,就那么几种解决方案,在最后我会简单提下,这里先说下在quick中,对于图片的处理. 1.查看内存调试信息 对于quick框架的了解,我们可以参考\ ...
- cocos2dx lua中继承与覆盖C++方法
cocos2dx的extern.lua中的class方法为lua扩展了面向对象的功能,这使我们在开发中可以方便的继承原生类 但是用function返回对象的方法来继承C++类是没有super字段的,这 ...
- cocos2d-x lua中实现异步加载纹理
原文地址: http://www.cnblogs.com/linchaolong/p/4033118.html 前言 问题:最近项目中需要做一个loading个界面,界面中间有一个角色人物走动的 ...
- cocos2dx lua中异步加载网络图片,可用于显示微信头像
最近在做一个棋牌项目,脚本语言用的lua,登录需要使用微信登录,用户头像用微信账户的头像,微信接口返回的头像是一个url,那么遇到的一个问题就是如何在lua中异步加载这个头像,先在引擎源码里找了下可能 ...
- Cocos2dx+lua中Color参数的坑
cocos2x的lua中有如下几种颜色定义 --Color3B function cc.c3b( _r,_g,_b ) return { r = _r, g = _g, b = _b } end -- ...
- Cocos2d-x Lua中实例:帧动画使用
下面我们通过一个实例介绍一下帧动画的使用,这个实例如下图所示,点击Go按钮开始播放动画,这时候播放按钮标题变为Stop,点击Stop按钮可以停止播放动画. 帧动画实例 下面我们再看看具体的程序代码,首 ...
随机推荐
- 3dContactPointAnnotationTool开发日志(二四)
添加了清空2d接触点的按钮,将输出的2d接触点的单位变成了像素,原点在图像的左下角. 对于obj文件的适配更加多样化了.
- Qt MetaObject System详解
网上的资源比较乱,该文章整理自地址:http://www.xuebuyuan.com/735789.html Qt meta-object系统基于三个方面: 1.QObject提供一个基类,方便派生类 ...
- thinkPHP框架单一入口文件解析
一.index.php (可参考ThinkPHP学习手册http://document.thinkphp.cn/manual_3_2.html#entrance_file) index.php单入口 ...
- Log-spectral distance
Log-spectral distance对数频谱距离 log-spectral distance(LSD),也指 log-spectral distortion,是两个频谱之间的距离度量(用分贝表示 ...
- Dom选择器以及内容文本操作
1. DOM:文档对象模型.把整个HTML当做大的对象.每一个标签认为是一个对象.(每一个个体就是一个对象) 2. 查找: 直接查找 var obj=document.getElementById(& ...
- hadoop 使用Avro排序
在上例中,使用Avro框架求出数据的最大值,本例使用Avro对数据排序,输入依然是之前的样本,输出使用文本(也可以输出Avro格式). 1.在Avro的Schema中直接设置排序方向. dataRec ...
- BZOJ3197:[SDOI2013]刺客信条——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=3197 故事发生在1486 年的意大利,Ezio 原本只是一个文艺复兴时期的贵族,后来因为家族成员受 ...
- BZOJ2653:middle——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=2653 Description 一个长度为n的序列a,设其排过序之后为b,其中位数定义为b[n/2], ...
- BZOJ1022 [SHOI2008]小约翰的游戏John 【博弈论】
1022: [SHOI2008]小约翰的游戏John Time Limit: 1 Sec Memory Limit: 162 MB Submit: 3014 Solved: 1914 [Submi ...
- NOIP2015Day2T3运输计划(二分+树上差分)
做了这么多NOIPTG的题,这是唯一 一道一眼秒的T3(有时候T2还不会做QAQ)... 题目大意就不说了QWQ 思路大概是:啊最大值最小化,来个二分.检验mid的话,显然就是用最长路径减去所有边权& ...