示例#1
0
        private void HandleAccountArchiveMessage(vx_evt_base_t eventMessage)
        {
            vx_evt_account_archive_message_t evt = eventMessage;

            if (evt.account_handle != _accountHandle)
            {
                return;
            }

            DateTime parsedReceivedTime;

            if (!DateTime.TryParse(evt.time_stamp, out parsedReceivedTime))
            {
                VivoxDebug.Instance.DebugMessage($"{GetType().Name}: {eventMessage.GetType().Name} invalid message: Bad time format", vx_log_level.log_error);
                Debug.Assert(false);
                return;
            }

            var message = new AccountArchiveMessage()
            {
                LoginSession      = this,
                Key               = evt.message_id,
                MessageId         = evt.message_id,
                QueryId           = evt.query_id,
                ReceivedTime      = parsedReceivedTime,
                Message           = evt.message_body,
                Inbound           = (evt.is_inbound != 0),
                Language          = evt.language,
                RemoteParticipant = new AccountId(evt.participant_uri),
                Channel           = new ChannelId(evt.channel_uri)
            };

            _accountArchive.Enqueue(message);
        }
示例#2
0
        private void HandleSessionMessage(vx_evt_base_t eventMessage)
        {
            vx_evt_message_t evt = eventMessage;

            Debug.Assert(evt != null);
            if (evt.session_handle != _sessionHandle)
            {
                return;
            }

            var message = new ChannelTextMessage()
            {
                Sender = _participants.ContainsKey(evt.participant_uri) ?
                         _participants[evt.participant_uri].Account
                    : new AccountId(evt.participant_uri),
                Message                    = evt.message_body,
                ReceivedTime               = DateTime.Now,
                Key                        = _nextTextId++.ToString("D8"),
                ApplicationStanzaBody      = evt.application_stanza_body,
                ApplicationStanzaNamespace = evt.application_stanza_namespace,
                Language                   = evt.language,
                ChannelSession             = this,
                FromSelf                   = (evt.is_current_user != 0)
            };

            _messageLog.Enqueue(message);
        }
示例#3
0
        private void HandleSessionArchiveMessage(vx_evt_base_t eventMessage)
        {
            vx_evt_session_archive_message_t evt = eventMessage;

            Debug.Assert(evt != null);
            if (evt.session_handle != _sessionHandle)
            {
                return;
            }

            DateTime parsedReceivedTime;

            if (!DateTime.TryParse(evt.time_stamp, out parsedReceivedTime))
            {
                VivoxDebug.Instance.DebugMessage($"{GetType().Name}: {eventMessage.GetType().Name} invalid message: Bad time format", vx_log_level.log_error);
                Debug.Assert(false);
                return;
            }
            ChannelParticipant p = _participants[evt.participant_uri] as ChannelParticipant;

            var message = new SessionArchiveMessage()
            {
                ChannelSession = this,
                Key            = evt.message_id,
                MessageId      = evt.message_id,
                QueryId        = evt.query_id,
                ReceivedTime   = parsedReceivedTime,
                Sender         = p != null ? p.Account : new AccountId(evt.participant_uri),
                Message        = evt.message_body,
                FromSelf       = (evt.is_current_user != 0),
                Language       = evt.language
            };

            _sessionArchive.Enqueue(message);
        }
示例#4
0
    public vx_evt_base_t as_evt_base()
    {
        global::System.IntPtr cPtr = VivoxCoreInstancePINVOKE.vx_message_base_t_as_evt_base(swigCPtr);
        vx_evt_base_t         ret  = (cPtr == global::System.IntPtr.Zero) ? null : new vx_evt_base_t(cPtr, false);

        return(ret);
    }
示例#5
0
 private void OnEventMessageReceived(vx_evt_base_t eventMessage)
 {
     if (eventMessage.type == vx_event_type.evt_audio_device_hot_swap)
     {
         HandleDeviceHotSwap(eventMessage);
     }
 }
        private void HandleParticipantAdded(vx_evt_base_t eventMessage)
        {
            vx_evt_participant_added_t evt = eventMessage;

            Debug.Assert(evt != null);
            if (evt.session_handle != _sessionHandle)
            {
                return;
            }
            _participants[evt.participant_uri] = new ChannelParticipant(this, evt);
        }
