lua_pluginx_manual_protocols.cpp 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. #include "lua_pluginx_manual_protocols.h"
  2. #include "PluginProtocol.h"
  3. #include "tolua_fix.h"
  4. #include "LuaBasicConversions.h"
  5. using namespace std;
  6. using namespace cocos2d::plugin;
  7. int lua_pluginx_protocols_PluginProtocol_callFuncWithParam_base(lua_State* tolua_S, function<int(PluginProtocol*, const char*, vector<PluginParam*>&)> callback)
  8. {
  9. int argc = 0;
  10. cocos2d::plugin::PluginProtocol* cobj = nullptr;
  11. bool ok = true;
  12. #if COCOS2D_DEBUG >= 1
  13. tolua_Error tolua_err;
  14. #endif
  15. #if COCOS2D_DEBUG >= 1
  16. if (!tolua_isusertype(tolua_S,1,"plugin.PluginProtocol",0,&tolua_err)) goto tolua_lerror;
  17. #endif
  18. cobj = (cocos2d::plugin::PluginProtocol*)tolua_tousertype(tolua_S,1,0);
  19. #if COCOS2D_DEBUG >= 1
  20. if (!cobj)
  21. {
  22. tolua_error(tolua_S,"invalid 'cobj' in function 'lua_pluginx_protocols_PluginProtocol_callFuncWithParam'", nullptr);
  23. return 0;
  24. }
  25. #endif
  26. argc = lua_gettop(tolua_S)-1;
  27. if (argc >= 1)
  28. {
  29. const char* arg0;
  30. std::vector<PluginParam*> arg1;
  31. std::string arg0_tmp; ok &= luaval_to_std_string(tolua_S, 2, &arg0_tmp); arg0 = arg0_tmp.c_str();
  32. if(!ok)
  33. return 0;
  34. for (int i = 3; i <= argc + 1; i++) {
  35. Value ret;
  36. luaval_to_ccvalue(tolua_S, i, &ret);
  37. switch (ret.getType()) {
  38. case cocos2d::Value::Type::INTEGER:
  39. arg1.push_back(new PluginParam(ret.asInt()));
  40. break;
  41. case cocos2d::Value::Type::FLOAT:
  42. arg1.push_back(new PluginParam(ret.asFloat()));
  43. break;
  44. case cocos2d::Value::Type::BOOLEAN:
  45. arg1.push_back(new PluginParam(ret.asBool()));
  46. break;
  47. case cocos2d::Value::Type::STRING:
  48. arg1.push_back(new PluginParam(ret.asString().c_str()));
  49. break;
  50. case cocos2d::Value::Type::MAP:
  51. {
  52. auto vm = ret.asValueMap();
  53. StringMap sm;
  54. for (auto e : vm) {
  55. sm[e.first] = e.second.asString();
  56. }
  57. arg1.push_back(new PluginParam(sm));
  58. break;
  59. }
  60. default:
  61. break;
  62. }
  63. }
  64. int ret = callback(cobj, arg0, arg1);
  65. for (auto e : arg1) {
  66. delete e;
  67. }
  68. return ret;
  69. }
  70. CCLOG("%s has wrong number of arguments: %d, was expecting %d \n", "callFuncWithParam",argc, 1);
  71. return 0;
  72. #if COCOS2D_DEBUG >= 1
  73. tolua_lerror:
  74. tolua_error(tolua_S,"#ferror in function 'lua_pluginx_protocols_PluginProtocol_callFuncWithParam'.",&tolua_err);
  75. #endif
  76. return 0;
  77. }
  78. int lua_pluginx_protocols_PluginProtocol_callFuncWithParam(lua_State* tolua_S)
  79. {
  80. return lua_pluginx_protocols_PluginProtocol_callFuncWithParam_base(tolua_S, [](PluginProtocol* cobj, const char* arg0, vector<PluginParam*>& arg1) {
  81. cobj->callFuncWithParam(arg0, arg1);
  82. return 0;
  83. });
  84. }
  85. int lua_pluginx_protocols_PluginProtocol_callStringFuncWithParam(lua_State* tolua_S)
  86. {
  87. return lua_pluginx_protocols_PluginProtocol_callFuncWithParam_base(tolua_S, [=](PluginProtocol* cobj, const char* arg0, vector<PluginParam*>& arg1) {
  88. string ret = cobj->callStringFuncWithParam(arg0, arg1);
  89. tolua_pushcppstring(tolua_S,ret);
  90. return 1;
  91. });
  92. }
  93. int lua_pluginx_protocols_PluginProtocol_callIntFuncWithParam(lua_State* tolua_S)
  94. {
  95. return lua_pluginx_protocols_PluginProtocol_callFuncWithParam_base(tolua_S, [=](PluginProtocol* cobj, const char* arg0, vector<PluginParam*>& arg1) {
  96. int ret = cobj->callIntFuncWithParam(arg0, arg1);
  97. tolua_pushnumber(tolua_S, ret);
  98. return 1;
  99. });
  100. }
  101. int lua_pluginx_protocols_PluginProtocol_callFloatFuncWithParam(lua_State* tolua_S)
  102. {
  103. return lua_pluginx_protocols_PluginProtocol_callFuncWithParam_base(tolua_S, [=](PluginProtocol* cobj, const char* arg0, vector<PluginParam*>& arg1) {
  104. float ret = cobj->callFloatFuncWithParam(arg0, arg1);
  105. tolua_pushnumber(tolua_S, ret);
  106. return 1;
  107. });
  108. }
  109. int lua_pluginx_protocols_PluginProtocol_callBoolFuncWithParam(lua_State* tolua_S)
  110. {
  111. return lua_pluginx_protocols_PluginProtocol_callFuncWithParam_base(tolua_S, [=](PluginProtocol* cobj, const char* arg0, vector<PluginParam*>& arg1) {
  112. bool ret = cobj->callBoolFuncWithParam(arg0, arg1);
  113. tolua_pushboolean(tolua_S, ret);
  114. return 1;
  115. });
  116. }
  117. static void extendPluginProtoco(lua_State* tolua_S)
  118. {
  119. lua_pushstring(tolua_S, "plugin.PluginProtocol");
  120. lua_rawget(tolua_S, LUA_REGISTRYINDEX);
  121. if (lua_istable(tolua_S,-1))
  122. {
  123. tolua_function(tolua_S, "callFuncWithParam", lua_pluginx_protocols_PluginProtocol_callFuncWithParam);
  124. tolua_function(tolua_S, "callStringFuncWithParam", lua_pluginx_protocols_PluginProtocol_callStringFuncWithParam);
  125. tolua_function(tolua_S, "callIntFuncWithParam", lua_pluginx_protocols_PluginProtocol_callIntFuncWithParam);
  126. tolua_function(tolua_S, "callFloatFuncWithParam", lua_pluginx_protocols_PluginProtocol_callFloatFuncWithParam);
  127. tolua_function(tolua_S, "callBoolFuncWithParam", lua_pluginx_protocols_PluginProtocol_callBoolFuncWithParam);
  128. }
  129. lua_pop(tolua_S, 1);
  130. }
  131. int register_all_pluginx_manual_protocols(lua_State* tolua_S)
  132. {
  133. if (NULL == tolua_S)
  134. return 0;
  135. extendPluginProtoco(tolua_S);
  136. return 0;
  137. }