From 25002fbff0c3a0f13b1e215c881f1479e29867d2 Mon Sep 17 00:00:00 2001 From: Sam Anklesaria Date: Sun, 26 Apr 2009 20:34:31 -0500 Subject: [PATCH] modules.rpc-server additions --- .../remote-loading/remote-loading.factor | 1 + extra/modules/rpc-server/rpc-server.factor | 20 +++++++++++++------ extra/modules/uploads/uploads.factor | 5 +++++ 3 files changed, 20 insertions(+), 6 deletions(-) create mode 100644 extra/modules/uploads/uploads.factor diff --git a/extra/modules/remote-loading/remote-loading.factor b/extra/modules/remote-loading/remote-loading.factor index 0106ba7dfe..7a51f2488d 100644 --- a/extra/modules/remote-loading/remote-loading.factor +++ b/extra/modules/remote-loading/remote-loading.factor @@ -1,3 +1,4 @@ USING: modules.rpc-server vocabs ; IN: modules.remote-loading mem-service + : get-vocab ( vocabstr -- vocab ) vocab ; \ No newline at end of file diff --git a/extra/modules/rpc-server/rpc-server.factor b/extra/modules/rpc-server/rpc-server.factor index d1823fe5a1..63d5a870b4 100644 --- a/extra/modules/rpc-server/rpc-server.factor +++ b/extra/modules/rpc-server/rpc-server.factor @@ -1,18 +1,19 @@ USING: accessors assocs continuations effects io io.encodings.binary io.servers.connection kernel -memoize namespaces parser sets sequences serialize threads vocabs -vocabs.parser words tools.walker ; +memoize namespaces parser sets sequences serialize +threads vocabs vocabs.parser words ; IN: modules.rpc-server SYMBOL: serving-vocabs V{ } clone serving-vocabs set-global -: do-rpc ( args word -- results ) [ execute ] curry with-datastack ; inline +: do-rpc ( args word -- bytes ) + [ execute ] curry with-datastack object>bytes ; inline -MEMO: mem-do-rpc ( args word -- results ) do-rpc ; inline +MEMO: mem-do-rpc ( args word -- bytes ) do-rpc ; inline : process ( vocabspec -- ) vocab-words [ deserialize ] dip deserialize - swap at "executer" get execute( args word -- results ) serialize flush ; + swap at "executer" get execute( args word -- bytes ) write flush ; : (serve) ( -- ) deserialize dup serving-vocabs get-global index [ process ] [ drop ] if ; @@ -28,4 +29,11 @@ MEMO: mem-do-rpc ( args word -- results ) do-rpc ; inline (( -- words )) define-inline ; SYNTAX: service \ do-rpc "executer" set (service) ; -SYNTAX: mem-service \ mem-do-rpc "executer" set (service) ; \ No newline at end of file +SYNTAX: mem-service \ mem-do-rpc "executer" set (service) ; + +: change-global ( var quot -- ) [ [ get-global ] keep ] dip dip set-global ; inline + +load-vocab-hook [ + [ dup words>> values + \ mem-do-rpc "memoize" word-prop [ delete-at ] curry each ] +append ] change-global \ No newline at end of file diff --git a/extra/modules/uploads/uploads.factor b/extra/modules/uploads/uploads.factor new file mode 100644 index 0000000000..137a2c91d5 --- /dev/null +++ b/extra/modules/uploads/uploads.factor @@ -0,0 +1,5 @@ +USING: assocs modules.rpc-server vocabs +modules.remote-loading words ; +IN: modules.uploads service + +: upload-vocab ( word binary -- ) \ get-vocab "memoize" word-prop set-at ; \ No newline at end of file