Canonical form for synchronous requests
The next example show the canonical form for when you want to code a pattern that specifies two or more synchronous requests.
The events:
event RequestA { integer requestId; ... }
event ResponseA { integer requestId; ... }
event RequestB { integer requestId; ... }
event ResponseB { integer requestId; ... }
The monitor:
monitor Client {
action doWork() {
//do some processing
integer requestId := integer.getUnique();
route RequestA(requestId,...);
ResponseA ra;
on ResponseA(id=requestId):ra doWork2(ra);
}
action doWork2(ResponseA ra) {
//do some more processing
integer requestId := integer.getUnique();
route RequestB(requestId,...);
Response rb;
on ResponseB(id=requestId):rb doWork3(rb);
}
action doWork3(ResponseB rb) {
//do yet more processing
}
}