C/C++中嵌入LUA脚本(C/C++与LUA相互交互调用)-2

/*

 *

 *

 * @author ada

 * @version 1.0

 * @since 1.0

 */

#include <log.h>

#include "../LuaRuntime.hpp"

#include "../Task.hpp"

#include "../../LinkedLibrary.h"

 

LuaRuntime *runtime = NULL;

 

int lua_create_task(struct lua_State *L)

{

LuaContext &context = runtime->getContext();

int taskId = context.getIntArgument(1);

const char *taskName = context.getStringArgument(2);

int preTaskId = context.getIntArgument(3);

int postTaskId = context.getIntArgument(4);

const char *awards = context.getStringArgument(5);

info("create task id: %d, name: %s, pre-task-id: %d, post-task-id: %d, awards: %s", taskId, taskName, preTaskId, postTaskId, awards);

 

Task task;

task.createGlobalTask(taskId, taskName, preTaskId, postTaskId, awards);

return 0;

}

 

int lua_create_instance(struct lua_State *L)

{

return 0;

}

 

int lua_create_character(struct lua_State *L)

{

return 0;

}

 

int lua_create_object(struct lua_State *L)

{

return 0;

}

 

void init_task()

{

Task task;

task.clearGlobal();

runtime->dexecute("Task.data.lua");

}

 

int lua_runtime_version()

{

puts(LUA_VERSION);

puts(LUA_COPYRIGHT);

puts(LUA_AUTHORS);

return 0;

}

 

void init()

{

///*

runtime = LuaRuntime::instance();

lua_runtime_version();

runtime->registerFunction("lua_create_task", lua_create_task);

runtime->registerFunction("lua_create_instance", lua_create_instance);

runtime->registerFunction("lua_create_character", lua_create_character);

runtime->registerFunction("lua_create_object", lua_create_object);

//*/

 

init_task();

}

 

int main(int argc, char **args) 

{

init();

    return 0;

}

 

=============================================

 

#if ! defined __TASK

#define __TASK

class Task

{

private:

 

public:

void clearGlobal();

 

void createGlobalTask(int taskId, const char *taskName, int preTaskId, int postTaskId, const char *awards);

};

#endif

 

========================================

 

/*

 *

 *

 * @author ada

 * @version 1.0

 * @since 1.0

 */

#include <log.h>

#include <string>

 

#include "Task.hpp"

 

#include "../SQLException.hpp"

#include "../Mysql.hpp"

#include "../Connection.hpp"

#include "../Statement.h"

#include "../ResultSet.hpp"

 

void Task::clearGlobal()

{

Mysql *mysql = new Mysql("localhost", 3306, "liveim_test", "root", "jxcoco1128");

mysql->setEncode("gbk");

Connection *connection = NULL;

try 

{

connection = mysql->openConnection();

 

Statement *stat = connection->createStatement();

 

stat->execute("delete from global_task");

}

catch (SQLException e) 

{

error("Connection error %d: %s", e.getCode(), e.getMessage());

return;

}

info("global task cleared");

}

 

 

void Task::createGlobalTask(int taskId, const char *taskName, int preTaskId, int postTaskId, const char *awards)

{

Mysql *mysql = new Mysql("localhost", 3306, "liveim_test", "root", "jxcoco1128");

mysql->setEncode("gbk");

Connection *connection = NULL;

try 

{

connection = mysql->openConnection();

 

Statement *stat = connection->createStatement();

 

std::string sql;

sql.append("insert into global_task values(");

char c_taskId[8];

itoa(taskId, c_taskId, 10);

sql.append(c_taskId).append(", ");

sql.append("'").append(taskName).append("', ");

memset(c_taskId, 0, sizeof(c_taskId));

itoa(preTaskId, c_taskId, 10);

sql.append(c_taskId).append(", ");

memset(c_taskId, 0, sizeof(c_taskId));

itoa(postTaskId, c_taskId, 10);

sql.append(c_taskId).append(", ");

sql.append("'").append(awards).append("')");

info("sql: %s", sql.c_str());

stat->execute(sql.c_str());

}

catch (SQLException e) 

{

error("Connection error %d: %s", e.getCode(), e.getMessage());

return;

}

 

 

/*

char *s1 = "insert into global_task values(";

int sz = strlen(s1) + strlen(instance_idx) + 1;

char *sql = (char *) malloc(sz);

memset(sql, 0, sz);

strcat(sql, s1);

strcat(sql, instance_idx);

 

printf("selecct global barrier: %s\n", sql);

stat->execute(sql);

free(sql);

*/

}

 

 

======================================

 

lua_create_task(1, "欢迎来到游戏世界!先去报个到!", 0, 2, "")

lua_create_task(2, "领取装备", 0, 0, "")

lua_create_task(3, "完成任务2", 0, 0, "")

 

======================================

 

DEBUG=../Debug

 

