| 
									
										
										
										
											2009-07-30 18:12:49 -04:00
										 |  |  | ! Copyright (C) 2009 Sam Anklesaria. | 
					
						
							|  |  |  | ! See http://factorcode.org/license.txt for BSD license. | 
					
						
							| 
									
										
										
										
											2009-08-03 23:29:02 -04:00
										 |  |  | 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-08-03 23:29:02 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-07-29 16:48:54 -04:00
										 |  |  | <PRIVATE
 | 
					
						
							|  |  |  | TUPLE: rpc-request args vocabspec wordname ;
 | 
					
						
							|  |  |  | SYMBOL: serving-vocabs serving-vocabs [ V{ } clone ] initialize
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-03 23:29:02 -04:00
										 |  |  | : 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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-03 23:29:02 -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>
 | 
					
						
							| 
									
										
										
										
											2009-08-01 16:18:24 -04:00
										 |  |  | SYNTAX: service current-vocab name>> serving-vocabs get-global adjoin ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-05 23:56:19 -04:00
										 |  |  | : start-rpc-server ( -- )
 | 
					
						
							|  |  |  |     binary <threaded-server> | 
					
						
							| 
									
										
										
										
											2009-08-03 23:29:02 -04:00
										 |  |  |     "rpcs" >>name 9012 >>insecure | 
					
						
							| 
									
										
										
										
											2009-08-04 00:12:34 -04:00
										 |  |  |     [ deserialize { | 
					
						
							|  |  |  |       { "getter" [ getter ] } | 
					
						
							|  |  |  |       {  "doer" [ doer ] } | 
					
						
							|  |  |  |       { "loader" [ deserialize vocab serialize flush ] }  | 
					
						
							| 
									
										
										
										
											2009-08-03 23:29:02 -04:00
										 |  |  |     } case ] >>handler | 
					
						
							| 
									
										
										
										
											2009-08-05 23:56:19 -04:00
										 |  |  |     start-server ;
 |