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按钮可以停止播放动画. 帧动画实例 下面我们再看看具体的程序代码,首 ...
随机推荐
- iOS开发跳转指定页面
for (UIViewController *VC in self.navigationController.viewControllers) { if ([VC isKindOfClass:[Car ...
- <Effective C++>读书摘要--Introduction
Introduction 1.Learning the fundamentals of a programming language is one thing; learning how to des ...
- 百度安卓sdk开发
一 key问题 1 在百度地图api控制台申请key的流程主要用到了app包,开发工具的开发sha1和发布sha1值,这2个值的获取就非常关键了. 一般来说我们都是在windows上开发安卓,使用an ...
- IntelliJ IDEA Maven引入
- TCP协议的滑动窗口具体是怎样控制流量的
首先明确: 1)TCP滑动窗口分为接受窗口,发送窗口滑动窗口协议是传输层进行流控的一种措施,接收方通过通告发送方自己的窗口大小,从而控制发送方的发送速度,从而达到防止发送方发送速度过快而导致自己被淹没 ...
- 【Python】安装python包时遇到"error: Microsoft Visual C++ 9.0 is required"的简答
简答 在Windows下用pip安装Scrapy报如下错误, error: Microsoft Visual C++ 9.0 is required (Unable to find vcvarsall ...
- bzoj4753[JSOI2016]最佳团体
题意:01分数规划,但可选的数字之间存在森林形的依赖关系(可以认为0号点是个虚根,因为并不能选). 虽然有森林形的依赖关系,但还是可以套分数规划的思路,二分答案k,判断是否存在一个比值大于k的方案 即 ...
- 【bzoj1738】[Usaco2005 mar]Ombrophobic Bovines 发抖的牛 Floyd+二分+网络流最大流
题目描述 FJ's cows really hate getting wet so much that the mere thought of getting caught in the rain m ...
- ZOJ1994 & POJ2396:Budget——题解
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1994 http://poj.org/problem?id=2396 题目大 ...
- HDOJ(HDU).1754 I Hate It (ST 单点替换 区间最大值)
HDOJ(HDU).1754 I Hate It (ST 单点替换 区间最大值) 点我挑战题目 题意分析 从题目中可以看出是大数据的输入,和大量询问.基本操作有: 1.Q(i,j)代表求区间max(a ...