Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit d9c50d6

Browse files
committed
A lua interface for csockets in a spirit of luasocket
1 parent 0b4d32d commit d9c50d6

2 files changed

Lines changed: 419 additions & 0 deletions

File tree

plugins/lua/luasocket.lua

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
local _ENV = mkmodule('plugins.luasocket')
2+
local _funcs={}
3+
for k,v in pairs(_ENV) do
4+
if type(v)=="function" then
5+
_funcs[k]=v
6+
_ENV[k]=nil
7+
end
8+
end
9+
10+
local socket=defclass(socket)
11+
socket.ATTRS={
12+
server_id=-1,
13+
client_id=-1,
14+
}
15+
16+
function socket:close( )
17+
if self.client_id==-1 then
18+
_funcs.lua_server_close(self.server_id)
19+
else
20+
_funcs.lua_client_close(self.server_id,self.client_id)
21+
end
22+
end
23+
function socket:setTimeout( sec,msec )
24+
msec=msec or 0
25+
_funcs.lua_socket_set_timeout(self.server_id,self.client_id,sec,msec)
26+
end
27+
28+
local client=defclass(client,socket)
29+
function client:receive( pattern )
30+
local pattern=pattern or "*l"
31+
local bytes=-1
32+
if type(pattern)== number then
33+
bytes=pattern
34+
end
35+
local ret=_funcs.lua_client_receive(self.server_id,self.client_id,bytes,pattern,false)
36+
if ret=="" then
37+
return
38+
else
39+
return ret
40+
end
41+
end
42+
function client:send( data )
43+
_funcs.lua_client_send(self.server_id,self.client_id,data)
44+
end
45+
46+
47+
local server=defclass(server,socket)
48+
function server:accept()
49+
local id=_funcs.lua_server_accept(self.server_id,false)
50+
if id~=nil then
51+
return client{server_id=self.server_id,client_id=id}
52+
else
53+
return
54+
end
55+
end
56+
57+
tcp={}
58+
function tcp:bind( address,port )
59+
local id=_funcs.lua_socket_bind(address,port)
60+
return server{server_id=id}
61+
end
62+
function tcp:connect( address,port )
63+
local id=_funcs.lua_socket_connect(address,port)
64+
return client{client_id=id}
65+
end
66+
--TODO garbage collect stuff
67+
return _ENV

0 commit comments

Comments
 (0)