37 lines
		
	
	
		
			933 B
		
	
	
	
		
			Factor
		
	
	
			
		
		
	
	
			37 lines
		
	
	
		
			933 B
		
	
	
	
		
			Factor
		
	
	
! Copyright (C) 2008 Slava Pestov.
 | 
						|
! See http://factorcode.org/license.txt for BSD license.
 | 
						|
USING: kernel accessors math.intervals
 | 
						|
system calendar fry
 | 
						|
random db db.tuples db.types
 | 
						|
http.server.filters ;
 | 
						|
IN: furnace.cache
 | 
						|
 | 
						|
TUPLE: server-state id expires ;
 | 
						|
 | 
						|
: new-server-state ( id class -- server-state )
 | 
						|
    new swap >>id ; inline
 | 
						|
 | 
						|
server-state f
 | 
						|
{
 | 
						|
    { "id" "ID" +random-id+ system-random-generator }
 | 
						|
    { "expires" "EXPIRES" BIG-INTEGER +not-null+ }
 | 
						|
} define-persistent
 | 
						|
 | 
						|
: get-state ( id class -- state )
 | 
						|
    new-server-state select-tuple ;
 | 
						|
 | 
						|
: expire-state ( class -- )
 | 
						|
    new
 | 
						|
        -1/0. gmt timestamp>micros [a,b] >>expires
 | 
						|
    delete-tuples ;
 | 
						|
 | 
						|
TUPLE: server-state-manager < filter-responder timeout ;
 | 
						|
 | 
						|
: new-server-state-manager ( responder class -- responder' )
 | 
						|
    new
 | 
						|
        swap >>responder
 | 
						|
        20 minutes >>timeout ; inline
 | 
						|
 | 
						|
: touch-state ( state manager -- )
 | 
						|
    timeout>> hence timestamp>micros >>expires drop ;
 |