From 8585c92b7d0744a1f1a39c872cf5096621161b6c Mon Sep 17 00:00:00 2001 From: chai Date: Thu, 16 Aug 2018 14:21:56 +0800 Subject: *update --- src/lua/net/luaopen_Socket.cpp | 61 +++++++++++++++++++++--------------------- 1 file changed, 31 insertions(+), 30 deletions(-) (limited to 'src/lua/net/luaopen_Socket.cpp') diff --git a/src/lua/net/luaopen_Socket.cpp b/src/lua/net/luaopen_Socket.cpp index 5ccdaa0..40a62b6 100644 --- a/src/lua/net/luaopen_Socket.cpp +++ b/src/lua/net/luaopen_Socket.cpp @@ -2,75 +2,75 @@ #include "../luaopen_types.h" #include "libjin/jin.h" #include "Buffer.h" -#include "Socket.h" namespace jin { namespace lua { - using namespace jin::lua::net; + using namespace jin::net; + using namespace lua::net; const int BUFFER_SIZE = 1024; - static inline Socket* checkSocket(lua_State* L, int pos = 1) + static inline Ref& checkSocket(lua_State* L, int pos = 1) { Proxy* proxy = (Proxy*)luax_checktype(L, pos, JIN_NETWORK_SOCKET); - if (proxy != 0 && proxy != nullptr) - return (Socket*)proxy->object; - return nullptr; + return proxy->getRef(); } - static inline net::Buffer* checkNetBuffer(lua_State* L, int pos = 1) + static inline Ref& checkNetBuffer(lua_State* L, int pos = 1) { Proxy* proxy = (Proxy*)luax_checktype(L, pos, JIN_NETWORK_BUFFER); - if (proxy != 0 && proxy != nullptr) - return (net::Buffer*)proxy->object; - return nullptr; + return proxy->getRef(); } - // return net.Buffer + // return net.Socket static int l_accept(lua_State* L) { - Socket* socket = checkSocket(L); - Socket* client = socket->accept(); + Ref& socket = checkSocket(L); + Socket* client = (*socket).accept(); + Ref* ref = new Ref(client); Proxy* proxy = (Proxy*)luax_newinstance(L, JIN_NETWORK_SOCKET, sizeof(Proxy)); - proxy->bind(client, JIN_NETWORK_SOCKET); + proxy->bind(ref, JIN_NETWORK_SOCKET); return 1; } // return net.Buffer static int l_receive(lua_State* L) { - Socket* socket = checkSocket(L); + Ref& socket = checkSocket(L); char buffer[BUFFER_SIZE] = {0}; - int size = socket->receive(buffer, BUFFER_SIZE); + int size = (*socket).receive(buffer, BUFFER_SIZE); Proxy* proxy = (Proxy*)luax_newinstance(L, JIN_NETWORK_BUFFER, sizeof(Proxy)); net::Buffer* netBuffer = new net::Buffer(buffer, size); - proxy->bind(netBuffer, JIN_NETWORK_BUFFER); + Ref* ref = new Ref(netBuffer); + proxy->bind(ref, JIN_NETWORK_BUFFER); return 1; } // Socket:receiveFrom(address, port) static int l_receiveFrom(lua_State* L) { - Socket* socket = checkSocket(L); + Ref& socket = checkSocket(L); int address = luax_checkinteger(L, 2); int port = luax_checkinteger(L, 3); char buffer[BUFFER_SIZE]; - int size = socket->receiveFrom(buffer, BUFFER_SIZE, address, port); + int size = (*socket).receiveFrom(buffer, BUFFER_SIZE, address, port); net::Buffer* netBuffer = new net::Buffer(buffer, size); + Ref* ref = new Ref(netBuffer); Proxy* proxy = (Proxy*)luax_newinstance(L, JIN_NETWORK_BUFFER, sizeof(Proxy)); - proxy->bind(netBuffer, JIN_NETWORK_BUFFER); + proxy->bind(ref, JIN_NETWORK_BUFFER); return 1; } // Socket:send(net.Buffer) -> data_length static int l_send(lua_State* L) { - Socket* socket = checkSocket(L); - net::Buffer* buffer = checkNetBuffer(L, 2); - int len = socket->send(buffer->buffer, buffer->size); + Ref& socket = checkSocket(L); + Ref& ref = checkNetBuffer(L, 2); + net::Buffer* buffer = &*ref; + int len = (*socket).send(buffer->buffer, buffer->size); luax_pushinteger(L, len); return 1; } @@ -78,26 +78,27 @@ namespace lua // Socket:sendTo(address, port, net.Buffer) static int l_sendTo(lua_State* L) { - Socket* socket = checkSocket(L); + Ref& socket = checkSocket(L); int address = luax_checkinteger(L, 2); int port = luax_checkinteger(L, 3); - net::Buffer* buffer = checkNetBuffer(L, 4); - socket->sendTo(buffer->buffer, buffer->size, address, port); + Ref& ref = checkNetBuffer(L, 4); + net::Buffer* buffer = &*ref; + (*socket).sendTo(buffer->buffer, buffer->size, address, port); return 0; } static int l_close(lua_State* L) { - Socket* socket = checkSocket(L); - socket->close(); + Ref& socket = checkSocket(L); + (*socket).close(); return 0; } static int l_configBlocking(lua_State* L) { - Socket* socket = checkSocket(L); + Ref& socket = checkSocket(L); bool blocking = luax_checkbool(L, 2); - socket->configureBlocking(blocking); + (*socket).configureBlocking(blocking); return 0; } -- cgit v1.1-26-g67d0