/// <summary> /// 拨号或者接听 /// </summary> /// <param name="number"></param> public void PickUp(string number) { // accept incoming call if (call != null && call.IsIncoming) { RaiseMessage?.Invoke("Talking"); call.Answer(); return; } // dial if (call != null) { return; } if (string.IsNullOrEmpty(number)) { return; } if (phoneLine.RegState != RegState.RegistrationSucceeded) { RaiseMessage?.Invoke("Phone line must be registered!"); return; } call = softPhone.CreateCallObject(phoneLine, number); SubscribeToCallEvents(call); call.Start(); RaiseMessage?.Invoke($"Calling {number}"); }
private void call_CallStateChanged(object sender, CallStateChangedArgs e) { switch (e.State) { case CallState.Ringing: StateChanged?.Invoke(PhoneState.Ringing); break; case CallState.InCall: StateChanged?.Invoke(PhoneState.InCall); break; default: StateChanged?.Invoke(PhoneState.Other); break; } RaiseMessage?.Invoke(e.State.ToString()); if (e.State == CallState.Answered) { if (microphone != null) { microphone.Start(); } if (speaker != null) { speaker.Start(); } mediaSender.AttachToCall(call); mediaReceiver.AttachToCall(call); return; } if (e.State.IsCallEnded()) { if (microphone != null) { microphone.Stop(); } if (speaker != null) { speaker.Stop(); } mediaSender.Detach(); mediaReceiver.Detach(); UnsubscribeFromCallEvents(sender as IPhoneCall); call = null; StateChanged?.Invoke(PhoneState.CallEnded); } }
private void softPhone_IncomingCall(object sender, VoIPEventArgs <IPhoneCall> e) { var incomingCall = e.Item as IPhoneCall; if (call != null) { incomingCall.Reject(); return; } call = incomingCall; SubscribeToCallEvents(call); StateChanged?.Invoke(PhoneState.InCall); RaiseMessage?.Invoke(String.Format("Incoming call from {0}", e.Item.DialInfo.CallerDisplay)); }
void ProcessEvent(string eventInfo) { if (string.IsNullOrWhiteSpace(eventInfo)) { return; } var info = eventInfo.Split(new char[] { '#' }, StringSplitOptions.RemoveEmptyEntries); switch (info[0]) { case "RaiseMessage": RaiseMessage?.Invoke(info[1]); break; case "StateMessageChanged": StateMessageChanged?.Invoke(info[1]); break; case "StateChanged": StateChanged?.Invoke((PhoneState)Enum.Parse(typeof(PhoneState), info[1])); break; } }
private void call_DtmfReceived(object sender, VoIPEventArgs <DtmfInfo> e) { DtmfSignal signal = e.Item.Signal; RaiseMessage?.Invoke(String.Format("DTMF signal received: {0} ", signal.Signal)); }