我非常想把一些非必需的信息以CSV表的格式保存到客户端,以减少和服务器的通讯,降低压力。于是写了这么一个。

但因为大家觉得这样的话,需要每次登陆时来检测同步这些数据,会减慢登陆速度,于是没有用到。

我觉得日后服务器压力增大了以后,可以这么使用。

总体上是两部分: 加密和读取。

1 加密

  使用quick自带的pack_files命令加密CSV文件。在quick\bin\pack_files.bat 具体使用方法可进去查看sample.

  启动程序时,告诉lua堆栈加密的密钥等。

具体代码如下

  打包时处理csv文件,记住yourkey yoursign 这是你自己设置的。

  1. echo - encrypt res\csv\*.* to res\csvnew\
  2. %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
  3.  
  4. if exist "%APP_ANDROID_ROOT%assets\res\csv" rmdir /s /q "%APP_ANDROID_ROOT%assets\res\csv"
  5. ren %APP_ANDROID_ROOT%assets\res\csvnew csv

AppDelegate.cpp中告诉C++你使用的key和sign, 7, 8分别是两个字符串的长度。

  1. LuaStack *pStack = pEngine->getLuaStack();
  2. pStack->setXXTEAKeyAndSign("yourkey", , "yoursign", );

2 读取。大概的思路是我们要从res目录下读取文件,而且这个文件是加密过的。

所以要注意以下两点:

  文件全路径获取方法是用的是 cc.FileUtils:getInstance():fullPathForFilename()

  读取文件内容时方法是 cc.HelperFunc:getFileData()

具体代码如下

单独的loader目录用来加载所有的文件。myapp.lua中,增加调用入口

  1. require("app.loader.init")

init.lua

  1. LoaderPath = "csv/"
  2.  
  3. import(".LoaderA").new()
  4. import(".LoaderB").new()

某一个LoaderA.lua

  1. local CSVReader = require("utils.CSVReader").new()
  2. local LoaderA = class("LoaderA")
  3.  
  4. function LoaderA:ctor()
  5. self.fn = "A.csv"
  6. self.items = {}
  7. self:load()
  8. end
  9.  
  10. function LoaderA:load()
  11. self.rows = CSVReader:load(LoaderPath..self.fn)
  12. if not self.rows then
  13. return
  14. end
  15.  
  16. local len = #self.rows
  17. for i = , len do
  18. local item = self.rows[i]
  19. self:parseColumn(item)
  20. end
  21.  
  22. printInfo("LoaderA end: %d ", len)
  23. end
  24.  
  25. function LoaderA:parseColumn(itemArr)
  26. local info = {}
  27. info.column1 = checkint(itemArr[])
  28. info.column2 = itemArr[] or ""
  29. info.column3 = checkint(itemArr[])
  30. self.items[#self.items+] = info
  31. end
  32.  
  33. return LoaderA
  1. CSVReader.lua
  1. local CSVReader = class("CSVReader")
  2.  
  3. function CSVReader:ctor()
  4. end
  5.  
  6. function CSVReader:load(filename)
  7. self.fn = cc.FileUtils:getInstance():fullPathForFilename(filename)
  8.  
  9. local fileExits = cc.FileUtils:getInstance():isFileExist(self.fn)
  10. if not fileExits then
  11. printError("file not exist %s", self.fn)
  12. return nil
  13. end
  14.  
  15. -- 这里使用cc.HelperFunc:getFileData() 而非 cc.FileUtils:getInstance():getStringFromFile(self.fn)
  16. -- 就是因为加密了
  17. local str = cc.HelperFunc:getFileData(self.fn)
  18. return self:parse(str)
  19. end
  20.  
  21. function CSVReader:parse(str)
  22. local content = {}
  23. local list = string.split(str, "\r\n")
  24.  
  25. if #list <= then
  26. return content
  27. end
  28.  
  29. table.remove(list, ) -- 第一行是各字段说明
  30.  
  31. for i = , #list do
  32. local linestr = string.ltrim(list[i])
  33. if string.sub(linestr, , ) ~= "#" then -- #开头的行为注释行
  34. local rows = string.split(linestr, ",")
  35. content[#content + ] = rows
  36. end
  37. end
  38.  
  39. return content
  40. end
  41.  
  42. return CSVReader

A.csv

  1. #column1,#column2,#column3,
  2. 10000,lang10000,1,
  3. 10001,lang10001,1,
  4. 10002,lang10002,1,
  5. 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. LintCode-8.旋转字符串

    旋转字符串 给定一个字符串和一个偏移量,根据偏移量旋转字符串(从左向右旋转) 样例 对于字符串 "abcdefg". offset=0 => "abcdefg&qu ...

  2. SpringData——HelloWorld

    1.背景 最开始了解SpringData的时候,以为他不就是ORM的一种实现方式嘛,还能有什么新的东西.从hibernate到ibatis.mybatis,也许他只不过是spring想整合一个更方便的 ...

  3. array_intersect_assoc 与array_intersect区别

    1.array_intersect_assoc — 带索引检查计算数组的交集 说明 array array_intersect_assoc ( array $array1 , array $array ...

  4. ifstat查看网络流量的原理

    ifstat查看网卡流量的原理:读的是哪个/proc/ 接口啊 同diskIO一样,网络的IO也同样有统计计数的,是/proc/net/dev一个典型的输出就是这个样子的: root@station6 ...

  5. Spring编程式事务管理及声明式事务管理

    本文将深入讲解 Spring 简单而强大的事务管理功能,包括编程式事务和声明式事务.通过对本教程的学习,您将能够理解 Spring 事务管理的本质,并灵活运用之. Spring 事务属性分析 事务管理 ...

  6. 【Python】PYTHON中STRIP()方法学习笔记

    Python strip() 方法用于移除字符串头尾指定的字符(默认为空格). 当使用strip('xxx'),只要字符串头尾有"xxx"中的一个,就会去掉,而不是符合字符串''x ...

  7. Spline样条函数 //C++关键字:operator // 重载函数 // 隐含的this指针 // 指针和const限定符

    在数学学科数值分析中,样条是一种特殊的函数,由多项式分段定义.样条插值是使用一种名为样条的特殊分段多项式进行插值的形式.由于样条插值可以使用低阶多项式样条实现较小的差值误差,这样就避免了使用高阶多项式 ...

  8. hdu 2151 Worm (DP)

    Worm Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  9. CF995A Tesla

    题目描述 Allen dreams of one day owning a enormous fleet of electric cars, the car of the future! He kno ...

  10. 1406: [AHOI2007]密码箱

    1406: [AHOI2007]密码箱 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1591  Solved: 944[Submit][Status][ ...