Пример #1
0
        public void Handle <T>(DtmfTone tone, Func <DtmfTone, T> handleStart, Action <T, DtmfTone> handleEnd)
        {
            switch (currentState)
            {
            case State.NoDtmf:
                if (tone != DtmfTone.None)
                {
                    clientData   = handleStart(tone);
                    currentState = State.Dtmf;
                }
                break;

            case State.Dtmf:
                if (tone == DtmfTone.None)
                {
                    handleEnd((T)clientData, lastTone);
                    currentState = State.NoDtmf;
                }
                else if (tone != lastTone)
                {
                    handleEnd((T)clientData, lastTone);
                    clientData = handleStart(tone);
                }
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            lastTone = tone;
        }
Пример #2
0
 private static Tuple <int, int> KeyOf(DtmfTone t) => KeyOf(t.HighTone, t.LowTone);