1 require("lib/scheduler")
3 Memcache = class(function(obj, ip, port, handler)
8 obj._sched = Scheduler()
12 function Memcache:put(key, value)
13 if self._state ~= 2 then
17 self:_send("set", key, "0", "0", #value, "noreply")
22 function Memcache:delete(key)
23 if self._state ~= 2 then
27 self:_send("delete", key, "0", "noreply")
31 function Memcache:flush_all()
32 if self._state ~= 2 then
36 self:_send("flush_all", "noreply")
40 function Memcache:_send(...)
43 data = table.concat(data, " ")
44 self:_log("send " .. data)
45 if self._state ~= 2 then
46 self:_log("send in bad state")
50 socket_write(self._socket, data .. "\r\n")
53 function Memcache:_event(socket, event, tag, ...)
54 self:_log("socket event: " .. event)
55 if event == "connect" then
57 self.handler("connect")
58 elseif event == "close" then
61 self.handler("disconnect")
62 self:_schedule_connect()
63 elseif event == "read" then
65 self:_log("read: " .. data:gsub("\r\n", "\\r\\n"))
69 function Memcache:_connect()
70 self:_log("connect(ip=" .. self.ip .. " port=" .. self.port .. ") state=" .. self._state)
71 if self._state ~= 0 then
75 self._socket = socket_tcp_connect(self.ip, self.port, function(...) self:_event(...) end, self)
76 if not self._socket then
77 self:_schedule_connect()
81 self:_log("connect() state=" .. self._state .. " s ==" .. self._socket)
84 function Memcache:_schedule_connect()
85 self._sched:add(5, function() self:_connect() end)
88 function Memcache:_log(data)