示例#7
0
        private void HandleSubscription(vx_evt_base_t eventMessage)
        {
            vx_evt_subscription_t evt = eventMessage;

            Debug.Assert(evt != null);
            if (evt.account_handle != _accountHandle)
            {
                return;
            }
            _incomingSubscriptionRequests.Enqueue(new AccountId(evt.buddy_uri));
        }
示例#8
0
        private void HandleParticipantRemoved(vx_evt_base_t eventMessage)
        {
            vx_evt_participant_removed_t evt = eventMessage;

            Debug.Assert(evt != null);
            if (evt.session_handle != _sessionHandle)
            {
                return;
            }
            _participants.Remove(evt.participant_uri);
        }
示例#9
0
        private void HandleTTSInjectionEnded(vx_evt_base_t eventMessage)
        {
            vx_evt_tts_injection_ended_t evt = eventMessage;

            Debug.Assert(evt != null);
            TTSMessage matchingMessage = GetTTSMessageFromEvt(evt.utterance_id);

            if (null != matchingMessage)
            {
                _ttsMessages.Cleanup(matchingMessage);
            }
        }
示例#10
0
        private void HandleAccountLoginStateChangeEvt(vx_evt_base_t eventMessage)
        {
            vx_evt_account_login_state_change_t evt = eventMessage;

            Debug.Assert(evt != null);
            if (evt.account_handle != _accountHandle)
            {
                return;
            }
            // Using the property, since its setter includes triggering the PropertyChanged event
            State = (LoginState)evt.state;
        }
示例#11
0
        public void HandleMediaComplete(vx_evt_base_t eventMessage)
        {
            vx_evt_media_completion_t evt = eventMessage;

            Debug.Assert(evt != null);
            switch (evt.completion_type)
            {
            case vx_media_completion_type.sessiongroup_audio_injection:
                IsInjectingAudio = false;
                break;
            }
        }
示例#12
0
        private void HandleTTSInjectionFailed(vx_evt_base_t eventMessage)
        {
            vx_evt_tts_injection_failed_t evt = eventMessage;

            Debug.Assert(evt != null);
            TTSMessage matchingMessage = GetTTSMessageFromEvt(evt.utterance_id);

            if (null != matchingMessage)
            {
                _ttsMessages.Cleanup(matchingMessage);
                throw new VivoxApiException((int)evt.status);
            }
        }
示例#13
0
        private void HandleTTSInjectionStarted(vx_evt_base_t eventMessage)
        {
            vx_evt_tts_injection_started_t evt = eventMessage;

            Debug.Assert(evt != null);
            TTSMessage matchingMessage = GetTTSMessageFromEvt(evt.utterance_id);

            if (null != matchingMessage)
            {
                matchingMessage.NumConsumers = evt.num_consumers;
                matchingMessage.Duration     = evt.utterance_duration;
                matchingMessage.State        = TTSMessageState.Playing;
            }
        }
示例#14
0
        private void InstanceOnEventMessageReceived(vx_evt_base_t eventMessage)
        {
            if (_deleted)
            {
                return;
            }
            switch ((vx_event_type)eventMessage.type)
            {
            case vx_event_type.evt_participant_added:
                HandleParticipantAdded(eventMessage);
                break;

            case vx_event_type.evt_participant_removed:
                HandleParticipantRemoved(eventMessage);
                break;

            case vx_event_type.evt_participant_updated:
                HandleParticipantUpdated(eventMessage);
                break;

            case vx_event_type.evt_media_stream_updated:
                HandleMediaStreamUpdated(eventMessage);
                break;

            case vx_event_type.evt_text_stream_updated:
                HandleTextStreamUpdated(eventMessage);
                break;

            case vx_event_type.evt_session_removed:
                HandleSessionRemoved(eventMessage);
                break;

            case vx_event_type.evt_message:
                HandleSessionMessage(eventMessage);
                break;

            case vx_event_type.evt_session_archive_message:
                HandleSessionArchiveMessage(eventMessage);
                break;

            case vx_event_type.evt_session_archive_query_end:
                HandleSessionArchiveQueryEnd(eventMessage);
                break;

            case vx_event_type.evt_transcribed_message:
                HandleSessionTranscribedMessage(eventMessage);
                break;
            }
        }
