static public void When(string name, Action <dynamic> action)
    {
        dynamic    dt  = new {};
        RefDynamic dta = new RefDynamic(ref dt);

        Instance.StartCoroutine(WhenUpdate(dta, action));
        socket.On(name, (d) => {
            var data  = d as dynamic;
            dt        = data;
            dta.value = dt;
            dta.times++;
            // action(data);
        });
    }
    static public IEnumerator WhenUpdate(RefDynamic dt, Action <dynamic> action)
    {
        int lastTimes = 0;

        while (true)
        {
            if (lastTimes != dt.times)
            {
                lastTimes = dt.times;
                action(dt.value);
            }
            yield return(null);
        }
        yield return(null);
    }