local _ENV = mkmodule('plugins.luasocket') local _funcs={} for k,v in pairs(_ENV) do if type(v)=="function" then _funcs[k]=v _ENV[k]=nil end end local socket=defclass(socket) socket.ATTRS={ server_id=-1, client_id=-1, } function socket:close( ) if self.client_id==-1 then _funcs.lua_server_close(self.server_id) else _funcs.lua_client_close(self.server_id,self.client_id) end end function socket:isBlocking() return _funcs.lua_socket_is_blocking(self.server_id,self.client_id) end function socket:setBlocking() _funcs.lua_socket_set_blocking(self.server_id,self.client_id,true) end function socket:setNonblocking() _funcs.lua_socket_set_blocking(self.server_id,self.client_id,false) end function socket:setTimeout( sec,msec ) msec=msec or 0 _funcs.lua_socket_set_timeout(self.server_id,self.client_id,sec,msec) self.timeout={s=sec,ms=msec} end function socket:select(sec,msec) if sec == nil and msec==nil then local timeout=self.timeout or {s=0,ms=0} sec=timeout.s msec=timeout.ms end return _funcs.lua_socket_select(self.server_id,self.client_id,sec,msec) end local client=defclass(client,socket) function client:receive( pattern ) local pattern=pattern or "*l" local bytes=-1 if type(pattern)== 'number' then bytes=pattern end local ret=_funcs.lua_client_receive(self.server_id,self.client_id,bytes,pattern,false) if ret=="" then return else return ret end end function client:send( data ) _funcs.lua_client_send(self.server_id,self.client_id,data) end local server=defclass(server,socket) function server:accept() local id=_funcs.lua_server_accept(self.server_id,false) if id~=nil then return client{server_id=self.server_id,client_id=id} else return end end tcp={} function tcp:bind( address,port ) local id=_funcs.lua_socket_bind(address,port) return server{server_id=id} end function tcp:connect( address,port ) local id=_funcs.lua_socket_connect(address,port) return client{client_id=id} end --TODO garbage collect stuff return _ENV