Routing events for request-response behavior
The events:
event Request { integer requestId; ... } 
event Response { integer requestId; ... }
The monitors:
monitor Client { 
   action doWork() { 
      //do some processing 
      ... 
      integer id := integer.getUnique(); 
      route Request(id, ... ); 
      Response r; 
      on Response(requestId=id):r { 
      // continue processing 
      ... 
      // Beware! Any code here will execute immediately 
      // (before processing the response) 
   } 
}
 
monitor Server { 
   action processRequests() { 
      Request r; 
      on all Request():r { 
         // evaluate response 
         route Response(r.id,...); 
      } 
   } 
}