/// <summary>
        /// Generate the necessary parameters
        /// </summary>
        public List <KeyValuePair <string, string> > GetParams()
        {
            var p = new List <KeyValuePair <string, string> >();

            if (ReservationStatus != null)
            {
                p.Add(new KeyValuePair <string, string>("ReservationStatus", ReservationStatus.ToString()));
            }

            if (WorkerActivitySid != null)
            {
                p.Add(new KeyValuePair <string, string>("WorkerActivitySid", WorkerActivitySid.ToString()));
            }

            if (Instruction != null)
            {
                p.Add(new KeyValuePair <string, string>("Instruction", Instruction));
            }

            if (DequeuePostWorkActivitySid != null)
            {
                p.Add(new KeyValuePair <string, string>("DequeuePostWorkActivitySid", DequeuePostWorkActivitySid.ToString()));
            }

            if (DequeueFrom != null)
            {
                p.Add(new KeyValuePair <string, string>("DequeueFrom", DequeueFrom));
            }

            if (DequeueRecord != null)
            {
                p.Add(new KeyValuePair <string, string>("DequeueRecord", DequeueRecord));
            }

            if (DequeueTimeout != null)
            {
                p.Add(new KeyValuePair <string, string>("DequeueTimeout", DequeueTimeout.ToString()));
            }

            if (DequeueTo != null)
            {
                p.Add(new KeyValuePair <string, string>("DequeueTo", DequeueTo));
            }

            if (DequeueStatusCallbackUrl != null)
            {
                p.Add(new KeyValuePair <string, string>("DequeueStatusCallbackUrl", Serializers.Url(DequeueStatusCallbackUrl)));
            }

            if (CallFrom != null)
            {
                p.Add(new KeyValuePair <string, string>("CallFrom", CallFrom));
            }

            if (CallRecord != null)
            {
                p.Add(new KeyValuePair <string, string>("CallRecord", CallRecord));
            }

            if (CallTimeout != null)
            {
                p.Add(new KeyValuePair <string, string>("CallTimeout", CallTimeout.ToString()));
            }

            if (CallTo != null)
            {
                p.Add(new KeyValuePair <string, string>("CallTo", CallTo));
            }

            if (CallUrl != null)
            {
                p.Add(new KeyValuePair <string, string>("CallUrl", Serializers.Url(CallUrl)));
            }

            if (CallStatusCallbackUrl != null)
            {
                p.Add(new KeyValuePair <string, string>("CallStatusCallbackUrl", Serializers.Url(CallStatusCallbackUrl)));
            }

            if (CallAccept != null)
            {
                p.Add(new KeyValuePair <string, string>("CallAccept", CallAccept.Value.ToString().ToLower()));
            }

            if (RedirectCallSid != null)
            {
                p.Add(new KeyValuePair <string, string>("RedirectCallSid", RedirectCallSid.ToString()));
            }

            if (RedirectAccept != null)
            {
                p.Add(new KeyValuePair <string, string>("RedirectAccept", RedirectAccept.Value.ToString().ToLower()));
            }

            if (RedirectUrl != null)
            {
                p.Add(new KeyValuePair <string, string>("RedirectUrl", Serializers.Url(RedirectUrl)));
            }

            if (To != null)
            {
                p.Add(new KeyValuePair <string, string>("To", To));
            }

            if (From != null)
            {
                p.Add(new KeyValuePair <string, string>("From", From));
            }

            if (StatusCallback != null)
            {
                p.Add(new KeyValuePair <string, string>("StatusCallback", Serializers.Url(StatusCallback)));
            }

            if (StatusCallbackMethod != null)
            {
                p.Add(new KeyValuePair <string, string>("StatusCallbackMethod", StatusCallbackMethod.ToString()));
            }

            if (StatusCallbackEvent != null)
            {
                p.AddRange(StatusCallbackEvent.Select(prop => new KeyValuePair <string, string>("StatusCallbackEvent", prop.ToString())));
            }

            if (Timeout != null)
            {
                p.Add(new KeyValuePair <string, string>("Timeout", Timeout.ToString()));
            }

            if (Record != null)
            {
                p.Add(new KeyValuePair <string, string>("Record", Record.Value.ToString().ToLower()));
            }

            if (Muted != null)
            {
                p.Add(new KeyValuePair <string, string>("Muted", Muted.Value.ToString().ToLower()));
            }

            if (Beep != null)
            {
                p.Add(new KeyValuePair <string, string>("Beep", Beep));
            }

            if (StartConferenceOnEnter != null)
            {
                p.Add(new KeyValuePair <string, string>("StartConferenceOnEnter", StartConferenceOnEnter.Value.ToString().ToLower()));
            }

            if (EndConferenceOnExit != null)
            {
                p.Add(new KeyValuePair <string, string>("EndConferenceOnExit", EndConferenceOnExit.Value.ToString().ToLower()));
            }

            if (WaitUrl != null)
            {
                p.Add(new KeyValuePair <string, string>("WaitUrl", Serializers.Url(WaitUrl)));
            }

            if (WaitMethod != null)
            {
                p.Add(new KeyValuePair <string, string>("WaitMethod", WaitMethod.ToString()));
            }

            if (EarlyMedia != null)
            {
                p.Add(new KeyValuePair <string, string>("EarlyMedia", EarlyMedia.Value.ToString().ToLower()));
            }

            if (MaxParticipants != null)
            {
                p.Add(new KeyValuePair <string, string>("MaxParticipants", MaxParticipants.ToString()));
            }

            if (ConferenceStatusCallback != null)
            {
                p.Add(new KeyValuePair <string, string>("ConferenceStatusCallback", Serializers.Url(ConferenceStatusCallback)));
            }

            if (ConferenceStatusCallbackMethod != null)
            {
                p.Add(new KeyValuePair <string, string>("ConferenceStatusCallbackMethod", ConferenceStatusCallbackMethod.ToString()));
            }

            if (ConferenceStatusCallbackEvent != null)
            {
                p.AddRange(ConferenceStatusCallbackEvent.Select(prop => new KeyValuePair <string, string>("ConferenceStatusCallbackEvent", prop.ToString())));
            }

            if (ConferenceRecord != null)
            {
                p.Add(new KeyValuePair <string, string>("ConferenceRecord", ConferenceRecord));
            }

            if (ConferenceTrim != null)
            {
                p.Add(new KeyValuePair <string, string>("ConferenceTrim", ConferenceTrim));
            }

            if (RecordingChannels != null)
            {
                p.Add(new KeyValuePair <string, string>("RecordingChannels", RecordingChannels));
            }

            if (RecordingStatusCallback != null)
            {
                p.Add(new KeyValuePair <string, string>("RecordingStatusCallback", Serializers.Url(RecordingStatusCallback)));
            }

            if (RecordingStatusCallbackMethod != null)
            {
                p.Add(new KeyValuePair <string, string>("RecordingStatusCallbackMethod", RecordingStatusCallbackMethod.ToString()));
            }

            if (ConferenceRecordingStatusCallback != null)
            {
                p.Add(new KeyValuePair <string, string>("ConferenceRecordingStatusCallback", Serializers.Url(ConferenceRecordingStatusCallback)));
            }

            if (ConferenceRecordingStatusCallbackMethod != null)
            {
                p.Add(new KeyValuePair <string, string>("ConferenceRecordingStatusCallbackMethod", ConferenceRecordingStatusCallbackMethod.ToString()));
            }

            if (Region != null)
            {
                p.Add(new KeyValuePair <string, string>("Region", Region));
            }

            if (SipAuthUsername != null)
            {
                p.Add(new KeyValuePair <string, string>("SipAuthUsername", SipAuthUsername));
            }

            if (SipAuthPassword != null)
            {
                p.Add(new KeyValuePair <string, string>("SipAuthPassword", SipAuthPassword));
            }

            if (DequeueStatusCallbackEvent != null)
            {
                p.AddRange(DequeueStatusCallbackEvent.Select(prop => new KeyValuePair <string, string>("DequeueStatusCallbackEvent", prop)));
            }

            if (PostWorkActivitySid != null)
            {
                p.Add(new KeyValuePair <string, string>("PostWorkActivitySid", PostWorkActivitySid.ToString()));
            }

            if (EndConferenceOnCustomerExit != null)
            {
                p.Add(new KeyValuePair <string, string>("EndConferenceOnCustomerExit", EndConferenceOnCustomerExit.Value.ToString().ToLower()));
            }

            if (BeepOnCustomerEntrance != null)
            {
                p.Add(new KeyValuePair <string, string>("BeepOnCustomerEntrance", BeepOnCustomerEntrance.Value.ToString().ToLower()));
            }

            return(p);
        }
