28 lines
		
	
	
		
			796 B
		
	
	
	
		
			Factor
		
	
	
		
		
			
		
	
	
			28 lines
		
	
	
		
			796 B
		
	
	
	
		
			Factor
		
	
	
|  | IN: rpc-example | ||
|  | REQUIRES: contrib/http-client contrib/calendar ;
 | ||
|  | USING: kernel hashtables xml-rpc xml calendar sequences | ||
|  |     arrays math httpd io http-client namespaces ;
 | ||
|  | 
 | ||
|  | : functions | ||
|  |     H{ { "add" [ + ] } | ||
|  |        { "subtract" [ - ] } | ||
|  |        { "multiply" [ * ] } | ||
|  |        { "divide" [ / ] } } ;
 | ||
|  | 
 | ||
|  | : apply-function ( name args -- {number} )
 | ||
|  |     >r functions hash r> first2 rot call 1array ;
 | ||
|  | 
 | ||
|  | : problem>solution ( xml-doc -- xml-doc )
 | ||
|  |     receive-rpc dup rpc-method-name swap rpc-method-params | ||
|  |     apply-function <rpc-response> send-rpc ;
 | ||
|  | 
 | ||
|  | : respond-rpc-arith ( -- )
 | ||
|  |     "raw-response" get
 | ||
|  |     string>xml problem>solution xml>string | ||
|  |     put-http-response ;
 | ||
|  | 
 | ||
|  | : test-rpc-arith | ||
|  |     "add" { 1 2 } <rpc-method> send-rpc xml>string | ||
|  |     "text/xml" swap "http://localhost:8080/responder/rpc/" | ||
|  |     http-post ;
 |