public static void HandleEvent(BeamEventMessage eventMessage, string underlayingMessage)
        {
            switch (eventMessage.@event)
            {
            default:
                throw new NotImplementedException(eventMessage.@event);

            case "WelcomeEvent":
                SendLoginEvent();

                RelayEvent(EventHandlerTypes.WelcomeEvent, eventMessage, underlayingMessage);
                break;

            case "ChatMessage":
                RelayEvent(EventHandlerTypes.ChatMessageEvent, eventMessage, underlayingMessage);
                break;

            case "DeleteMessage":
                RelayEvent(EventHandlerTypes.DeleteMessage, eventMessage, underlayingMessage);
                break;

            case "PurgeMessage":
                RelayEvent(EventHandlerTypes.PurgeMessage, eventMessage, underlayingMessage);
                break;

            case "ClearMessages":
                RelayEvent(EventHandlerTypes.ClearMessages, eventMessage, underlayingMessage);
                break;

            case "UserUpdate":
                RelayEvent(EventHandlerTypes.UserUpdate, eventMessage, underlayingMessage);
                break;

            case "UserTimeout":
                RelayEvent(EventHandlerTypes.UserTimeout, eventMessage, underlayingMessage);
                break;

            // Because of some bizarre reasons, these are not documented to be a event.
            case "UserJoin":
                RelayEvent(EventHandlerTypes.UserJoin, eventMessage, underlayingMessage);
                break;

            case "UserLeave":
                RelayEvent(EventHandlerTypes.UserLeave, eventMessage, underlayingMessage);
                break;

            case "PollStart":
                RelayEvent(EventHandlerTypes.PollStart, eventMessage, underlayingMessage);
                break;

            case "PollEnd":
                RelayEvent(EventHandlerTypes.PollEnd, eventMessage, underlayingMessage);
                break;
            }
        }
 /// <summary>
 ///     Relays the event to all event functions.
 /// </summary>
 /// <param name="eventType">Type of the event.</param>
 /// <param name="eventMessage">The event message.</param>
 /// <param name="underlayingMessage">The underlaying message.</param>
 private static void RelayEvent(EventHandlerTypes eventType, BeamEventMessage eventMessage,
                                string underlayingMessage)
 {
     foreach (var handler in _eventHandlers)
     {
         if (handler.Value == eventType)
         {
             handler.Key(eventMessage, underlayingMessage);
         }
     }
 }