Exemple #2
0
 /// <summary>
 /// 超时信息
 /// </summary>
 /// <param name="callTimeout"></param>
 public void Notify(CallTimeout callTimeout)
 {
     _innerListener.Push(callTimeout);
 }
        /// <summary>
        /// 调用事件信息
        /// </summary>
        /// <param name="callArgs"></param>
        public void Notify(CallEventArgs callArgs)
        {
            if (_listeners.Count == 0)
            {
                return;
            }

            MessageListener[] listeners = _listeners.ToArray();
            foreach (MessageListener lstn in listeners)
            {
                try
                {
                    if ((lstn.Apps.Count == 0 || lstn.Apps.Any(p => string.Compare(p, callArgs.Caller.AppName, true) == 0)) &&
                        (lstn.Types.Count == 0 || lstn.Types.Any(p => string.Compare(p, callArgs.Caller.ServiceName, true) == 0)))
                    {
                        var options = lstn.Options;
                        if (options.PushCallError && callArgs.IsError)
                        {
                            var callError = new CallError
                            {
                                Caller    = callArgs.Caller,
                                Message   = callArgs.Error.Message,
                                Error     = ErrorHelper.GetErrorWithoutHtml(callArgs.Error),
                                HtmlError = ErrorHelper.GetHtmlError(callArgs.Error)
                            };

                            lstn.Notify(callError);
                        }

                        if (options.PushCallTimeout && !callArgs.IsError)
                        {
                            //如果设定的时间不正确,不进行推送
                            if (options.CallTimeout <= 0 &&
                                options.CallRowCount <= 0)
                            {
                                continue;
                            }

                            if (callArgs.ElapsedTime > options.CallTimeout * 1000 ||
                                callArgs.Count > options.CallRowCount)
                            {
                                var callTimeout = new CallTimeout
                                {
                                    Caller      = callArgs.Caller,
                                    Count       = callArgs.Count,
                                    ElapsedTime = callArgs.ElapsedTime
                                };

                                lstn.Notify(callTimeout);
                            }
                        }
                    }
                }
                catch (SocketException ex)
                {
                    RemoveListener(lstn);
                }
                catch (Exception ex)
                {
                    if (OnError != null)
                    {
                        OnError(ex);
                    }
                }
            }
        }