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 ;
|
2009-04-25 00:26:10 -04:00
|
|
|
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 )
|
2009-05-30 20:16:23 -04:00
|
|
|
[ 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
|
|
|
|
2009-05-30 20:16:23 -04:00
|
|
|
: process ( vocabspec -- )
|
|
|
|
vocab-words [ deserialize ] dip deserialize
|
|
|
|
swap at "executer" get execute( args word -- bytes ) write flush ;
|
|
|
|
|
|
|
|
: (serve) ( -- )
|
|
|
|
deserialize dup serving-vocabs get-global index
|
|
|
|
[ process ] [ drop ] if ;
|
|
|
|
|
|
|
|
: start-serving-vocabs ( -- )
|
|
|
|
[
|
|
|
|
binary <threaded-server>
|
|
|
|
5000 >>insecure
|
|
|
|
[ (serve) ] >>handler
|
|
|
|
start-server
|
|
|
|
] in-thread ;
|
|
|
|
|
|
|
|
: (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
|
|
|
|
(( -- words )) define-inline ;
|
2009-04-26 19:56:24 -04:00
|
|
|
|
|
|
|
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 [
|
2009-05-30 20:16:23 -04:00
|
|
|
[
|
|
|
|
dup words>> values
|
|
|
|
\ mem-do-rpc "memoize" word-prop [ delete-at ] curry each
|
|
|
|
] append
|
|
|
|
] change-global
|