/// <summary> /// Sends a message to the other party. /// </summary> public void SendInstantMessage(string message) { if (SelectedCall == null) { return; } SelectedCall.SendInstantMessage(MimeType.Text_Plain, message); }
/// <summary> /// Modifies the media channels of the selected phone call. /// </summary> public void ModifyCallType(CallType callType) { if (SelectedCall == null) { return; } SelectedCall.ModifyCallType(callType); }
/// <summary> /// Takes the selected call off hold. /// </summary> public void UnholdCall() { if (SelectedCall == null) { return; } SelectedCall.UnholdCall(); }
/// <summary> /// Rejects the selected incoming call. /// </summary> public void RejectCall() { if (SelectedCall == null) { return; } SelectedCall.Reject(); }
/// <summary> /// Hangs up the selected call. /// </summary> internal void HangUpCall() { if (SelectedCall == null) { return; } SelectedCall.HangUp(); }
/// <summary> /// Accepts the selected incoming call. /// </summary> public void AnswerCall() { if (SelectedCall == null) { return; } SelectedCall.Accept(CallType.AudioVideo); }
/// <summary> /// Starts the DTMF signalling. /// </summary> public void StartDtmfSignal(DtmfNamedEvents signal) { MediaHandlers.StartDtmf(signal); if (SelectedCall == null) { return; } SelectedCall.StartDTMFSignal(signal); }
/// <summary> /// Stops the DTMF singalling. /// </summary> internal void StopDtmfSignal(DtmfNamedEvents signal) { MediaHandlers.StopDtmf(signal); if (SelectedCall == null) { return; } SelectedCall.StopDTMFSignal(signal); }
/// <summary> /// Sends a message to the other party. /// </summary> public void SendInstantMessage(string message) { lock (_sync) { if (SelectedCall == null) { return; } SelectedCall.SendInstantMessage(message); } }
/// <summary> /// Puts on hold selected call. /// </summary> public void HoldCall() { lock (_sync) { if (SelectedCall == null) { return; } SelectedCall.Hold(); } }
/// <summary> /// Accepts the selected incoming call. /// </summary> public void AnswerCall() { lock (_sync) { if (SelectedCall == null) { return; } SelectedCall.Answer(CallType.AudioVideo); } }
/// <summary> /// Routes the selected call to another. /// </summary> public void AttendedTransfer(IPhoneCall targetCall) { if (SelectedCall == null) { return; } if (targetCall == null) { return; } SelectedCall.AttendedTransfer(targetCall); }
/// <summary> /// Routes the selected call to a third party. /// </summary> public void BlindTransfer(string target) { if (string.IsNullOrEmpty(target)) { return; } if (SelectedCall == null) { return; } SelectedCall.BlindTransfer(target); }
/// <summary> /// Forwards the selected incoming call. /// </summary> internal void ForwardCall(string target) { if (SelectedCall == null) { return; } if (!SelectedCall.IsIncoming) { return; } SelectedCall.ForwardCall(target); }
/// <summary> /// This will be called when the state of a call has changed. /// </summary> private void Call_CallStateChanged(object sender, VoIPEventArgs <CallState> e) { IPhoneCall call = sender as IPhoneCall; if (call == null) { return; } CallState state = e.Item; OnPhoneCallStateChanged(call); CheckStopRingback(); CheckStopRingtone(); // start ringtones if (state.IsRinging()) { if (call.IsIncoming) { MediaHandlers.StartRingtone(); } else { MediaHandlers.StartRingback(); } return; } // call has been answered if (state == CallState.Answered) { return; } // attach media to the selected call when the remote party sends media data if (state.IsRemoteMediaCommunication()) { if (SelectedCall.Equals(call)) { MediaHandlers.AttachAudio(call); MediaHandlers.AttachAudio(call); } return; } // detach media from the selected call in hold state or when the call has ended if (state == CallState.LocalHeld || state == CallState.InactiveHeld || state.IsCallEnded()) { if (SelectedCall.Equals(call)) { MediaHandlers.DetachAudio(); MediaHandlers.DetachVideo(); } } // call has ended, clean up if (state.IsCallEnded()) { DisposeCall(call); CallHistory.Add(call); PhoneCalls.Remove(call); return; } }