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) ;
|