/// <summary> /// Menu level changed handler. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void MenuLevelChanged(object sender, MenuLevelChangedEventArgs e) { if (e.Level == MenuLevel.HelpDeskRequested) { lock (this.syncRoot) { if (this.callAnchor == null) { this.callAnchor = new CustomerCallAnchor(this, this.logger, this.conversation); } try { var helpdeskNumber = e.HelpdeskNumber; if (String.IsNullOrEmpty(helpdeskNumber)) { Console.WriteLine("Null or empty help desk number"); this.logger.Log("Null or empty help desk number"); } else { try { RealTimeAddress address = new RealTimeAddress(helpdeskNumber); this.callAnchor.BeginEstablish(address, (asyncResult) => { try { this.callAnchor.EndEstablish(asyncResult); } catch (Exception ex) { this.callAnchor.BeginTerminate((terminateAsyncResult) => { this.callAnchor.EndTerminate(terminateAsyncResult); }, null); Console.WriteLine("Call anchor failed with {0}", ex); this.logger.Log("Call anchor failed with {0}", ex); } }, null); } catch (ArgumentException ae) { Console.WriteLine("Invalid help desk number {0}, Exception ={1}", helpdeskNumber, ae); this.logger.Log("Invalid help desk number {0}, Exception ={1}", helpdeskNumber, ae); } } } catch (Exception ex) { Console.WriteLine("Call anchor failed with {0}", ex); this.logger.Log("Call anchor failed with {0}", ex); } } } }
/// <summary> /// Raise menu level changed event. /// </summary> /// <param name="previous"></param> /// <param name="current"></param> private void RaiseEvent(MenuLevel previous, MenuLevel current, string helpdeskNumber = null) { var eventHandler = this.MenuLevelChanged; if (eventHandler != null) { MenuLevelChangedEventArgs eventArgs = new MenuLevelChangedEventArgs(previous, current); eventArgs.HelpdeskNumber = helpdeskNumber; eventHandler(this, eventArgs); } }