internal AcdConferenceServicesAnchor(string conferenceUri, ApplicationEndpoint endpoint, AcdLogger logger)
 {
     _endpoint      = endpoint;
     _logger        = logger;
     _conferenceUri = conferenceUri;
     _state         = ConferenceServicesAnchorState.Idle;
     _conversation  = new Conversation(endpoint);
     _conversation.Impersonate("sip:" + Guid.NewGuid() + "@" + endpoint.DefaultDomain, null, null);
     _conversation.ApplicationContext = this;
 }
        /// <summary>
        /// Updates the state of the current AcdConferenceServicesAnchor
        /// </summary>
        private void UpdateState(ConferenceServicesAnchorState state)
        {
            ConferenceServicesAnchorState previousState = _state;

            lock (_syncRoot)
            {
                switch (state)
                {
                case ConferenceServicesAnchorState.Idle:
                    _state = state;
                    break;

                case ConferenceServicesAnchorState.Establishing:
                    if (_state == ConferenceServicesAnchorState.Idle)
                    {
                        _state = state;
                    }
                    break;

                case ConferenceServicesAnchorState.Established:
                    if (_state == ConferenceServicesAnchorState.Establishing)
                    {
                        _state = state;
                    }
                    break;

                case ConferenceServicesAnchorState.Terminating:
                    if ((_state != ConferenceServicesAnchorState.Terminating) &&
                        (_state != ConferenceServicesAnchorState.Terminated))
                    {
                        _state = state;
                    }
                    break;

                case ConferenceServicesAnchorState.Terminated:
                    if (_state == ConferenceServicesAnchorState.Terminating)
                    {
                        _state = state;
                    }
                    break;
                }
            }

            EventHandler <ConferenceServicesAnchorStateChangedEventArgs> handler = this.StateChanged;

            if (handler != null)
            {
                handler(this, new ConferenceServicesAnchorStateChangedEventArgs(previousState, state));
            }
        }
 internal ConferenceServicesAnchorStateChangedEventArgs(ConferenceServicesAnchorState previousState, ConferenceServicesAnchorState newState)
 {
     _previousState = previousState;
     _newState      = newState;
 }