wait for response for x time, send a message by x time, or when response receive

Use millis().

Pseudo code:

timestamp = now
Repeat
{
if message received or (millis - timestamp)>interval
{
send message
}
}