예제 #1
0
 public override void OnPOStatusChanged(POStatusChangedEventArgs e)
 {
     if (e.Status.HasValue && e.Status.Value == ePOStatus.OnHook && this.IsHolding == false)
     {
         Finalise();
     }
 }
예제 #2
0
        public override void OnPOStatusChanged(POStatusChangedEventArgs e)
        {
            if (this.ClientApp.Channels.PO.Id == e.Address)
            {
                ProcessMessageInController(e);
                if (e.Handled)
                {
                    return;
                }

                this.ClientApp.Channels.PO.ApplyChanges(e);

                if (this.ClientApp.Channels.PO.Status == ePOStatus.OffHook && CanReceiveCall && !this.HasConnection)
                {
                    var ringChannels = this.ClientApp.GetChannels(ch => ch.LineStatus == eLineStatus.Ring && IsFreeChannel(ch)).ToList();
                    if (ringChannels.Count == 1)
                    {
                        var ringUnit = this.ClientApp.Units.Items.FirstOrDefault(u => u.Status == ePhoneStatus.Ring && IsFreeUnit(u));
                        if (ringUnit != null)
                        {
                            ClientApp.Service.Request(eResourceType.UnitPhone, ringUnit.Id);
                        }

                        AddController(new InCallController(this.ClientApp, ringChannels[0], ringUnit));
                        return;
                    }
                }
            }
        }
예제 #3
0
        void Switch_OnPOStatusChanged(object sender, POStatusChangedEventArgs e)
        {
            ThreadPool.QueueUserWorkItem(new WaitCallback(obj =>
            {
                var po = _resources.POes.FirstOrDefault(p => p.Id == e.Address);
                if (po == null || (po.Status == e.Status && po.Tone == e.Tone))
                {
                    return;
                }

                po.ApplyChanges(e);
                var disconnectedClients = new List <Client>();
                foreach (var client in _resources.GetActiveClients())
                {
                    try
                    {
                        client.Callback.OnPOStatusChanged(e);
                    }
                    catch
                    {
                        disconnectedClients.Add(client);
                    }
                }

                disconnectedClients.ForEach(OnClientDisconnected);
            }));
        }
예제 #4
0
 void INovaAlertServiceCallback.OnPOStatusChanged(POStatusChangedEventArgs e)
 {
     if (this.MainController != null)
     {
         Application.Current.Dispatcher.Invoke(_priority, new Action(() => this.MainController.OnPOStatusChanged(e)));
     }
 }
 public override void OnPOStatusChanged(POStatusChangedEventArgs e)
 {
     ProcessMessageInController(e);
     if (e.Handled)
     {
         return;
     }
 }
예제 #6
0
 public override void OnPOStatusChanged(POStatusChangedEventArgs e)
 {
     if (e.Status.HasValue && e.Status.Value == ePOStatus.OnHook && this.IsHolding == false &&
         this.ClientApp.Channels.PO.Status != e.Status.Value)
     {
         this.ClientApp.Channels.PO.ApplyChanges(e);
         Finalise();
         e.Handled = true;
     }
 }
 public override void OnPOStatusChanged(POStatusChangedEventArgs e)
 {
     if (this.ClientApp.Channels.PO.Id == e.Address)
     {
         base.OnPOStatusChanged(e);
         if (!e.Handled)
         {
             CheckOutgoingCall();
         }
     }
 }
예제 #8
0
        public void ApplyChanges(POStatusChangedEventArgs e)
        {
            if (e.Status.HasValue)
            {
                this.Status = e.Status.Value;
            }

            if (e.Address == this.Id && !string.IsNullOrEmpty(e.Tone))
            {
                this.Tone = e.Tone;
            }
        }
예제 #9
0
        protected override void OnLineStatusChanged(LineStatusMessageBase msg)
        {
            if (msg.Type == eLineStatusType.PO_Status || msg.Type == eLineStatusType.PO_Tone)
            {
                var e = new POStatusChangedEventArgs(msg.Address);
                if (msg.Type == eLineStatusType.PO_Status)
                {
                    e.Status = (((POStatusMessage)msg).Status == eStatus.On) ? ePOStatus.OffHook : ePOStatus.OnHook;
                }
                else
                {
                    e.Tone = ((NumberReceivedMessage)msg).Number;
                }

                if (this.OnPOStatusChanged != null)
                {
                    OnPOStatusChanged(this, e);
                }
            }
            else
            {
                var e = new ChannelStatusChangedEventArgs(msg.Address);

                switch (msg.Type)
                {
                case eLineStatusType.Line:
                    var lmsg = msg as LineStatusMessage;
                    e.Status = lmsg.Status;
                    break;

                case eLineStatusType.Revert:
                    break;

                case eLineStatusType.Tone:
                case eLineStatusType.CallerId:
                    var nmsg = msg as NumberReceivedMessage;
                    if (msg.Type == eLineStatusType.Tone)
                    {
                        e.Tone = nmsg.Number;
                    }
                    else
                    {
                        e.CallerId = nmsg.Number;
                    }
                    break;
                }

                if (this.OnChannelStatusChanged != null)
                {
                    OnChannelStatusChanged(this, e);
                }
            }
        }
예제 #10
0
        public override void OnPOStatusChanged(POStatusChangedEventArgs e)
        {
            this.ClientApp.Channels.PO.ApplyChanges(e);
            e.Handled = true;
            if (!e.Status.HasValue)
            {
                return;
            }

            CreateMonitorConnection(this.ClientApp.Channels.PO.Status == ePOStatus.OffHook);

            if (e.Status.Value == ePOStatus.OnHook)
            {
                if (this.Issued)
                {
                    Finalise();
                }
                else
                {
                    this.SelectedMember = null;
                }
            }
        }
예제 #11
0
 public override void OnPOStatusChanged(POStatusChangedEventArgs e)
 {
 }
예제 #12
0
 public virtual void OnPOStatusChanged(POStatusChangedEventArgs e)
 {
 }