Why have two different methods?  I think it would be a lot simpler to always waitForReady.

Here's my proposed modification:
When the NetworkController receives a packet, it queues the event.  If the "busy" flag is not set, it processes the event.  When an event is being processed, the "busy" flag is set.  When the event has finished processing, unset the flag, and check for another event on the queue.

What do you think?