示例#15
0
        private void HandleSessionRemoved(vx_evt_base_t eventMessage)
        {
            vx_evt_session_removed_t evt = eventMessage;

            Debug.Assert(evt != null);
            if (evt.session_handle != _sessionHandle)
            {
                return;
            }
            AudioState = ConnectionState.Disconnected;
            TextState  = ConnectionState.Disconnected;
            _participants.Clear();
            _typing = false;
            _messageLog.Clear();
        }
示例#16
0
        private void HandleAccountArchiveQueryEnd(vx_evt_base_t eventMessage)
        {
            vx_evt_account_archive_query_end_t evt = eventMessage;

            if (evt.account_handle != _accountHandle)
            {
                return;
            }

            if (_accountArchiveResult.QueryId != evt.query_id || !_accountArchiveResult.Running)
            {
                return;
            }
            _accountArchiveResult = new ArchiveQueryResult(evt);
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(AccountArchiveResult)));
        }
示例#17
0
        private void InstanceOnEventMessageReceived(vx_evt_base_t eventMessage)
        {
            switch ((vx_event_type)eventMessage.type)
            {
            case vx_event_type.evt_tts_injection_started:
                HandleTTSInjectionStarted(eventMessage);
                break;

            case vx_event_type.evt_tts_injection_ended:
                HandleTTSInjectionEnded(eventMessage);
                break;

            case vx_event_type.evt_tts_injection_failed:
                HandleTTSInjectionFailed(eventMessage);
                break;
            }
        }
示例#18
0
        private void HandleSessionArchiveQueryEnd(vx_evt_base_t eventMessage)
        {
            vx_evt_session_archive_query_end_t evt = eventMessage;

            Debug.Assert(evt != null);
            if (evt.session_handle != _sessionHandle)
            {
                return;
            }
            if (_sessionArchiveResult.QueryId != evt.query_id || !_sessionArchiveResult.Running)
            {
                return;
            }

            _sessionArchiveResult = new ArchiveQueryResult(evt);
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(SessionArchiveResult)));
        }
示例#19
0
 private void HandleDeviceHotSwap(vx_evt_base_t eventMessage)
 {
     BeginRefresh(new AsyncCallback((IAsyncResult result) =>
     {
         try
         {
             EndRefresh(result);
         }
         catch (Exception e)
         {
             VivoxDebug.Instance.VxExceptionMessage($"BeginRefresh failed: {e}");
             if (VivoxDebug.Instance.throwInternalExcepetions)
             {
                 throw;
             }
         }
     }));
 }
示例#20
0
        private void HandleTextStreamUpdated(vx_evt_base_t eventMessage)
        {
            vx_evt_text_stream_updated_t evt = eventMessage;

            Debug.Assert(evt != null);
            if (evt.session_handle != _sessionHandle)
            {
                return;
            }
            if (evt.state == vx_session_text_state.session_text_connected)
            {
                TextState = ConnectionState.Connected;
            }
            else if (evt.state == vx_session_text_state.session_text_disconnected)
            {
                TextState = ConnectionState.Disconnected;
            }
        }
示例#21
0
        private void HandleUserToUserMessage(vx_evt_base_t eventMessage)
        {
            vx_evt_user_to_user_message_t evt = eventMessage;

            if (evt.account_handle != _accountHandle)
            {
                return;
            }
            Debug.Assert(evt != null);
            _directedMessages.Enqueue(new DirectedTextMessage
            {
                ReceivedTime               = DateTime.Now,
                Message                    = evt.message_body,
                Sender                     = new AccountId(evt.from_uri),
                ApplicationStanzaBody      = evt.application_stanza_body,
                ApplicationStanzaNamespace = evt.application_stanza_namespace,
                Language                   = evt.language,
                LoginSession               = this
            });
        }
