aboutsummaryrefslogtreecommitdiff
path: root/src/lua/net
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
parentbe9b27dbf550093b555ab3087c11b38c89ab9fd0 (diff)
*update
Diffstat (limited to 'src/lua/net')
-rw-r--r--src/lua/net/Buffer.h2
-rw-r--r--src/lua/net/Socket.h77
-rw-r--r--src/lua/net/luaopen_Buffer.cpp32
-rw-r--r--src/lua/net/luaopen_Socket.cpp61
-rw-r--r--src/lua/net/luaopen_net.cpp8
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;
}