aboutsummaryrefslogtreecommitdiff
path: root/src/lua/net/luaopen_Socket.cpp
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2018-08-16 14:21:56 +0800
committerchai <chaifix@163.com>2018-08-16 14:21:56 +0800
commit8585c92b7d0744a1f1a39c872cf5096621161b6c (patch)
tree6aa02138f39f7b11ab17c7399064353092b8df0c /src/lua/net/luaopen_Socket.cpp
parentbe9b27dbf550093b555ab3087c11b38c89ab9fd0 (diff)
*update
Diffstat (limited to 'src/lua/net/luaopen_Socket.cpp')
-rw-r--r--src/lua/net/luaopen_Socket.cpp61
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;
}