2012-02-09 13 views
6

Sto provando a rilevare una chiamata in arrivo nel client Lync. Questo viene fatto mediante la sottoscrizione di evento ConversationManager.ConversationAdded nel client Lync come descritto nella this postRilevamento di una chiamata in arrivo in Lync

Tuttavia, utilizzando questo metodo non sono in grado di rilevare le chiamate in arrivo, se una finestra di conversazione con il chiamante è già aperto prima del chiamante sta chiamando. Ad esempio se sto chattando con un amico e quindi ho una finestra di conversazione aperta e questo amico decide di chiamarmi, l'evento ConversationAdded non viene attivato.

Come posso rilevare le chiamate in arrivo quando ho già una conversazione attiva con il chiamante?

Grazie, Nicklas

risposta

5

Si dovrebbe sottoscrivere l'evento ModalityStateChanged su Conversation.Modalities [ModalityTypes.AudioVideo], questo vi darà eventi quando la modalità AV viene creato o cambi di stato.

8

È necessario monitorare gli stati delle modalità della conversazione. Le due modalità sono avaiable IM e AV, quindi avrai bisogno di guardare per cambiamenti di stato su questi, in questo modo:

void ConversationManager_ConversationAdded(object sender, Microsoft.Lync.Model.Conversation.ConversationManagerEventArgs e) 
{ 
    e.Conversation.Modalities[ModalityTypes.InstantMessage].ModalityStateChanged += IMModalityStateChanged; 
    e.Conversation.Modalities[ModalityTypes.AudioVideo].ModalityStateChanged += AVModalityStateChanged; 
} 

void IMModalityStateChanged(object sender, ModalityStateChangedEventArgs e) 
{ 
    if (e.NewState == ModalityState.Connected) 
     MessageBox.Show("IM Modality Connected"); 
} 

void AVModalityStateChanged(object sender, ModalityStateChangedEventArgs e) 
{ 
    if (e.NewState == ModalityState.Connected) 
     MessageBox.Show("AV Modality Connected"); 
} 

Questo esempio utilizza l'evento ConversationAdded per cablare i gestori di eventi per i cambiamenti di modalità, in modo questo funzionerà solo per le conversazioni avviate mentre l'applicazione è in esecuzione. Per fare lo stesso per le conversazioni che sono già attive prima dell'avvio dell'applicazione, è possibile aggiungere questo codice alla routine di avvio dell'applicazione:

foreach (var conv in _lync.ConversationManager.Conversations) 
{ 
    conv.Modalities[ModalityTypes.InstantMessage].ModalityStateChanged += new EventHandler<ModalityStateChangedEventArgs>(IMModalityStateChanged); 
    conv.Modalities[ModalityTypes.AudioVideo].ModalityStateChanged += new EventHandler<ModalityStateChangedEventArgs>(AVModalityStateChanged); 
}