no longer need to define a virtual ReceiveEvent method for each event