码迷,mamicode.com
首页 > 其他好文 > 详细

【FOL】第六周

时间:2016-07-24 17:45:25      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:

最近太忙,三周(第四、五、六周)一起记录一下。

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, 2);
  lvCallbackEventID:= lua_tointeger(L, 3);
  lvMsgData:= TSimpleMsgPack.Create;
  try
    lvParamsTableName:= lua_tostring(L, 4);
    lua_getglobal(L, PAnsiChar(AnsiString(lvParamsTableName)));
    lvParamCount:= lua_rawlen(L, -1);
    for i:= 1 to lvParamCount do
    begin
      //压入主表的第i条记录(一个table)
      lua_pushinteger(L, i);
      lua_rawget(L,-2);

      //压入当前子表的第 1 个字段: type
      lua_pushstring(L, type);
      lua_rawget(L,-2);
      lvVType:= lua_tointeger(L,-1);
      lua_pop(L, 1);

      //压入当前子表的第 2 个字段: name
      lua_pushstring(L, name);
      lua_rawget(L,-2);
      lvParamName:= lua_tostring(L,-1);
      lua_pop(L, 1);

      //压入当前子表的第 3 个字段: value
      lua_pushstring(L, value);
      lua_rawget(L,-2);
      case lvVType of
        ord(mptString) : lvMsgData.Add(lvParamName,lua_tostring(L,-1));
        ord(mptInteger): lvMsgData.Add(lvParamName,lua_tointeger(L,-1));
        ord(mptFloat)  : lvMsgData.Add(lvParamName,lua_tonumber(L,-1));
        ord(mptBoolean): lvMsgData.Add(lvParamName,Boolean(lua_toboolean(L,-1)));
      end;
      lua_pop(L, 1);

      //弹出本记录(一个table),不然取不到下一条记录
      lua_pop(L, 1);
    end;
    gvNetManager.sendGateMsgData(lvRequireMsgcode,lvMsgData,lvCallbackEventID);
  finally
    FreeAndNil(lvMsgData);
  end;
end;

 

【FOL】第六周

标签:

原文地址:http://www.cnblogs.com/crymm/p/5701057.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!