]> gitweb.factorcode.org Git - factor.git/blob - basis/furnace/cache/cache.factor
calendar: use now in some places instead of now-gmt.
[factor.git] / basis / furnace / cache / cache.factor
1 ! Copyright (C) 2008 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: kernel accessors math.intervals
4 system calendar fry
5 random db db.tuples db.types
6 http.server.filters ;
7 IN: furnace.cache
8
9 TUPLE: server-state id expires ;
10
11 : new-server-state ( id class -- server-state )
12     new swap >>id ; inline
13
14 server-state f
15 {
16     { "id" "ID" +random-id+ system-random-generator }
17     { "expires" "EXPIRES" BIG-INTEGER +not-null+ }
18 } define-persistent
19
20 : get-state ( id class -- state )
21     new-server-state select-tuple ;
22
23 : expire-state ( class -- )
24     new
25         -1/0. now timestamp>micros [a,b] >>expires
26     delete-tuples ;
27
28 TUPLE: server-state-manager < filter-responder timeout ;
29
30 : new-server-state-manager ( responder class -- responder' )
31     new
32         swap >>responder
33         20 minutes >>timeout ; inline
34
35 : touch-state ( state manager -- )
36     timeout>> hence timestamp>micros >>expires drop ;