28 lines
		
	
	
		
			771 B
		
	
	
	
		
			Factor
		
	
	
			
		
		
	
	
			28 lines
		
	
	
		
			771 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} )
 | |
|     [ functions hash ] dip 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
 | |
|     "http://localhost:8080/responder/rpc/"
 | |
|     http-post ;
 |