aboutsummaryrefslogtreecommitdiff
path: root/src/lua/modules/net/je_lua_net.cpp
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2018-10-23 15:56:01 +0800
committerchai <chaifix@163.com>2018-10-23 15:56:01 +0800
commit6551adeca70d4299a99d45245d4e13dbfdfa87e5 (patch)
treea766ff9a0cdc52588a6aa62e41d0b134c04c2ba0 /src/lua/modules/net/je_lua_net.cpp
parenta164919e8eb3409d13bb225cc0e6f0b95446e8e0 (diff)
*修改lua绑定文件的文件名
Diffstat (limited to 'src/lua/modules/net/je_lua_net.cpp')
-rw-r--r--src/lua/modules/net/je_lua_net.cpp86
1 files changed, 86 insertions, 0 deletions
diff --git a/src/lua/modules/net/je_lua_net.cpp b/src/lua/modules/net/je_lua_net.cpp
new file mode 100644
index 0000000..c477477
--- /dev/null
+++ b/src/lua/modules/net/je_lua_net.cpp
@@ -0,0 +1,86 @@
+#include "lua/modules/luax.h"
+#include "lua/modules/types.h"
+#include "libjin/jin.h"
+#include "lua/common/common.h"
+#include "je_lua_buffer.h"
+
+namespace JinEngine
+{
+namespace Lua
+{
+
+ using namespace JinEngine::Lua::Net;
+ using namespace JinEngine::Net;
+
+ static int l_initNetwork(lua_State* L)
+ {
+ JinEngine::Net::NetManager::get()->init();
+ return 1;
+ }
+
+ static int l_Socket(lua_State* L)
+ {
+ SocketInformation info = { 0 };
+ {
+ const char* socketType = luax_checkstring(L, 1);
+ if (strcmp(socketType, "TCP") == 0)
+ info.type = SocketType::TCP;
+ else if (strcmp(socketType, "UDP") == 0)
+ info.type = SocketType::UDP;
+ else
+ {
+ luax_error(L, "jin.net.Socket() first paramter wrong, must be TCP or UDP");
+ return 0;
+ }
+ // type, port
+ if (luax_gettop(L) == 2)
+ {
+ info.port = luax_checkinteger(L, 2);
+ }
+ // type, address, port
+ else if (luax_gettop(L) == 3)
+ {
+ if (luax_isstringstrict(L, 2))
+ info.address = tk_strtohl(luax_checkstring(L, 2));
+ else if (luax_isintegerstrict(L, 2))
+ info.address = luax_checkinteger(L, 2);
+ info.port = luax_checkinteger(L, 3);
+ }
+ }
+ Socket* socket = new Socket(info);
+ Proxy* proxy = (Proxy*)luax_newinstance(L, JIN_NETWORK_SOCKET, sizeof(Proxy));
+ proxy->bind(new Ref<Socket>(socket, JIN_NETWORK_SOCKET));
+ return 1;
+ }
+
+ static int l_Buffer(lua_State* L)
+ {
+ int size = luax_checkinteger(L, 1);
+ Proxy* proxy = (Proxy*)luax_newinstance(L, JIN_NETWORK_BUFFER, sizeof(Proxy));
+ Net::Buffer* buffer = new Net::Buffer(size);
+ proxy->bind(new Ref<Buffer>(buffer, JIN_NETWORK_BUFFER));
+ return 1;
+ }
+
+ static const luaL_Reg f[] = {
+ { "init", l_initNetwork },
+ { "newSocket", l_Socket },
+ { "newBuffer", l_Buffer },
+ { 0, 0 }
+ };
+
+ extern int luaopen_Socket(lua_State* L);
+ extern int luaopen_Buffer(lua_State* L);
+
+ int luaopen_net(lua_State* L)
+ {
+ luaopen_Socket(L);
+ luaopen_Buffer(L);
+
+ luax_newlib(L, f);
+
+ return 1;
+ }
+
+} // namespace Lua
+} // namespace JinEngine \ No newline at end of file