Implementations should use sound events, which will be dispatched in the correct order.
Even though most vail messages only have one duration, it is valid to have more than one duration. Use soundevent.detail.duration to obtain the duration of the sound your client should currently consider.
Clients events are dispatched whenever the number of connected clients changes.
Message events are "raw" events. They may arrive out of order, and can have multiple durations. The Vail class parses these into properly-sequenced "sound" events.