我非常想把一些非必需的信息以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表的更多相关文章

  1. cocos2d-x lua 中使用protobuf并对http进行处理

    cocos2d-x lua 中使用protobuf并对http进行处理 本文介绍 cocos2d-x lua 中使用http 和 基于cocos2d-x 对lua http的封装(部分ok) 本博客链 ...

  2. Cocos2d-x Lua中帧动画

    帧动画就是按一定时间间隔.一定的顺序.一帧一帧地显示帧图片.我们的美工要为精灵的运动绘制每一帧图片,因此帧动画会由很多帧组成,按照一定的顺序切换这些图片就可以了. 在Cocos2d-x Lua中播放帧 ...

  3. Cocos2d-x Lua中使用标签

    游戏场景中的文字包括了静态文字和动态文字.静态文字如下图所示游戏场景中①号文字“COCOS2DX”,动态文字如图4-1所示游戏场景中的②号文字“Hello World”.静态文字一般是由美工使用Pho ...

  4. quick cocos2dx lua 内存释放

    前言 对于内存的优化,网上有很多例子和教程.总体来说,就那么几种解决方案,在最后我会简单提下,这里先说下在quick中,对于图片的处理. 1.查看内存调试信息 对于quick框架的了解,我们可以参考\ ...

  5. cocos2dx lua中继承与覆盖C++方法

    cocos2dx的extern.lua中的class方法为lua扩展了面向对象的功能,这使我们在开发中可以方便的继承原生类 但是用function返回对象的方法来继承C++类是没有super字段的,这 ...

  6. cocos2d-x lua中实现异步加载纹理

    原文地址:  http://www.cnblogs.com/linchaolong/p/4033118.html 前言   问题:最近项目中需要做一个loading个界面,界面中间有一个角色人物走动的 ...

  7. cocos2dx lua中异步加载网络图片,可用于显示微信头像

    最近在做一个棋牌项目,脚本语言用的lua,登录需要使用微信登录,用户头像用微信账户的头像,微信接口返回的头像是一个url,那么遇到的一个问题就是如何在lua中异步加载这个头像,先在引擎源码里找了下可能 ...

  8. Cocos2dx+lua中Color参数的坑

    cocos2x的lua中有如下几种颜色定义 --Color3B function cc.c3b( _r,_g,_b ) return { r = _r, g = _g, b = _b } end -- ...

  9. Cocos2d-x Lua中实例:帧动画使用

    下面我们通过一个实例介绍一下帧动画的使用,这个实例如下图所示,点击Go按钮开始播放动画,这时候播放按钮标题变为Stop,点击Stop按钮可以停止播放动画. 帧动画实例 下面我们再看看具体的程序代码,首 ...

随机推荐

  1. flash builder 4.6在debug调试时需要系统安装flashplayer debug版本

    http://blog.csdn.net/cupid0051/article/details/46684295

  2. grid++json页面数据传入

    最近遇到一个问题,就是要用Grid++做页面数据报表打印,但是翻了Grid++文档就是没有直接从页面上传数据的,都是要加载txt文档,填写txt文档的url.自己尝试直接页面上传JSON数据到Grid ...

  3. union查询

     select id, uid, money, FROM_UNIXTIME(created) as created, type FROM  (  #type=1是  cjw_finance_bonus ...

  4. Ubuntu 12.04.1 LTS 升级 PHP 从5.3 到 5.5

    #!/bin/bash # desc install php5.5 #add-apt-repository ppa:ondrej/php5 #apt-get install python-softwa ...

  5. springMVC视图有哪些?-009

    html,json,pdf等. springMVC 使用ViewResolver来根据controller中返回的view名关联到具体的view对象. 使用view对象渲染返回值以生成最终的视图,比如 ...

  6. [计算机网络] DNS何时使用TCP协议,何时使用UDP协议

    DNS同时占用UDP和TCP端口53是公认的,这种单个应用协议同时使用两种传输协议的情况在TCP/IP栈也算是个另类.但很少有人知道DNS分别在什么情况下使用这两种协议. 先简单介绍下TCP与UDP. ...

  7. Redis架构演变与redis-cluster群集读写方案

    导言 redis-cluster是近年来redis架构不断改进中的相对较好的redis高可用方案.本文涉及到近年来redis多实例架构的演变过程,包括普通主从架构(Master.slave可进行写读分 ...

  8. 第50天:scrollTo小火箭返回顶部

    scrollTo(x,y)//可把内容滚动到指定的坐标scrollTo(xpos,ypos)//x,y值必需 1.固定导航栏 <!DOCTYPE html> <html lang=& ...

  9. Atom Editor 插件 atom-less 的使用方法

    一.下载安装 atom-less atom-less 项目在这里:https://github.com/schmuli/atom-less 安装方法请参考这篇博文:http://blog.csdn.n ...

  10. [HAOI2006]受欢迎的牛 tarjan缩点 + 拓扑排序

    ---题面--- 题解: 首先tarjan缩点应该还是容易想到的,因为喜爱具有传递性,所以一个强联通分量里面的点实际上是全部等效的,所以我们可以缩成一个方便判断, 缩完点之后整张图就变成了一个有向无环 ...