private void ProcessAnswerCall(int lineNumber, bool isInternalCaller, bool enableAnswerDelay)
        {
            //if (!telecomProvider.IsLineInUse(lineNumber))
            //    return;

            if (!enableAnswerDelay || Properties.Settings.Default.AnswerTimeout == 0)
            {
                try
                {
                    if (telecomProvider.IsLineInUse(lineNumber))
                    {
                        telecomProvider.AnswerCall(lineNumber, isInternalCaller);
                    }
                }
                catch (Exception e)
                {
                    LoggingService.AddLogEntry(LogLevel.ErrorsOnly, Utils.ErrorUtils.FormatErrorString(e), true);
                }
            }
            else
            {
                if (Properties.Settings.Default.UseSleepForAnswerDelay)
                {
                    try
                    {
                        System.Threading.Thread.Sleep(Properties.Settings.Default.AnswerTimeout);

                        if (telecomProvider.IsLineInUse(lineNumber))
                        {
                            telecomProvider.AnswerCall(lineNumber, isInternalCaller);
                        }
                    }
                    catch (Exception e)
                    {
                        LoggingService.AddLogEntry(LogLevel.ErrorsOnly, Utils.ErrorUtils.FormatErrorString(e), true);
                    }
                }
                else
                {
                    AnswerTimeoutStruct ats = new AnswerTimeoutStruct();
                    ats.lineNumber       = lineNumber;
                    ats.telecomProvider  = telecomProvider;
                    ats.scriptService    = this;
                    ats.IsInternalCaller = isInternalCaller;

                    ats.answerTimer = new System.Threading.Timer(new System.Threading.TimerCallback(ProcessAnswerTimeoutProc), ats, Properties.Settings.Default.AnswerTimeout, System.Threading.Timeout.Infinite);
                }
            }
        }
        private static void ProcessAnswerTimeoutProc(object state)
        {
            AnswerTimeoutStruct ats = (AnswerTimeoutStruct)state;

            ats.answerTimer.Change(System.Threading.Timeout.Infinite, System.Threading.Timeout.Infinite);
            ats.answerTimer.Dispose();

            try
            {
                ats.telecomProvider.AnswerCall(ats.lineNumber, ats.IsInternalCaller);
            }
            catch (Exception e)
            {
                LoggingService.AddLogEntry(LogLevel.ErrorsOnly, Utils.ErrorUtils.FormatErrorString(e), true);
            }
        }
Example #3
0
        private void ProcessAnswerCall(int lineNumber, bool isInternalCaller, bool enableAnswerDelay)
        {
            //if (!telecomProvider.IsLineInUse(lineNumber))
            //    return;

            if (!enableAnswerDelay || Properties.Settings.Default.AnswerTimeout == 0)
            {
                try
                {
                    if (telecomProvider.IsLineInUse(lineNumber))
                    {
                        telecomProvider.AnswerCall(lineNumber, isInternalCaller);
                    }
                }
                catch(Exception e)
                {
                    LoggingService.AddLogEntry(LogLevel.ErrorsOnly, Utils.ErrorUtils.FormatErrorString(e), true);
                }
            }
            else
            {
                if (Properties.Settings.Default.UseSleepForAnswerDelay)
                {
                    try
                    {
                        System.Threading.Thread.Sleep(Properties.Settings.Default.AnswerTimeout);

                        if (telecomProvider.IsLineInUse(lineNumber))
                        {
                            telecomProvider.AnswerCall(lineNumber, isInternalCaller);
                        }
                    }
                    catch (Exception e)
                    {
                        LoggingService.AddLogEntry(LogLevel.ErrorsOnly, Utils.ErrorUtils.FormatErrorString(e), true);
                    }
                }
                else
                {
                    AnswerTimeoutStruct ats = new AnswerTimeoutStruct();
                    ats.lineNumber = lineNumber;
                    ats.telecomProvider = telecomProvider;
                    ats.scriptService = this;
                    ats.IsInternalCaller = isInternalCaller;

                    ats.answerTimer = new System.Threading.Timer(new System.Threading.TimerCallback(ProcessAnswerTimeoutProc), ats, Properties.Settings.Default.AnswerTimeout, System.Threading.Timeout.Infinite);
                }
            }
        }