2008-02-09 22:34:42 -05:00
|
|
|
! Copyright (C) 2008 Slava Pestov, Doug Coleman
|
|
|
|
! See http://factorcode.org/license.txt for BSD license.
|
2008-03-19 16:24:49 -04:00
|
|
|
USING: kernel calendar alarms io.streams.duplex io.encodings ;
|
2008-02-09 22:34:42 -05:00
|
|
|
IN: io.timeouts
|
|
|
|
|
2008-02-10 02:39:21 -05:00
|
|
|
! Won't need this with new slot accessors
|
2008-02-21 20:12:55 -05:00
|
|
|
GENERIC: timeout ( obj -- dt/f )
|
|
|
|
GENERIC: set-timeout ( dt/f obj -- )
|
2008-02-09 22:34:42 -05:00
|
|
|
|
2008-02-21 20:12:55 -05:00
|
|
|
M: duplex-stream set-timeout
|
|
|
|
2dup
|
2008-02-10 02:39:21 -05:00
|
|
|
duplex-stream-in set-timeout
|
|
|
|
duplex-stream-out set-timeout ;
|
|
|
|
|
2008-03-19 16:24:49 -04:00
|
|
|
M: decoder set-timeout decoder-stream set-timeout ;
|
|
|
|
|
|
|
|
M: encoder set-timeout encoder-stream set-timeout ;
|
|
|
|
|
2008-02-09 22:34:42 -05:00
|
|
|
GENERIC: timed-out ( obj -- )
|
|
|
|
|
|
|
|
M: object timed-out drop ;
|
|
|
|
|
2008-02-21 20:12:55 -05:00
|
|
|
: queue-timeout ( obj timeout -- alarm )
|
2008-02-22 00:47:06 -05:00
|
|
|
>r [ timed-out ] curry r> later ;
|
2008-02-09 22:34:42 -05:00
|
|
|
|
|
|
|
: with-timeout ( obj quot -- )
|
2008-02-21 20:12:55 -05:00
|
|
|
over dup timeout dup [
|
|
|
|
queue-timeout slip cancel-alarm
|
|
|
|
] [
|
|
|
|
2drop call
|
|
|
|
] if ; inline
|