factor/unmaintained/modules/rpc-server/rpc-server.factor

37 lines
1.3 KiB
Factor
Raw Normal View History

2009-04-26 19:56:24 -04:00
USING: accessors assocs continuations effects io
io.encodings.binary io.servers.connection kernel
2009-04-26 21:34:31 -04:00
memoize namespaces parser sets sequences serialize
threads vocabs vocabs.parser words ;
IN: modules.rpc-server
SYMBOL: serving-vocabs V{ } clone serving-vocabs set-global
2009-04-26 21:34:31 -04:00
: do-rpc ( args word -- bytes )
[ execute ] curry with-datastack object>bytes ; inline
2009-04-26 19:56:24 -04:00
2009-04-26 21:34:31 -04:00
MEMO: mem-do-rpc ( args word -- bytes ) do-rpc ; inline
2009-04-26 19:56:24 -04:00
: process ( vocabspec -- ) vocab-words [ deserialize ] dip deserialize
2009-04-26 21:34:31 -04:00
swap at "executer" get execute( args word -- bytes ) write flush ;
: (serve) ( -- ) deserialize dup serving-vocabs get-global index
2009-04-26 19:56:24 -04:00
[ process ] [ drop ] if ;
: start-serving-vocabs ( -- ) [
<threaded-server> 5000 >>insecure binary >>encoding [ (serve) ] >>handler
start-server ] in-thread ;
2009-04-26 19:56:24 -04:00
: (service) ( -- ) serving-vocabs get-global empty? [ start-serving-vocabs ] when
current-vocab serving-vocabs get-global adjoin
"get-words" create-in
in get [ vocab vocab-words [ stack-effect ] { } assoc-map-as ] curry
2009-04-26 19:56:24 -04:00
(( -- words )) define-inline ;
SYNTAX: service \ do-rpc "executer" set (service) ;
2009-04-26 21:34:31 -04:00
SYNTAX: mem-service \ mem-do-rpc "executer" set (service) ;
load-vocab-hook [
[ dup words>> values
\ mem-do-rpc "memoize" word-prop [ delete-at ] curry each ]
append ] change-global