event OBUFound { integer id; } event OBUData { integer id; float payment; } event DSRCReceived { integer id; } event DSRCError { integer id; } monitor DSRCHandler { float TIMEOUT := 1.0; action onload() { OBUFound obuFound; on all OBUFound() : obuFound spawn obuFoundThread(obuFound); } action obuFoundThread(OBUFound obuFound) { OBUData obuData; on OBUData(id = obuFound.id) : obuData within (TIMEOUT) { route DSRCReceived(obuData.id); } on wait(TIMEOUT) and not OBUData(id = obuFound.id) { route DSRCError(obuFound.id); } } }