Maybe implement a synced version of all senders (or the ones where they are needed), using a common virtual base class, implementing the basic features.
If the parser reads the message and afterwards the end is not reached, the parser should have the option to check if the end was reached, after reading.