2017-11-08 5 views
-1

나는 우리의 Elastix 시스템에서 들어오는 VoIP 전화를 처리하기 위해 Ozeki.VoIP.SDK을 사용하고 있습니다. 내가하려는 것은 내 응용 프로그램에서 들어오는 호출에 대한 정보를 읽고 표시하는 것입니다. 은 사무실 전화도 울리게합니다. 내가 오제키 컨트롤러의 VoIP 풀에서 전화선를 등록 Ozeki Voip SDK에 전화선 등록하기 전화 벨소리가 울림

문제는, 그 선에 걸려 오는 전화는 더 이상 내 책상 전화에 반지되지 않습니다. 그러나 전화 회선의 등록을 취소하면 전화를받을 때 내 탁상 전화기의 벨이 다시 울립니다.

왜 Ozeki SDK가 응용 프로그램에서 읽고있는 호출을 차단하는지 잘 모르겠습니다.

private ISoftPhone _softphone; 
    private Dictionary<string,IPhoneLine> _phoneLines; 

    public Softphone() 
    { 
     _softphone = SoftPhoneFactory.CreateSoftPhone(IP_ADDRESS, MIN_PORT, MAX_PORT, SIP_PORT); 
     _softphone.ChangeNATSettings(Ozeki.Network.Nat.NATTraversalMethodType.NONE, "", "", ""); 
     _softphone.IncommingCall += softphone_IncommingCall; 
     _phoneLines = new Dictionary<string, IPhoneLine>(); 
    } 
    public bool IsRegistered(string username) 
    { 
     return (_phoneLines.Keys.Contains(username)); 
    } 
    public void Register(SIPAccount account) 
    { 
     if (IsRegistered(account.UserName)) 
     { 
      Unregister(account); 
      Thread.Sleep(1000); 
     } 
     //throw new Exception(string.Format("The account with username={0} already registered.", account.UserName)); 

     // With the SIP account and the NAT configuration, we can create a phoneline. 
     IPhoneLine phoneLine = _softphone.CreatePhoneLine(account); 
     // If our phoneline is created, we can register that. 
     _softphone.RegisterPhoneLine(phoneLine); 

     _phoneLines.Add(account.UserName, phoneLine); 
    } 
    public void Unregister(SIPAccount account) 
    { 
     IPhoneLine phoneLine = _softphone.CreatePhoneLine(account); 
     _phoneLines.Remove(account.UserName); 
     _softphone.UnregisterPhoneLine(phoneLine); 
    } 

    private void DispatchAsync(Action action) 
    { 
     var task = new WaitCallback(o => action.Invoke()); 
     ThreadPool.QueueUserWorkItem(task); 
    } 

    private void softphone_IncommingCall(object sender, VoIPEventArgs<IPhoneCall> e) 
    { 
     DispatchAsync(() => 
     { 
      onIncomingCall(e); 
     }); 
    } 
    private void onIncomingCall(VoIPEventArgs<IPhoneCall> e) 
    { 
     if (IncomingCall != null) 
      IncomingCall(this, e); 
    } 

이전에이 동작을 본 사람이 있습니까? 나는 단서가 없다.

+0

VOIP 제공 업체는 누구입니까? – mjwills

+0

@mjwills 우리는 elastix를 사용하고 있습니다. – Bijan

+0

https://www.elastix.org/community/threads/multiple-registration.130199/ help가 있습니까? – mjwills

답변