'Publish the message into all listeners of the event.
If event_name is a string, we send the message to all event handlers which
contain this string in their EVENT static member. This allows the event to
be sent to multiple interested listeners. Alternatively, the event_name can
specify a single URN of an event listener to receive the message.
Args:
event_name: Either a URN of an event listener or an event name.
msg: The message to send to the event handler.
delay: An rdfvalue.Duration object. If given, the event will be published
after the indicated time.
token: ACL token.
Raises:
ValueError: If the message is invalid. The message must be a Semantic
Value (instance of RDFValue) or a full GrrMessage.'

@classmethod
def PublishEvent(cls, event_name, msg, delay=None, token=None):

    cls.PublishMultipleEvents({event_name: [msg]}, delay=delay, token=token)
