]> gitweb.factorcode.org Git - factor.git/blob - unmaintained/modules/rpc-server/rpc-server.factor
tools.test: Make the flag public. Finish porting tester changes to fuzzer.
[factor.git] / unmaintained / modules / rpc-server / rpc-server.factor
1 ! Copyright (C) 2009 Sam Anklesaria.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors assocs combinators continuations effects
4 io.encodings.binary io.servers.connection kernel namespaces
5 sequences serialize sets threads vocabs vocabs.parser init io ;
6 IN: modules.rpc-server
7
8 <PRIVATE
9 TUPLE: rpc-request args vocabspec wordname ;
10 SYMBOL: serving-vocabs serving-vocabs [ V{ } clone ] initialize
11
12 : getter ( -- ) deserialize dup serving-vocabs get-global index
13         [ vocab-words [ stack-effect ] { } assoc-map-as ]
14         [ \ no-vocab boa ] if serialize flush ;
15
16 : doer ( -- ) deserialize dup vocabspec>> serving-vocabs get-global index
17         [ [ args>> ] [ wordname>> ] [ vocabspec>> vocab-words ] tri at [ execute ] curry with-datastack ]
18         [ vocabspec>> \ no-vocab boa ] if serialize flush ;
19
20 PRIVATE>
21 SYNTAX: service current-vocab name>> serving-vocabs get-global adjoin ;
22
23 : start-rpc-server ( -- )
24     binary <threaded-server>
25     "rpcs" >>name 9012 >>insecure
26     [ deserialize {
27       { "getter" [ getter ] }
28       {  "doer" [ doer ] }
29       { "loader" [ deserialize vocab serialize flush ] } 
30     } case ] >>handler
31     start-server ;