前面写到了一些关于cocos2dx在开发中的一些模块以及一些解决方法,那些都属于本人的个人简介和个人倾向的解决方案.最近这几天我完善了一下ui解析的部分,当然也只是抽出一点点时间去做的这件事情.我添加了一个测试模块,保证了前面编码的各个模块都通过,android上面也是测试通过的,这个大家可以放心.现在我要暂时搁置一下cocos2dx系列部分,着手解决服务端部分.
在之前,我想先说一下我写fw服务端的出发点,简单,够用.先解释一下这里,所谓简单,够用.就是能够满足对接前面写到的cocos2dx部分,能够做到协议数据接受后的处理,暂时我还没有考虑组播之类的事情,但是这个后面我会添加.着重点放在从数据的接受解析以及到服务的处理返回过程,中间会涉及到socket处理,任务调度之类.我先定下这个简单的要求就是为了限制自己的思维,使之不会很快的横向发展,至少在我满意的架构出来之前我不想过度的横向发展.好吧,就说这么多.
我选用c,c++接合lua开发,核心的模块我会在c++部分写,不适用tolua++之类的桥接工具,而是使用lua c api作为lvm桥接工具,到服务层的处理我会使用lua服务.这之间其实是一个蛮复杂的过程.现在先说这么多,以后会慢慢总结,慢慢沉淀.另外,我用cmake作为项目构建工具,接合subl和qtcreator开发.我想了很久,最终确定使用qtcreator,是因为对cmake的支持比较好,但是大部分时间我都不会用,可能只是作为一个debug工具而已.
项目的前期雏形我已经搭建出来了.
1 -- fw 2 -- fw-server 3 -- build (cmake 内部构建模式) 4 -- dep (项目依赖的第三方扩展,目前我只是提供了lua-5.3.0) 5 -- fw (工程需要的c++模块封装,也可以认为是自己的库) 6 -- server (应用程序) 7 -- fw-web (web部分)
下面使fw-server目录的cmake文件:
1 cmake_minimum_required(VERSION 2.8) 2 project(fw-server C CXX) 3 4 option(DEBUG_MODE "Debug or Release Mode?" ON) 5 6 if(DEBUG_MODE) 7 set(CMAKE_BUILD_TYPE DEBUG) 8 else(DEBUG_MODE) 9 set(CMAKE_BUILD_TYPE RELEASE) 10 endif(DEBUG_MODE) 11 12 set(CMAKE_C_FLAGS_DEBUG "-g -Wall -DFW_DEBUG=1") 13 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}") 14 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-exceptions -std=c99") 15 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions -std=c++11 -Wno-deprecated-declarations -Wno-reorder") 16 17 add_subdirectory(dep) 18 add_subdirectory(fw) 19 add_subdirectory(server)
下面是dep下面的cmake文件:
1 option(BUILD_LUALIB "Build lua lib on or not?" ON) 2 3 if(BUILD_LUALIB) 4 add_subdirectory(lua-src) 5 endif(BUILD_LUALIB)
在此处,我提供了cmake开关,可以来控制工程编译时对依赖的控制.我现在只是添加了一个依赖lualib,所以可以看一下:
1 set(LUA_SRC 2 lua-5.3.0/src/lapi.c 3 lua-5.3.0/src/lauxlib.c 4 lua-5.3.0/src/lbaselib.c 5 lua-5.3.0/src/lbitlib.c 6 lua-5.3.0/src/lcode.c 7 lua-5.3.0/src/lcorolib.c 8 lua-5.3.0/src/lctype.c 9 lua-5.3.0/src/ldblib.c 10 lua-5.3.0/src/ldebug.c 11 lua-5.3.0/src/ldo.c 12 lua-5.3.0/src/ldump.c 13 lua-5.3.0/src/lfunc.c 14 lua-5.3.0/src/lgc.c 15 lua-5.3.0/src/linit.c 16 lua-5.3.0/src/liolib.c 17 lua-5.3.0/src/llex.c 18 lua-5.3.0/src/lmathlib.c 19 lua-5.3.0/src/lmem.c 20 lua-5.3.0/src/loadlib.c 21 lua-5.3.0/src/lobject.c 22 lua-5.3.0/src/lopcodes.c 23 lua-5.3.0/src/loslib.c 24 lua-5.3.0/src/lparser.c 25 lua-5.3.0/src/lstate.c 26 lua-5.3.0/src/lstring.c 27 lua-5.3.0/src/lstrlib.c 28 lua-5.3.0/src/ltable.c 29 lua-5.3.0/src/ltablib.c 30 lua-5.3.0/src/ltm.c 31 lua-5.3.0/src/lundump.c 32 lua-5.3.0/src/lutf8lib.c 33 lua-5.3.0/src/lvm.c 34 lua-5.3.0/src/lzio.c 35 ) 36 37 add_library(lua STATIC ${LUA_SRC}) 38 39 set_target_properties(lua PROPERTIES 40 ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/deplib" 41 LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/deplib" 42 )
我没有对依赖源码结构做任何调整,只是简单的提供了一个下载解压lua源码的脚本.
1 #!/bin/sh 2 curl -R -O http://www.lua.org/ftp/lua-5.3.0.tar.gz 3 chmod a+x lua-5.3.0.tar.gz 4 tar zxf lua-5.3.0.tar.gz
fw模块我暂时没有做任何处理,所以cmake文件是空的,我只是简单提供server下的一个main.cc文件,下面是server下的cmake工程文件:
1 set(BIN_NAME ${PROJECT_NAME}) 2 set(BIN_SRC 3 main.cc 4 ) 5 6 include_directories( 7 ${CMAKE_SOURCE_DIR}/dep/lua-src/lua-5.3.0/src 8 ) 9 10 add_executable(${BIN_NAME} ${BIN_SRC}) 11 12 target_link_libraries(${BIN_NAME} 13 lua 14 ) 15 16 set_target_properties(${BIN_NAME} PROPERTIES 17 RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin" 18 )
我讲gcc/g++搜索路径处理好了,链接到lua库,其他的并没有处理.然后就可以进入build目录执行cmake .. && make.这样项目前期就处理完了,下面要考虑一下如何去编码实现.
我会在后续的文章中继续更新这一系列的处理.