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 | |
parent | be9b27dbf550093b555ab3087c11b38c89ab9fd0 (diff) |
*update
Diffstat (limited to 'src/lua/net')
-rw-r--r-- | src/lua/net/Buffer.h | 2 | ||||
-rw-r--r-- | src/lua/net/Socket.h | 77 | ||||
-rw-r--r-- | src/lua/net/luaopen_Buffer.cpp | 32 | ||||
-rw-r--r-- | src/lua/net/luaopen_Socket.cpp | 61 | ||||
-rw-r--r-- | src/lua/net/luaopen_net.cpp | 8 |
5 files changed, 52 insertions, 128 deletions
diff --git a/src/lua/net/Buffer.h b/src/lua/net/Buffer.h index 035da5c..894de8c 100644 --- a/src/lua/net/Buffer.h +++ b/src/lua/net/Buffer.h @@ -12,7 +12,7 @@ namespace lua namespace net { - class Buffer : public Object + class Buffer { public: Buffer(size_t s = 0) diff --git a/src/lua/net/Socket.h b/src/lua/net/Socket.h deleted file mode 100644 index f679bd1..0000000 --- a/src/lua/net/Socket.h +++ /dev/null @@ -1,77 +0,0 @@ -#ifndef __JIN_LUA_NET_SOCKET_H -#define __JIN_LUA_NET_SOCKET_H -#include "libjin/jin.h" -#include "../luaopen_types.h" - -namespace jin -{ -namespace lua -{ -namespace net -{ - - typedef jin::net::SocketInformation SocketInformation; - typedef jin::net::SocketType SocketType; - - class Socket : public Object - { - public: - - Socket(const SocketInformation& info) - { - socket = new jin::net::Socket(info); - } - - void configureBlocking(bool blocking) - { - socket->configureBlocking(blocking); - } - - Socket* accept() - { - Socket* client = new Socket(); - client->socket = socket->accept(); - return client; - } - - int receive(char* buffer, int size) - { - return socket->receive(buffer, size); - } - - int send(char* buffer, int size) - { - return socket->send(buffer, size); - } - - void sendTo(char* buffer, int size, unsigned int address, unsigned int port) - { - socket->sendTo(buffer, size, address, port); - } - - int receiveFrom(char* buffer, int size, unsigned int address, unsigned int port) - { - return socket->receiveFrom(buffer, size, address, port); - } - - void close() - { - socket->close(); - } - - private: - jin::net::Socket* socket; - - Socket() {} - ~Socket() - { - delete socket; - } - - }; - -} // net -} // lua -} // jin - -#endif
\ No newline at end of file diff --git a/src/lua/net/luaopen_Buffer.cpp b/src/lua/net/luaopen_Buffer.cpp index 6d42c86..e7100cc 100644 --- a/src/lua/net/luaopen_Buffer.cpp +++ b/src/lua/net/luaopen_Buffer.cpp @@ -10,24 +10,22 @@ namespace lua namespace net { - static inline Buffer* checkNetBuffer(lua_State* L) + static inline Ref<Buffer>& checkNetBuffer(lua_State* L) { Proxy* proxy = (Proxy*)luax_checktype(L, 1, JIN_NETWORK_BUFFER); - if (proxy != 0 && proxy != nullptr) - return (Buffer*)proxy->object; - return nullptr; + return proxy->getRef<Buffer>(); } // net.Buffer:append(value) -> value_length static int l_append(lua_State* L) { - Buffer* buffer = checkNetBuffer(L); + Ref<Buffer>& ref = checkNetBuffer(L); const int vp = 2; if (luax_isintegerstrict(L, vp)) { int n = luax_checkinteger(L, vp); int size = sizeof(n); - buffer->append(&n, size); + (*ref).append(&n, size); luax_pushinteger(L, size); return 1; } @@ -35,7 +33,7 @@ namespace net { float n = luax_checknumber(L, vp); int size = sizeof(n); - buffer->append(&n, size); + (*ref).append(&n, size); luax_pushinteger(L, size); return 1; } @@ -43,7 +41,7 @@ namespace net { bool n = luax_checkbool(L, vp); int size = sizeof(n); - buffer->append(&n, size); + (*ref).append(&n, size); luax_pushinteger(L, size); return 1; } @@ -51,7 +49,7 @@ namespace net { const char* str = luax_checkstring(L, vp); int size = strlen(str) + 1; - buffer->append(str, size); + (*ref).append(str, size); luax_pushinteger(L, size); return 1; } @@ -65,10 +63,10 @@ namespace net // net.Buffer:grabString(offset) -> string, length static int l_grabString(lua_State* L) { - Buffer* buffer = checkNetBuffer(L); + Ref<Buffer>& ref = checkNetBuffer(L); int offset = luax_checkinteger(L, 2); int len; - const char* str = buffer->grabString(&len, offset); + const char* str = (*ref).grabString(&len, offset); luax_pushstring(L, str); luax_pushinteger(L, len); return 2; @@ -77,10 +75,10 @@ namespace net // net.Buffer:grabInteger(offset) -> integer, length static int l_grabInteger(lua_State* L) { - Buffer* buffer = checkNetBuffer(L); + Ref<Buffer>& ref = checkNetBuffer(L); int offset = luax_checkinteger(L, 2); int len; - int integer = buffer->grabInteger(&len, offset); + int integer = (*ref).grabInteger(&len, offset); luax_pushinteger(L, integer); luax_pushinteger(L, len); return 2; @@ -88,10 +86,10 @@ namespace net static int l_grabFloat(lua_State* L) { - Buffer* buffer = checkNetBuffer(L); + Ref<Buffer>& ref = checkNetBuffer(L); int offset = luax_checkinteger(L, 2); int len; - float floatv = buffer->grabFloat(&len, offset); + float floatv = (*ref).grabFloat(&len, offset); luax_pushnumber(L, floatv); luax_pushinteger(L, len); return 2; @@ -99,10 +97,10 @@ namespace net static int l_grabBoolean(lua_State* L) { - Buffer* buffer = checkNetBuffer(L); + Ref<Buffer>& ref = checkNetBuffer(L); int offset = luax_checkinteger(L, 2); int len; - bool boolean = buffer->grabBoolean(&len, offset); + bool boolean = (*ref).grabBoolean(&len, offset); luax_pushboolean(L, boolean); luax_pushinteger(L, len); return 2; 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; } diff --git a/src/lua/net/luaopen_net.cpp b/src/lua/net/luaopen_net.cpp index 7ec9cc7..0fce20f 100644 --- a/src/lua/net/luaopen_net.cpp +++ b/src/lua/net/luaopen_net.cpp @@ -2,13 +2,13 @@ #include "libjin/jin.h" #include "../luaopen_types.h" #include "Buffer.h" -#include "Socket.h" namespace jin { namespace lua { using namespace jin::lua::net; + using namespace jin::net; static int l_initNetwork(lua_State* L) { @@ -47,8 +47,9 @@ namespace lua } } Socket* socket = new Socket(info); + Ref<Socket>* ref = new Ref<Socket>(socket); Proxy* proxy = (Proxy*)luax_newinstance(L, JIN_NETWORK_SOCKET, sizeof(Proxy)); - proxy->bind(socket, JIN_NETWORK_SOCKET); + proxy->bind(ref, JIN_NETWORK_SOCKET); return 1; } @@ -58,7 +59,8 @@ namespace lua 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(buffer, JIN_NETWORK_BUFFER); + Ref<Buffer>* ref = new Ref<Buffer>(buffer); + proxy->bind(ref, JIN_NETWORK_BUFFER); return 1; } |