1 ! Copyright (C) 2008 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: kernel accessors math.intervals
5 random db db.tuples db.types
9 TUPLE: server-state id expires ;
11 : new-server-state ( id class -- server-state )
12 new swap >>id ; inline
16 { "id" "ID" +random-id+ system-random-generator }
17 { "expires" "EXPIRES" TIMESTAMP +not-null+ }
20 : get-state ( id class -- state )
21 new-server-state select-tuple ;
23 : expire-state ( class -- )
25 -1.0/0.0 now [a,b] >>expires
28 TUPLE: server-state-manager < filter-responder timeout ;
30 : new-server-state-manager ( responder class -- responder' )
33 20 minutes >>timeout ; inline
35 : touch-state ( state manager -- )
36 timeout>> hence >>expires drop ;