public void Unsubscribe(string key, PubSubListener listener)
    {
        if (!listeners.ContainsKey(key))
        {
            return;
        }

        listeners[key].Remove(listener);
    }
    public void Subscribe(string key, PubSubListener listener)
    {
        if (!listeners.ContainsKey(key))
        {
            listeners[key] = new HashSet <PubSubListener>();
        }

        listeners[key].Add(listener);
    }