]>
Commit | Line | Data |
---|---|---|
4ce637de CP |
1 | require("lib/scheduler") |
2 | ||
3 | Memcache = class(function(obj, ip, port, handler) | |
4 | obj.ip = ip | |
5 | obj.port = port | |
6 | obj.handler = handler | |
7 | obj._state = 0 | |
8 | obj._sched = Scheduler() | |
9 | obj._connect(obj) | |
10 | end) | |
11 | ||
12 | function Memcache:put(key, value) | |
13 | if self._state ~= 2 then | |
14 | return false | |
15 | end | |
16 | ||
17 | self:_send("set", key, "0", "0", #value, "noreply") | |
18 | self:_send(value) | |
19 | return true | |
20 | end | |
21 | ||
22 | function Memcache:delete(key) | |
23 | if self._state ~= 2 then | |
24 | return false | |
25 | end | |
26 | ||
27 | self:_send("delete", key, "0", "noreply") | |
28 | return true | |
29 | end | |
30 | ||
31 | function Memcache:flush_all() | |
32 | if self._state ~= 2 then | |
33 | return false | |
34 | end | |
35 | ||
36 | self:_send("flush_all", "noreply") | |
37 | return true | |
38 | end | |
39 | ||
40 | function Memcache:_send(...) | |
41 | local data = { ... } | |
42 | ||
43 | data = table.concat(data, " ") | |
44 | self:_log("send " .. data) | |
45 | if self._state ~= 2 then | |
46 | self:_log("send in bad state") | |
47 | return | |
48 | end | |
49 | ||
50 | socket_write(self._socket, data .. "\r\n") | |
51 | end | |
52 | ||
53 | function Memcache:_event(socket, event, tag, ...) | |
54 | self:_log("socket event: " .. event) | |
55 | if event == "connect" then | |
56 | self._state = 2 | |
57 | self.handler("connect") | |
58 | elseif event == "close" then | |
59 | self._state = 0 | |
60 | self._socket = nil | |
61 | self.handler("disconnect") | |
62 | self:_schedule_connect() | |
63 | elseif event == "read" then | |
64 | local data = ... | |
65 | self:_log("read: " .. data:gsub("\r\n", "\\r\\n")) | |
66 | end | |
67 | end | |
68 | ||
69 | function Memcache:_connect() | |
70 | self:_log("connect(ip=" .. self.ip .. " port=" .. self.port .. ") state=" .. self._state) | |
71 | if self._state ~= 0 then | |
72 | return | |
73 | end | |
74 | ||
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() | |
78 | return | |
79 | end | |
80 | self._state = 1 | |
81 | self:_log("connect() state=" .. self._state .. " s ==" .. self._socket) | |
82 | end | |
83 | ||
84 | function Memcache:_schedule_connect() | |
85 | self._sched:add(5, function() self:_connect() end) | |
86 | end | |
87 | ||
88 | function Memcache:_log(data) | |
89 | -- chanmsg(data) | |
90 | end | |
91 |