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按钮可以停止播放动画. 帧动画实例 下面我们再看看具体的程序代码,首 ...
随机推荐
- vs调试时报503错误
开发中遇到了一个神问题,困扰了几个月没解决. 在本机调试,或者用iis服务器直接指向项目目录,访问网页任何页面都是报503. 一直找不到原因,配置文件也修改了,还是解决不了. 今天20170110一次 ...
- Deeplearning——Logistics回归
资料来源:1.博客:http://binweber.top/2017/09/12/deep_learning_1/#more——转载,修改更新 2.文章:https://www.qcloud.com/ ...
- MFC动态创建控件及其消息响应函数
这几天专门调研了一下MFC中如何动态创建控件及其消息响应函数. 参考帖子如下: (1)http://topic.csdn.net/u/20101204/13/5f1b1e70-2f1c-4205-ba ...
- YaoLingJump开发者日志(九)V1.1.1版本完成
跳跃吧瑶玲下载连接 百度网盘下载 介绍 Android版本升级到8.0,发现原来的图标不显示了: 百度了一下解决方案,用了该博客提供的第二种方法,修改roundIcon的内容. 可爱的图标 ...
- idea快捷键操作
在编写代码的时候直接输入psv就会看到一个psvm的提示,此时点击tab键一个main方法就写好了. psvm 也就是public static void main的首字母. 依次还有在方法体内键入f ...
- 不清楚System.Diagnostics.Process.Start(e.LinkText); 的含义
using System; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms ...
- WITH REPLACE 含义
RESTORE DATABASE db_CSharp from disk='backup.bak' WITH REPLACE WITH REPLACE后面是限定条件,with replace意思是替换 ...
- IO Model- 同步,异步,阻塞,非阻塞
同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出 ...
- 2011 Multi-University Training Contest 4 - Host by SDU
A.Color the Simple Cycle(polya计数+字符串匹配) 此题的难点在于确定置换的个数,由a[i+k]=a[i], e[i+k]=e[i]联想到KMP. 于是把原串和原串扩大两倍 ...
- 【bzoj2435】[NOI2011]道路修建 树形dp
题目描述 在 W 星球上有 n 个国家.为了各自国家的经济发展,他们决定在各个国家之间建设双向道路使得国家之间连通.但是每个国家的国王都很吝啬,他们只愿意修建恰好 n – 1条双向道路. 每条道路的修 ...