public static CallPartyChanged GetInstance()
 {
     if (_partyChangedObject == null)
     {
         _partyChangedObject = new CallPartyChanged();
     }
     return(_partyChangedObject);
 }
Example #2
0
        public void ReceiveCalls(IMessage events, TimeSpan?callDuration = null)
        {
            try
            {
                if (Settings.SFDCOptions.SFDCPopupPages != null)
                {
                    if (events != null)
                    {
                        try
                        {
                            this._logger.Info("ReceiveCalls: Voice Event Received : " + events.ToString());
                        }
                        catch
                        {
                            this._logger.Error("Error occurred while printing Voice Event in Log");
                        }
                        switch (events.Id)
                        {
                            #region EventRinging

                        case EventRinging.MessageId:
                            _eventRinging    = (EventRinging)events;
                            IsCallTransfered = false;
                            ConsultText      = string.Empty;
                            if (_eventRinging.UserData != null && _eventRinging.UserData.ContainsKey(Settings.SFDCOptions.ConsultAttachDataKey))
                            {
                                IsCallTransfered = true;
                                ConsultText      = _eventRinging.UserData.GetAsString(Settings.SFDCOptions.ConsultAttachDataKey);
                                this._logger.Info("EventRinging : Consult Attach data key found for the ConnId :" + _eventRinging.ConnID.ToString() + " value : " + ConsultText);
                            }

                            if (_eventRinging.CallType == CallType.Inbound)
                            {
                                if (!IsCallTransfered)
                                {
                                    _isConsultCallReceived = false;
                                    CallRinging.GetInstance().PopupRecords(_eventRinging, SFDCCallType.InboundVoice);
                                }
                                else
                                {
                                    _isConsultCallReceived = true;
                                    this._consultConnId    = _eventRinging.ConnID.ToString();
                                    CallRinging.GetInstance().PopupRecords(_eventRinging, SFDCCallType.ConsultVoiceReceived);
                                }
                            }
                            else if (_eventRinging.CallType == CallType.Consult)
                            {
                                _isConsultCallReceived = true;
                                CallRinging.GetInstance().PopupRecords(_eventRinging, SFDCCallType.ConsultVoiceReceived);
                            }
                            else if (_eventRinging.CallType == CallType.Outbound)
                            {
                                if (IsCallTransfered)
                                {
                                    _isConsultCallReceived = true;
                                    this._consultConnId    = _eventRinging.ConnID.ToString();
                                    CallRinging.GetInstance().PopupRecords(_eventRinging, SFDCCallType.ConsultVoiceReceived);
                                }
                            }
                            break;

                            #endregion EventRinging

                            #region EventPartyChanged

                        case EventPartyChanged.MessageId:
                            EventPartyChanged partyChanged = (EventPartyChanged)events;
                            _isConsultCallReceived = true;
                            if (_callDurationData.ContainsKey(partyChanged.PreviousConnID.ToString()) && !_callDurationData.ContainsKey(partyChanged.ConnID.ToString()))
                            {
                                _callDurationData.Add(partyChanged.ConnID.ToString(), _callDurationData[partyChanged.PreviousConnID.ToString()]);
                            }
                            if (Settings.UpdateSFDCLog.ContainsKey(partyChanged.PreviousConnID.ToString()))
                            {
                                if (!Settings.UpdateSFDCLog.ContainsKey(partyChanged.ConnID.ToString()))
                                {
                                    Settings.UpdateSFDCLog.Add(partyChanged.ConnID.ToString(), Settings.UpdateSFDCLog[partyChanged.PreviousConnID.ToString()]);
                                }
                                else
                                {
                                    Settings.UpdateSFDCLog[partyChanged.ConnID.ToString()] = Settings.UpdateSFDCLog[partyChanged.PreviousConnID.ToString()];
                                }
                            }
                            this._consultConnId = partyChanged.ConnID.ToString();

                            if (partyChanged.UserData != null && partyChanged.UserData.ContainsKey(Settings.SFDCOptions.ConsultAttachDataKey))
                            {
                                IsCallTransfered = true;
                                ConsultText      = partyChanged.UserData.GetAsString(Settings.SFDCOptions.ConsultAttachDataKey);
                                this._logger.Info("PartyChanged : Consult Attach data key found for the ConnId :" + partyChanged.ConnID.ToString() + " value : " + ConsultText);
                            }

                            string duration = "0 Hr 0 Mins 0 Secs";
                            if (_callDurationData.ContainsKey(partyChanged.ConnID.ToString()))
                            {
                                TimeSpan ts = System.DateTime.Now.Subtract(_callDurationData[partyChanged.ConnID.ToString()]);
                                duration = ts.Hours + " Hr " + ts.Minutes + " Mins " + ts.Seconds + " Secs";
                            }
                            CallPartyChanged.GetInstance().PopupRecords(partyChanged, SFDCCallType.ConsultVoiceReceived, duration);
                            break;

                            #endregion EventPartyChanged

                            #region EventDialing

                        case EventDialing.MessageId:
                            _eventDialing = (EventDialing)events;
                            if (Settings.SFDCListener.Click2EmailData.ContainsKey("ClickToDial"))
                            {
                                //Settings.ClickToDialData.Add(_eventDialing.ConnID.ToString(), _eventDialing.Reasons.GetAsString("ClickToDial"));
                                Settings.ClickToDialData.Add(_eventDialing.ConnID.ToString(), Settings.SFDCListener.Click2EmailData["ClickToDial"]);
                                Settings.SFDCListener.Click2EmailData.Clear();
                            }
                            if (_eventDialing.CallType == CallType.Unknown || _eventDialing.CallType == CallType.Outbound)
                            {
                                CallDialing.GetInstance().PopupRecords(_eventDialing, SFDCCallType.OutboundVoiceSuccess);
                            }

                            break;

                            #endregion EventDialing

                            #region EventEstablished

                        case EventEstablished.MessageId:

                            eventEstablished = (EventEstablished)events;
                            if (!_callDurationData.ContainsKey(eventEstablished.ConnID.ToString()))
                            {
                                _callDurationData.Add(eventEstablished.ConnID.ToString(), System.DateTime.Now);
                            }
                            if (eventEstablished.CallType == CallType.Inbound)
                            {
                                if (_isConsultCallReceived)
                                {
                                    CallConnected.GetInstance().PopupRecords(eventEstablished, SFDCCallType.ConsultVoiceReceived);
                                }
                                else
                                {
                                    CallConnected.GetInstance().PopupRecords(eventEstablished, SFDCCallType.InboundVoice);
                                }
                            }
                            else if (eventEstablished.CallType == CallType.Unknown || eventEstablished.CallType == CallType.Outbound)
                            {
                                if (_isConsultCallReceived)
                                {
                                    CallConnected.GetInstance().PopupRecords(eventEstablished, SFDCCallType.ConsultVoiceReceived);
                                }
                                else
                                {
                                    CallConnected.GetInstance().PopupRecords(eventEstablished, SFDCCallType.OutboundVoiceSuccess);
                                }
                            }
                            else if (eventEstablished.CallType == CallType.Consult)
                            {
                                if (_isConsultCallReceived)
                                {
                                    CallConnected.GetInstance().PopupRecords(eventEstablished, SFDCCallType.ConsultVoiceReceived);
                                }
                            }
                            break;

                            #endregion EventEstablished

                            #region EventReleased

                        case EventReleased.MessageId:

                            _eventReleased = (EventReleased)events;
                            this._logger.Info("Event Release Call State: " + _eventReleased.CallState.ToString());
                            if (_eventReleased.CallState != 22)
                            {
                                if (Settings.SFDCOptions.CanUseGenesysCallDuration && callDuration != null)
                                {
                                    _callDuration = callDuration.Value.Hours + " Hr " + callDuration.Value.Minutes + " Mins " + callDuration.Value.Seconds + " Secs";;
                                    this._logger.Info("ConnectionId : " + _eventReleased.ConnID.ToString() + " Call duration is " + _callDuration);
                                }
                                else if (_callDurationData.ContainsKey(_eventReleased.ConnID.ToString()))
                                {
                                    TimeSpan ts = System.DateTime.Now.Subtract(_callDurationData[_eventReleased.ConnID.ToString()]);
                                    _callDuration = ts.Hours + " Hr " + ts.Minutes + " Mins " + ts.Seconds + " Secs";
                                    this._logger.Info("ConnectionId : " + _eventReleased.ConnID.ToString() + " Call duration is " + _callDuration);

                                    if (!FinishedCallDuration.ContainsKey(_eventReleased.ConnID.ToString()))
                                    {
                                        FinishedCallDuration.Add(_eventReleased.ConnID.ToString(), _callDuration);
                                    }
                                    else
                                    {
                                        FinishedCallDuration[_eventReleased.ConnID.ToString()] = _callDuration;
                                    }
                                }
                                else
                                {
                                    _callDuration = "0 Hr 0 Mins 0 Secs";
                                    this._logger.Info("Call duration not found for the connection Id : " + _eventReleased.ConnID.ToString());
                                }
                                HandleReleaseEvent(_eventReleased, _callDuration);
                            }
                            else
                            {
                                this._logger.Info("The call has been rejected for the connectionId : " + _eventReleased.ConnID.ToString());
                                HandleCallRejected(_eventReleased, "0 Hr 0 Mins 0 Secs");
                            }

                            break;

                            #endregion EventReleased

                            #region EventError

                        case EventError.MessageId:
                            EventError eventError = (EventError)events;
                            this._logger.Info("EventError occurred for the connectionId : " + eventError.ConnID.ToString());
                            if (eventError.CallType == CallType.Outbound)
                            {
                                CallEventError.GetInstance().PopupRecords(eventError, SFDCCallType.OutboundVoiceFailure);
                            }

                            break;

                            #endregion EventError

                            #region EventAbandoned

                        case EventAbandoned.MessageId:
                            EventAbandoned eventAbandoned = (EventAbandoned)events;
                            this._logger.Info("EventAbandoned occurred for the connectionId : " + eventAbandoned.ConnID.ToString());
                            if (eventAbandoned.CallType == CallType.Outbound)
                            {
                                CallEventAbandoned.GetInstance().PopupRecords(eventAbandoned, SFDCCallType.OutboundVoiceFailure);
                            }

                            break;

                            #endregion EventAbandoned

                            #region EventDestinationBusy

                        case EventDestinationBusy.MessageId:
                            EventDestinationBusy destinationBusyEvent = (EventDestinationBusy)events;
                            this._logger.Info("EventDestinationBusy occurred for the connectionId : " + destinationBusyEvent.ConnID.ToString());
                            if (destinationBusyEvent.CallType == CallType.Outbound)
                            {
                                CallEventDestinationBusy.GetInstance().PopupRecords(destinationBusyEvent, SFDCCallType.OutboundVoiceFailure);
                            }

                            break;

                            #endregion EventDestinationBusy

                        default:
                            _logger.Info("ReceiveCalls: Unhandled Event " + events.Name);
                            break;
                        }
                    }
                }
            }
            catch (Exception generalException)
            {
                _logger.Error("ReceiveCalls: Error occurred while receiving voice events " + generalException.ToString());
            }
        }