Distributed programming: Difference between revisions
Content added Content deleted
No edit summary |
|||
Line 1,177: | Line 1,177: | ||
use JSON::Fast ; |
use JSON::Fast ; |
||
sub MAIN( :$server='0.0.0.0' , :$port=3333 ) { |
sub MAIN( :$server='0.0.0.0' , :$port=3333 ) { |
||
my %db ; |
my %db ; |
||
react { |
react { |
||
whenever IO::Socket::Async.listen( $server , $port ) -> $conn { |
whenever IO::Socket::Async.listen( $server , $port ) -> $conn { |
||
whenever $conn.Supply.lines -> $line { |
whenever $conn.Supply.lines -> $line { |
||
my % |
my %response = 'status' => '' ; |
||
my $msg = from-json $line ; |
my $msg = from-json $line ; |
||
say $msg.perl ; |
say $msg.perl ; |
||
given $msg{"function"} { |
|||
when 'set' { |
|||
% |
%db{ $msg<topic> } = $msg<message> ; |
||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
%response<status> = 'ok' ; |
|||
⚫ | |||
⚫ | |||
%response = %db ; |
|||
} |
|||
when 'delete' { |
|||
%db{ $msg<topic> }:delete; |
|||
%response<status> = 'ok' ; |
|||
} |
|||
} |
} |
||
$conn.print( to-json(%response, :!pretty) ~ "\n" ) ; |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
$conn.print( to-json(%resonse, :!pretty) ~ "\n" ) ; |
|||
LAST { $conn.close ; } |
LAST { $conn.close ; } |
||
QUIT { default { $conn.close ; say "oh no, $_";}} |
QUIT { default { $conn.close ; say "oh no, $_";}} |
||
Line 1,202: | Line 1,208: | ||
} |
} |
||
} |
} |
||
} |
} |
||
}</lang> |
}</lang> |
||
client.p6: |
client.p6: |
||
Line 1,218: | Line 1,224: | ||
multi MAIN('get', $topic, :$server='localhost', :$port='3333') { |
multi MAIN('get', $topic, :$server='localhost', :$port='3333') { |
||
my %msg = function => 'get' , topic=> $topic ; |
my %msg = function => 'get' , topic=> $topic ; |
||
sendmsg( %msg , $server, $port) ; |
|||
} |
|||
multi MAIN('delete', $topic, :$server='localhost', :$port='3333') { |
|||
my %msg = function => 'delete' , topic=> $topic ; |
|||
sendmsg( %msg , $server, $port) ; |
sendmsg( %msg , $server, $port) ; |
||
} |
} |
||
Line 1,235: | Line 1,245: | ||
}</lang> |
}</lang> |
||
examples: |
examples: |
||
<lang perl6>echo '{"function":"set","topic":"push","message":["perl5","perl6","rakudo"]}' | nc localhost 3333 |
|||
⚫ | |||
⚫ | |||
{"status": "ok"} |
{"status": "ok"} |
||
./client.p6 get version |
./client.p6 get version |
||
Line 1,242: | Line 1,254: | ||
{"status": "ok"} |
{"status": "ok"} |
||
./client.p6 dump |
./client.p6 dump |
||
{"version": "perl6","mylist": ["one","two","three"]} |
{"push": ["perl5","perl6","rakudo"],"version": "perl6","mylist": ["one","two","three"]} |
||
./client.p6 delete version |
|||
{"status": "ok"} |
|||
server output: |
server output: |
||
${:function("set"), :message($["perl5", "perl6", "rakudo"]), :topic("push")} |
|||
${:function("set"), :message("perl6"), :topic("version")} |
${:function("set"), :message("perl6"), :topic("version")} |
||
${:function("get"), :topic("version")} |
${:function("get"), :topic("version")} |
||
${:function("set"), :message($["one", "two", "three"]), :topic("mylist")} |
${:function("set"), :message($["one", "two", "three"]), :topic("mylist")} |
||
${:function("dump")} |
${:function("dump")} |
||
${:function("delete"), :topic("version")} |
|||
</lang> |
</lang> |
||
=={{header|PicoLisp}}== |
=={{header|PicoLisp}}== |
||
===Server=== |
===Server=== |