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