Distributed programming: Difference between revisions

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

edits