44 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Factor
		
	
	
			
		
		
	
	
			44 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Factor
		
	
	
| ! Copyright (C) 2005 Chris Double. All Rights Reserved.
 | |
| ! See http://factorcode.org/license.txt for BSD license.
 | |
| USING: serialize sequences concurrency io io.server qualified
 | |
| threads arrays namespaces kernel ;
 | |
| QUALIFIED: io.sockets
 | |
| IN: concurrency.distributed
 | |
| 
 | |
| TUPLE: node hostname port ;
 | |
| 
 | |
| C: <node> node
 | |
| 
 | |
| : handle-node-client ( -- )
 | |
|     deserialize first2 get-process send ;
 | |
| 
 | |
| : node-server ( port -- )
 | |
|     internet-server
 | |
|     "concurrency"
 | |
|     [ handle-node-client ] with-server ;
 | |
| 
 | |
| : send-to-node ( msg pid  host port -- )
 | |
|     io.sockets:<inet> io.sockets:<client> [
 | |
|         2array serialize
 | |
|     ] with-stream ;
 | |
| 
 | |
| : localnode ( -- node )
 | |
|     \ localnode get ;
 | |
| 
 | |
| : start-node ( hostname port -- )
 | |
|     [ node-server ] in-thread
 | |
|     <node> \ localnode set-global ;
 | |
| 
 | |
| TUPLE: remote-process node pid ;
 | |
| 
 | |
| C: <remote-process> remote-process
 | |
| 
 | |
| M: remote-process send ( message process -- )
 | |
|     #! Send the message via the inter-node protocol
 | |
|     { remote-process-pid remote-process-node } get-slots
 | |
|     { node-hostname node-port } get-slots
 | |
|     send-to-node ;
 | |
| 
 | |
| M: process (serialize) ( obj -- )
 | |
|     localnode swap process-pid <remote-process> (serialize) ;
 |