【FOL】第六周
最近太忙,三周(第四、五、六周)一起记录一下。
1、完成了键盘的输入,顺便把之前鼠标输入改了一下(最早是在渲染循环里面处理鼠标事件)
2、UI控件方面,做了个Edit控件,把之前的Label、Image、Button完善了一下
3、Delphi与lua方面的交互做了些修改,减少数据的多次处理,本来自己写了个数据存取对象,后来也都统一改成用msgpack。
4、网络方面,增加了一个gate服务器,客户端加了个fol.net.gate的context。
5、业务方面,做了login、chat、mail、friend几个模块。

小结:这几周还是在完善框架,重点是设计了服务端结构以及想清楚了客户端与服务端的数据交互。
这里分享一下Delphi读取多层table的lua数据的代码:
function TFOLNetScriptPackage.sendGateMsgData(L: lua_State): Integer;
var
lvRequireMsgcode, lvCallbackEventID: Integer;
lvParamsTableName, lvParamName: string;
lvParamCount, i, lvVType: Integer;
lvMsgData: TSimpleMsgPack;
begin
{
param_1 = lua.self(?, ignore),
param_2 = requireMsgCode(integer),
param_3 = callbackEventID(integer),
param_4 = lua.tableName(string)
param_5 = lua.data(table)
lua.data = {
[1] = {type=integer, name=string, value=string/integer/float/boolean},
[2] = {type=integer, name=string, value=string/integer/float/boolean},
[3] = {type=integer, name=string, value=string/integer/float/boolean},
...
}
}
lvRequireMsgcode:= lua_tointeger(L, );
lvCallbackEventID:= lua_tointeger(L, );
lvMsgData:= TSimpleMsgPack.Create;
try
lvParamsTableName:= lua_tostring(L, );
lua_getglobal(L, PAnsiChar(AnsiString(lvParamsTableName)));
lvParamCount:= lua_rawlen(L, -);
to lvParamCount do
begin
//压入主表的第i条记录(一个table)
lua_pushinteger(L, i);
lua_rawget(L,-);
//压入当前子表的第 1 个字段: type
lua_pushstring(L, 'type');
lua_rawget(L,-);
lvVType:= lua_tointeger(L,-);
lua_pop(L, );
//压入当前子表的第 2 个字段: name
lua_pushstring(L, 'name');
lua_rawget(L,-);
lvParamName:= lua_tostring(L,-);
lua_pop(L, );
//压入当前子表的第 3 个字段: value
lua_pushstring(L, 'value');
lua_rawget(L,-);
case lvVType of
ord(mptString) : lvMsgData.Add(lvParamName,lua_tostring(L,-));
ord(mptInteger): lvMsgData.Add(lvParamName,lua_tointeger(L,-));
ord(mptFloat) : lvMsgData.Add(lvParamName,lua_tonumber(L,-));
ord(mptBoolean): lvMsgData.Add(lvParamName,Boolean(lua_toboolean(L,-)));
end;
lua_pop(L, );
//弹出本记录(一个table),不然取不到下一条记录
lua_pop(L, );
end;
gvNetManager.sendGateMsgData(lvRequireMsgcode,lvMsgData,lvCallbackEventID);
finally
FreeAndNil(lvMsgData);
end;
end;
【FOL】第六周的更多相关文章
- 20145213《Java程序设计学习笔记》第六周学习总结
20145213<Java程序设计学习笔记>第六周学习总结 说在前面的话 上篇博客中娄老师指出我因为数据结构基础薄弱,才导致对第九章内容浅尝遏止地认知.在这里我还要自我批评一下,其实我事后 ...
- 20145304 Java第六周学习报告
20145304<Java程序设计>第六周学习总结 教材学习内容总结 1.InputStream与OutputStream: 在Java中,输入串流的代表对象为java.io.InputS ...
- 20145330第六周《Java学习笔记》
20145330第六周<Java学习笔记> . 这周算是很忙碌的一周.因为第六周陆续很多实验都开始进行,开始要准备和预习的科目日渐增多,对Java分配的时间不知不觉就减少了,然而第十和十一 ...
- 20145337 《Java程序设计》第六周学习总结
20145337 <Java程序设计>第六周学习总结 教材学习内容总结 输入\输出 InputStream与OutputStream 从应用程序角度来看,如果要将数据从来源取出,可以使用输 ...
- Linux内核设计第六周 ——进程的描述和创建
Linux内核设计第六周 ——进程的描述和创建 第一部分 知识点总结 一.进程描述符task_struct数据结构 1.操作系统的三大功能: 进程管理.内存管理.文件系统 2.进程的作用: 将信号.进 ...
- 程序设计入门—Java语言 第六周编程题 1 单词长度(4分)
第六周编程题 依照学术诚信条款,我保证此作业是本人独立完成的. 1 单词长度(4分) 题目内容: 你的程序要读入一行文本,其中以空格分隔为若干个单词,以'.'结束.你要输出这行文本中每个单词的长度.这 ...
- 20145218 《Java程序设计》第六周学习总结
20145218 <Java程序设计>第六周学习总结 教材学习内容总结 第十章 输入/输出 10.1 InputStream与OutputStream 10.1.1 串流设计的概念 Jav ...
- 《Java程序设计》第六周学习总结
20145224 <Java程序设计>第六周学习总结 教材学习内容总结 第十章输入和输出 10.1.1 ·若要将数据从来源中取出,可以使用输入串流:若要将数据写入目的地,可以使用输出串流. ...
- 第五周&第六周
学习进度表 周数 专业学习目标 学习时间 新增代码行 博客发表量 人文方面学习 知识总结 第四周 认真掌握老师上课所讲的内容,在课外多学习一些知识 5小时 50 1 阅读 ...
随机推荐
- 1.安装Redis
首要条件:安装VMware,在虚拟机中安装CentOS. 安装步骤: 1.打开终端(Terminal) 2.在终端输入:wget http://download.redis.io/releases/r ...
- 13.首先,编写一个类ChongZai,该类中有3个重载的方法void print();其次, 再编写一个主类来测试ChongZai类的功能。
package java1; //计算器 public class Jisuanqi { //属性 //型号,品牌等 //重载 //1.方法同名不同参 //2.返回类型和重载无关 //3.多态的一种表 ...
- agularJs 路由
angularJs的路由方式: 先定义一个模板ng-app-->然后定义路由的规则(routeProvider)在服务config里-->然后通过不同的URL实现 到单页面加载的所需页面的 ...
- 浅谈attr()和prop()
刚开始学JQ的时候 ,看到attr()和prop()这两个属性的时候感觉很迷茫,而且配合官方给出的推荐使用图: prop()可以做到的attr()完全都可以,而且做不到的attr()也可以做到.何用? ...
- CSS学习目录
前面的话 CSS是前端工程师的基本功,但好多执迷于学习javascript的人的基本功并不扎实.可能一些人从w3school网站匆匆过了一遍,只是对CSS常用概念有一些表面上的理解,就一头扎进java ...
- art-template用户注册方法
应用场景nodejs Express框架,使用art-template模板引擎. 后台注册方法代码: var template = require('art-template'); template. ...
- [Qt5] How to connect c++ with QML
Qt5处于过度阶段,架构繁琐,学习成本不低.尤其是UI代码竟然被重写,变了天. Qt中的c++可能是连接OPENCV与QML的一个不错的桥梁,在此学习这部分实用的技术. Reference: http ...
- 【Android】Android Studio 进行代码混淆,打包release APK
整了一天,感觉坑挺多. 1. 选择如图中的选项Android Studio进行签名打包: 2. 填写APP对应的信息:(最好用个文本记下来放在项目中同步给Team) - Key store path: ...
- nodejs学习篇 (1)webstorm创建nodejs + express + jade 的web 项目
之前简单了解过nodejs,觉得用nodejs来做个网站也太麻烦了,要自己拼html的字符串返回,这能做网站嘛? 最近看到使用jade模板来开发,觉得挺新奇的,于是试了一把,也了解了一些特性,算是个新 ...
- Emit学习(4) - Dapper解析之数据对象映射(二)
承接着上一篇, 这一篇主要以堆栈的方式来演示一下, db数据转换到类中去的一个过程. 一.先看第一张图 程序在运行到176行(上一篇贴出的代码)的时候, 就会出现上图中的第一个栈. 那在此之前, Da ...