aboutsummaryrefslogtreecommitdiff
path: root/src/libjin-lua/modules/net/l_net.cpp
blob: 512cf9ab989e6ab65d7c840b3dc5a6e70edcaccf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include "common/l_object.h"
#include "libjin/jin.h"
#include "common/l_common.h"

#include "l_buffer.h"
#include "l_socket.h"

namespace JinEngine
{
	namespace Lua
	{

		using namespace JinEngine::Lua::Net;
		using namespace JinEngine::Net;

		LUA_IMPLEMENT int l_initNetwork(lua_State* L)
		{
			JinEngine::Net::NetManager::get()->start();
			return 1;
		}
	
		LUA_IMPLEMENT int l_Socket(lua_State* L)
		{
			SocketInformation info = { 0 };
			{
				const char* socketType = luax_checkstring(L, 1);
				if (strcmp(socketType, "TCP") == 0)
					info.type = SocketType::TCP;
				else if (strcmp(socketType, "UDP") == 0)
					info.type = SocketType::UDP;
				else
				{
					luax_error(L, "jin.net.Socket() first paramter wrong, must be TCP or UDP");
					return 0;
				}
				// type, port
				if (luax_gettop(L) == 2)
				{
					info.port = luax_checkinteger(L, 2);
				}
				// type, address, port
				else if (luax_gettop(L) == 3)
				{
					if (luax_isstringstrict(L, 2))
						info.address = tk_strtohl(luax_checkstring(L, 2));
					else if (luax_isintegerstrict(L, 2))
						info.address = luax_checkinteger(L, 2);
					info.port = luax_checkinteger(L, 3);
				}
			}
			Socket* socket = new Socket(info);
			LuaObject* luaObj = luax_newinstance(L, Jin_Lua_Socket, new Shared(socket));
			return 1;
		}

		LUA_IMPLEMENT int l_Buffer(lua_State* L)
		{
			int size = luax_checkinteger(L, 1);
			Net::Buffer* buffer = new Net::Buffer(size);
			LuaObject* luaObj = luax_newinstance(L, Jin_Lua_Buffer, new Shared(buffer));
			return 1;
		}

		LUA_EXPORT int luaopen_net(lua_State* L)
		{
			luaopen_Socket(L);
			luaopen_Buffer(L);
			luaL_Reg methods[] = {
				{ "init",	  l_initNetwork },
				{ "newSocket", l_Socket	  },
				{ "newBuffer", l_Buffer	  },
				{ 0,		   0			 }
			};
			luax_newlib(L, methods);
			return 1;
		}

	} // namespace Lua
} // namespace JinEngine