factor/extra/modules/rpc-server/rpc-server.factor

32 lines
1.2 KiB
Factor
Raw Normal View History

2009-07-30 18:12:49 -04:00
! Copyright (C) 2009 Sam Anklesaria.
! See http://factorcode.org/license.txt for BSD license.
USING: accessors assocs combinators continuations effects
io.encodings.binary io.servers.connection kernel namespaces
2009-08-04 00:12:34 -04:00
sequences serialize sets threads vocabs vocabs.parser init io ;
2009-07-29 16:48:54 -04:00
IN: modules.rpc-server
2009-07-29 16:48:54 -04:00
<PRIVATE
TUPLE: rpc-request args vocabspec wordname ;
SYMBOL: serving-vocabs serving-vocabs [ V{ } clone ] initialize
: getter ( -- ) deserialize dup serving-vocabs get-global index
2009-07-29 16:48:54 -04:00
[ vocab-words [ stack-effect ] { } assoc-map-as ]
2009-08-04 00:12:34 -04:00
[ \ no-vocab boa ] if serialize flush ;
2009-07-29 16:48:54 -04:00
: doer ( -- ) deserialize dup vocabspec>> serving-vocabs get-global index
2009-07-29 16:48:54 -04:00
[ [ args>> ] [ wordname>> ] [ vocabspec>> vocab-words ] tri at [ execute ] curry with-datastack ]
2009-08-04 00:12:34 -04:00
[ vocabspec>> \ no-vocab boa ] if serialize flush ;
2009-07-29 16:48:54 -04:00
PRIVATE>
SYNTAX: service current-vocab name>> serving-vocabs get-global adjoin ;
: start-rpc-server ( -- )
binary <threaded-server>
"rpcs" >>name 9012 >>insecure
2009-08-04 00:12:34 -04:00
[ deserialize {
{ "getter" [ getter ] }
{ "doer" [ doer ] }
{ "loader" [ deserialize vocab serialize flush ] }
} case ] >>handler
start-server ;