public int Subscribe <TMessage> (Action <TMessage> client, string channelID = "")
        {
            MessageChannel <TMessage> channel = GetMessageChannel <TMessage> (channelID);
            int ticket = channel.Subscribe(client);

            return(ticket);
        }
        public MessageChannel <TMessage> GetGenericChannel(string channelID)
        {
            MessageChannel <TMessage> channel;

            if (!Channels.TryGetValue(channelID, out channel))
            {
                Channels.Add(channelID, channel = new MessageChannel <TMessage>());
            }
            return(channel);
        }
        public void Invoke <TMessage> (TMessage message, string channelID = "")
        {
            MessageChannel <TMessage> channel = GetMessageChannel <TMessage> (channelID);

            channel.Invoke(message);
        }
        public void Unsubscribe <TMessage> (Action <TMessage> client, string channelID = "")
        {
            MessageChannel <TMessage> channel = GetMessageChannel <TMessage> (channelID);

            channel.LazyUnsubscribe(client);
        }
        public void Unsubscribe <TMessage> (int ticket, string channelID = "")
        {
            MessageChannel <TMessage> channel = GetMessageChannel <TMessage> (channelID);

            channel.Unsubscribe(ticket);
        }