include search, read, write from "socket://localhost:8002" preamble { starter: client } aioc { continue@client = true; while( continue )@client{ r@client = getInput( "Select operation: (S)earch, (R)ead, (W)rite, or (E)xit" ); if( r == "S" )@client{ s@client = getInput( "Insert search expression" ); // for logging purposes scope @client{ skip } prop { N.scopename = "log" } roles { logger }; // adapt the search protocol scope @logger{ search: client( s ) -> server( s ); res@server = search( s ); response: server( res ) -> client( res ) } prop{ N.scopename = "search" } roles { balancer, rserver }; notify: logger() -> client(); _r@client = show( res ) }; if( r == "R" )@client{ s@client = getInput( "Insert the page to read" ); // for logging purposes scope @client{ skip } prop { N.scopename = "log" } roles { logger }; // adapt the read protocol scope @logger{ read: client( s ) -> server( s ); res@server = read( s ); response: server( res ) -> client( res ) } prop { N.scopename = "read" } roles { balancer, rserver }; notify: logger() -> client(); _r@client = show( res ) }; if( r == "W" )@client{ s@client = getInput( "Insert the page and the content of the modification (page, content)" ); scope @client{ skip } prop { N.scopename = "log" } roles { logger }; scope @logger{ write: client( s ) -> server( s ); res@server = write( s ); response: server( res ) -> client( res ) } prop{ N.scopename = "write" } roles { balancer, rserver }; notify: logger() -> client(); _r@client = show( res ) }; if( r == "E" )@client{ continue@client = false }; if( r != "S" and r != "E" and r != "R" and r != "W" )@client{ r@client = show( "Insert command not valid" ) } } }