示例#22
0
        private void HandleBuddyPresenceEvt(vx_evt_base_t eventMessage)
        {
            vx_evt_buddy_presence_t evt = eventMessage;

            if (evt.account_handle != _accountHandle)
            {
                return;
            }

            var buddyAccount = new AccountId(evt.buddy_uri, evt.displayname);

            if (!_presenceSubscriptions.ContainsKey(buddyAccount))
            {
                return;
            }

            var subscription = (PresenceSubscription)_presenceSubscriptions[buddyAccount];

            subscription.UpdateLocation(evt.buddy_uri, (PresenceStatus)evt.presence,
                                        evt.custom_message);
        }
示例#23
0
        private void HandleAccountSendMessageFailed(vx_evt_base_t eventMessage)
        {
            vx_evt_account_send_message_failed_t evt = eventMessage;

            Debug.Assert(evt != null);
            AssertLoggedIn();
            if (evt.account_handle != _accountHandle)
            {
                return;
            }
            if (_directedMessageResult.RequestId != evt.request_id)
            {
                return;
            }
            _failedDirectedMessages.Enqueue(new FailedDirectedTextMessage
            {
                Sender     = new AccountId(evt.account_handle),
                RequestId  = evt.request_id,
                StatusCode = evt.status_code
            });
        }
示例#24
0
        private void HandleSessionTranscribedMessage(vx_evt_base_t eventMessage)
        {
            vx_evt_transcribed_message_t evt = eventMessage;

            Debug.Assert(evt != null);
            if (evt.session_handle != _sessionHandle)
            {
                return;
            }

            TranscribedMessage message = new TranscribedMessage(
                _participants.ContainsKey(evt.participant_uri) ? _participants[evt.participant_uri].Account : new AccountId(evt.participant_uri),
                evt.text,
                _nextTranscriptiontId++.ToString("D8"),
                evt.language,
                this,
                (evt.is_current_user != 0)
                );

            _transcribedLog.Enqueue(message);
        }
        private void HandleParticipantUpdated(vx_evt_base_t eventMessage)
        {
            vx_evt_participant_updated_t evt = eventMessage;

            Debug.Assert(evt != null);
            if (evt.session_handle != _sessionHandle)
            {
                return;
            }
            if (_participants.ContainsKey(evt.participant_uri))
            {
                ChannelParticipant p = _participants[evt.participant_uri] as ChannelParticipant;
                Debug.Assert(p != null);
                p.IsMutedForAll             = evt.is_moderator_muted != 0;
                p.SpeechDetected            = evt.is_speaking != 0;
                p.InAudio                   = (evt.active_media & 0x1) == 0x1;
                p.InText                    = (evt.active_media & 0x2) == 0x2;
                p.AudioEnergy               = evt.energy;
                p._internalVolumeAdjustment = evt.volume;
                p._internalMute             = evt.is_muted_for_me != 0;
            }
        }
示例#26
0
        private void Instance_EventMessageReceived(vx_evt_base_t eventMessage)
        {
            switch ((vx_event_type)eventMessage.type)
            {
            case vx_event_type.evt_account_login_state_change:
                HandleAccountLoginStateChangeEvt(eventMessage);
                break;

            case vx_event_type.evt_buddy_presence:
                HandleBuddyPresenceEvt(eventMessage);
                break;

            case vx_event_type.evt_user_to_user_message:
                HandleUserToUserMessage(eventMessage);
                break;

            case vx_event_type.evt_subscription:
                HandleSubscription(eventMessage);
                break;

            case vx_event_type.evt_account_archive_message:
                HandleAccountArchiveMessage(eventMessage);
                break;

            case vx_event_type.evt_account_archive_query_end:
                HandleAccountArchiveQueryEnd(eventMessage);
                break;

            case vx_event_type.evt_media_completion:
                HandleMediaComplete(eventMessage);
                break;

            case vx_event_type.evt_account_send_message_failed:
                HandleAccountSendMessageFailed(eventMessage);
                break;
            }
        }
示例#27
0
 internal static global::System.Runtime.InteropServices.HandleRef getCPtr(vx_evt_base_t obj)
 {
     return((obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr);
 }