diff options
author | chai <chaifix@163.com> | 2018-08-16 14:21:56 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2018-08-16 14:21:56 +0800 |
commit | 8585c92b7d0744a1f1a39c872cf5096621161b6c (patch) | |
tree | 6aa02138f39f7b11ab17c7399064353092b8df0c /src/lua/net/luaopen_Socket.cpp | |
parent | be9b27dbf550093b555ab3087c11b38c89ab9fd0 (diff) |
*update
Diffstat (limited to 'src/lua/net/luaopen_Socket.cpp')
-rw-r--r-- | src/lua/net/luaopen_Socket.cpp | 61 |
1 files changed, 31 insertions, 30 deletions
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<Socket>& 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<Socket>(); } - static inline net::Buffer* checkNetBuffer(lua_State* L, int pos = 1) + static inline Ref<Buffer>& 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<Buffer>(); } - // return net.Buffer + // return net.Socket static int l_accept(lua_State* L) { - Socket* socket = checkSocket(L); - Socket* client = socket->accept(); + Ref<Socket>& socket = checkSocket(L); + Socket* client = (*socket).accept(); + Ref<Socket>* ref = new Ref<Socket>(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>& 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<Buffer>* ref = new Ref<Buffer>(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>& 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<Buffer>* ref = new Ref<Buffer>(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>& socket = checkSocket(L); + Ref<Buffer>& 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>& 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<Buffer>& 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>& socket = checkSocket(L); + (*socket).close(); return 0; } static int l_configBlocking(lua_State* L) { - Socket* socket = checkSocket(L); + Ref<Socket>& socket = checkSocket(L); bool blocking = luax_checkbool(L, 2); - socket->configureBlocking(blocking); + (*socket).configureBlocking(blocking); return 0; } |