PATH_VS=D:\usr\bin\Microsoft Visual Studio\VC98

CL="$(PATH_VS)\Bin\cl.exe"

LINK="$(PATH_VS)\Bin\link.exe"

 

INCLUDE="D:\usr\bin\Microsoft Visual Studio\VC98\Include"

LIB="D:\usr\bin\Microsoft Visual Studio\VC98\Lib"

 

 

INCLUDE_LIB_LOG=D:\home\admin\workstation\c\liblog

LIB_LIB_LOG=D:\home\admin\workstation\c\liblog\Debug

 

INCLUDE_MYSQL=D:\usr\srv\mysql51\include

LIB_MYSQL=D:\usr\srv\mysql51\lib\debug

 

 

INCLUDE_LUA=D:\usr\bin\Lua\5.1\include

LIB_LUA=D:\usr\bin\Lua\5.1\lib

 

 

make: clean

$(CL) /GX /W3 /I $(INCLUDE) /c /Fo$(DEBUG)/ ../SQLException.cpp

$(CL) /GX /W3 /I $(INCLUDE) /I$(INCLUDE_LIB_LOG) /I$(INCLUDE_MYSQL) /c /Fo$(DEBUG)/ ../Mysql.cpp

$(CL) /GX /W3 /I $(INCLUDE) /I$(INCLUDE_LIB_LOG) /I$(INCLUDE_MYSQL) /c /Fo$(DEBUG)/ ../Connection.cpp

$(CL) /GX /W3 /I $(INCLUDE) /I$(INCLUDE_LIB_LOG) /I$(INCLUDE_MYSQL) /c /Fo$(DEBUG)/ ../MysqlConnection.cpp

$(CL) /GX /W3 /I $(INCLUDE) /I$(INCLUDE_LIB_LOG) /I$(INCLUDE_MYSQL) /c /Fo$(DEBUG)/ ../MysqlStatement.cpp

$(CL) /GX /W3 /I $(INCLUDE) /I$(INCLUDE_LIB_LOG) /I$(INCLUDE_MYSQL) /c /Fo$(DEBUG)/ ../MysqlResultSet.cpp

$(CL) /GX /W3 /I $(INCLUDE) /I$(INCLUDE_LIB_LOG) /I$(INCLUDE_MYSQL) /c /Fo$(DEBUG)/ ../Mysql.cpp

 

$(CL) /GX /W3 /I $(INCLUDE) /I$(INCLUDE_LUA) /I$(INCLUDE_MYSQL) /I$(INCLUDE_LIB_LOG) /c /Fo$(DEBUG)/ ../gs/Task.cpp

 

$(CL) /GX /W3 /I $(INCLUDE) /I$(INCLUDE_LUA) /I$(INCLUDE_LIB_LOG) /c /Fo$(DEBUG)/ ../gs/LuaException.cpp

$(CL) /GX /W3 /I $(INCLUDE) /I$(INCLUDE_LUA) /I$(INCLUDE_LIB_LOG) /c /Fo$(DEBUG)/ ../gs/LuaContext.cpp

$(CL) /GX /W3 /I $(INCLUDE) /I$(INCLUDE_LUA) /I$(INCLUDE_LIB_LOG) /c /Fo$(DEBUG)/ ../gs/LuaScriptExecutor.cpp

$(CL) /GX /W3 /I $(INCLUDE) /I$(INCLUDE_LUA) /I$(INCLUDE_LIB_LOG) /c /Fo$(DEBUG)/ ../gs/LuaRuntime.cpp

$(CL) /GX /W3 /I $(INCLUDE) /I$(INCLUDE_LUA) /I$(INCLUDE_LIB_LOG) /c /Fo$(DEBUG)/ ../gs/data/DataBackendServer.cpp

 

 

#lib /nologo log.obj /out:./liblog.lib 

$(LINK) /LIBPATH:$(LIB) /LIBPATH:$(LIB_LIB_LOG) /LIBPATH:$(LIB_MYSQL) /LIBPATH:$(LIB_LUA) /OUT:$(DEBUG)/LuaRuntimeTest.exe $(DEBUG)/*.obj

#$(LINK) /DLL /LIBPATH:$(LIB) /OUT:$(DEBUG)/liblog.dll *.obj

#$(LINK) /DLL /LIBPATH:$(LIB) /OUT:$(DEBUG)/liblog.dll $(DEBUG)/*.obj

# $(LINK) *.obj /LIBPATH:"D:\usr\bin\Microsoft Visual Studio\VC98\Lib"

cp ../liblog.dll $(DEBUG)/

cp ./test.lua $(DEBUG)/

cp ../gs/Task.data.lua .

 

clean:

rm -Rf ./*.bak

rm -Rf ./*.o

rm -Rf ./*.obj

rm -Rf ./*.exe

rm -Rf ../Debug/*

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值