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