Beispiel #1
0
 // Сигнал для станции об окончании звонка
 protected virtual void OnApeCallEnded(CallEventArgs e)
 {
     if (ApeCallEnded != null)
     {
         ApeCallEnded(this, e);
     }
 }
Beispiel #2
0
 /// <summary>
 /// Handles the Received event of the CallHandler_IM control.
 /// </summary>
 /// <param name="sender">The source of the event.</param>
 /// <param name="e">The <see cref="FastHelpClient.Data.Events.CallEventArgs"/> instance containing the event data.</param>
 protected override void CallHandler_IM_Received(object sender, CallEventArgs e)
 {
     if (e.MenuName == "#")
     {
         this.NavigateToMainMenu(false);
     }
 }
Beispiel #3
0
        protected void OutgoingCallAccepted(object sender, CallEventArgs e)
        {
            //Debug.WriteLine("[Port.OutgoingCallAccepted] PortId: {0}", PortId);
            //Debug.WriteLine(e);

            OnCallAccepted(e);
        }
Beispiel #4
0
 public Phone()
 {
     Connection = new CallEventArgs()
     {
         SourcePhoneNumber = String.Empty, AimedPhoneNumber = String.Empty, State = CallState.Unanswered
     };
 }
Beispiel #5
0
        public void IncomingCall(object sender, CallEventArgs callEventArgs)
        {
            bool k = true;

            Console.WriteLine("Incoming call from number: {0} to number: {1}", callEventArgs.PhoneNumber, callEventArgs.TargetPhoneNumber);
            while (k)
            {
                Console.WriteLine("Answer? Y/N");
                char f = Console.ReadKey().KeyChar;
                if (f == 'Y' || f == 'y')
                {
                    k = false;
                    Console.WriteLine();
                    if (callEventArgs.PhoneNumber != callEventArgs.TargetPhoneNumber)
                    {
                        AnswerToCall(callEventArgs.PhoneNumber, callEventArgs.TargetPhoneNumber, CallState.Answered);
                    }
                    else
                    {
                        Console.WriteLine("You can not call yourself");
                    }
                }
                else if (f == 'N' || f == 'n')
                {
                    k = false;
                    Console.WriteLine();
                    EndCall();
                }
                else
                {
                    Console.WriteLine();
                }
            }
        }
Beispiel #6
0
 protected virtual void OnCallAccepted(CallEventArgs e)
 {
     if (CallAccepted != null)
     {
         CallAccepted(this, e);
     }
 }
Beispiel #7
0
        protected void OutgoingCallAccepted(object sender, CallEventArgs e)
        {
            //Debug.WriteLine("[Terminal.OutgoingCallAccepted]");
            //Debug.WriteLine(e);

            _call = (CallEventArgs)e.Clone();
        }
Beispiel #8
0
 private void Sender_CallEvent(object src, CallEventArgs args)
 {
     if (args.Type == CallEventType.ConfigurationComplete)
     {
         Debug.Log("sender: configuration done. Listening on address " + BenchmarkConfig.Address);
         sender.Call(BenchmarkConfig.Address);
     }
     else if (args.Type == CallEventType.ConfigurationFailed)
     {
         Debug.LogError("sender: failed to access the audio device");
     }
     else if (args.Type == CallEventType.ConnectionFailed)
     {
         mIsActive = false;
         Debug.LogError("sender: failed to connect");
     }
     else if (args.Type == CallEventType.CallAccepted)
     {
         Debug.Log("sender CallAccepted");
         CallAcceptedEventArgs ev = args as CallAcceptedEventArgs;
         mToEcho    = ev.ConnectionId;
         mIsActive  = true;
         mStartTime = DateTime.Now;
     }
     else if (args.Type == CallEventType.CallEnded)
     {
         Debug.Log("sender: received CallEnded event");
         mIsActive = false;
     }
     else if (args.Type == CallEventType.DataMessage)
     {
         var margs = args as DataMessageEventArgs;
         OnMessageReceived(margs.Content);
     }
 }
Beispiel #9
0
 private void Sender_CallEvent(object src, CallEventArgs args)
 {
     if (args.Type == CallEventType.ConfigurationComplete)
     {
         //STEP6: we got access to media devices
         Debug.Log("sender configuration done. Listening on address " + address);
         sender.Call(address);
     }
     else if (args.Type == CallEventType.ConfigurationFailed)
     {
         //STEP6: user might have blocked access?
         Debug.LogError("sender failed to access the audio device");
     }
     else if (args.Type == CallEventType.ConnectionFailed)
     {
         //This can happen if the signaling connection failed or
         //if the direct connection failed e.g. due to firewall
         //See FAQ for more info how to find problems that cause this
         Debug.LogError("sender failed to connect");
     }
     else if (args.Type == CallEventType.CallAccepted)
     {
         //STEP7: Call Accepted
         Debug.Log("sender CallAccepted");
     }
     else if (args.Type == CallEventType.CallEnded)
     {
         //STEP8: CallEnded. Either network died or
         //one of the calls was destroyed/disposed
         Debug.Log("sender received CallEnded event");
     }
 }
Beispiel #10
0
        /// <summary>
        /// 处理来电,短信等推送消息。
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="args"></param>
        void client_CallEvent(object sender, CallEventArgs args)
        {
            this.Invoke(new Action(() =>
            {
                switch (args.Type)
                {
                case EventType.SINGLE_INCOMING:
                    break;

                case EventType.TEXT_INCOMING:
                    textBox1.Text += "收到短信:" + args.Text + "\r\n";
                    break;

                case EventType.GROUP_START:
                    textBox1.Text += "监听通话开始:" + args.ToString() + "\r\n";
                    break;

                case EventType.GROUP_END:
                    textBox1.Text += "监听通话结束:" + args.ToString() + "\r\n";
                    break;

                case EventType.CALL_INFO:
                    textBox1.Text += "PTT通话信息:" + args.ToString() + "\r\n";
                    break;

                case EventType.CALL_END:
                    textBox1.Text += "通话结束:" + args.ToString() + "\r\n";
                    break;

                case EventType.CALL_SUCCESS:
                    textBox1.Text += "电话拨出结果:" + args.ToString() + "\r\n";
                    break;
                }
            }));
        }
Beispiel #11
0
 protected virtual void OnCallLog(CallEventArgs e)
 {
     if (CallLog != null)
     {
         CallLog(this, e);
     }
 }
Beispiel #12
0
 /// <summary>
 /// Event handler for the receiver side.
 /// </summary>
 /// <param name="src">receiver mCall object</param>
 /// <param name="args">event specific arguments</param>
 private void Receiver_CallEvent(object src, CallEventArgs args)
 {
     if (args.Type == CallEventType.ConfigurationComplete)
     {
         //STEP3: Connect to the previously set signaling server
         //and try to listen for incoming calls on the set address.
         Debug.Log("receiver configuration done. Listening on address " + address);
         receiver.Listen(address);
     }
     else if (args.Type == CallEventType.WaitForIncomingCall)
     {
         //STEP4A: Our address is registered with the server now
         //we wait for the sender to connect
         Debug.Log("receiver is ready to accept incoming calls");
         //setup the sender to connect
         SenderSetup();
     }
     else if (args.Type == CallEventType.ListeningFailed)
     {
         //STEP4B: Alternatively, we failed to listen.
         //e.g. due to no internet / server down / address in use
         //currently no specific error information are available.
         Debug.LogError("receiver failed to listen to the address");
     }
     else if (args.Type == CallEventType.CallAccepted)
     {
         //STEP7:
         //The sender connected successfully and a direct connection was
         //created.
         Debug.Log("receiver CallAccepted");
     }
 }
Beispiel #13
0
        /// <summary>
        /// 响应计数事件
        /// </summary>
        /// <param name="callArgs"></param>
        private void NotifyEventArgs(CallEventArgs callArgs)
        {
            //调用计数
            ManagedThreadPool.QueueUserWorkItem(state =>
            {
                try
                {
                    var arr           = state as ArrayList;
                    var statusService = arr[0] as ServerStatusService;
                    var eventArgs     = arr[1] as CallEventArgs;

                    //调用计数服务
                    statusService.Counter(eventArgs);

                    //响应消息
                    MessageCenter.Instance.Notify(eventArgs);
                }
                catch (Exception ex)
                {
                    //TODO
                }
            }, new ArrayList {
                status, callArgs
            });
        }
Beispiel #14
0
        /// <summary>
        /// 调用方法
        /// </summary>
        /// <param name="client"></param>
        /// <param name="reqMsg"></param>
        /// <returns></returns>
        public ResponseMessage CallMethod(IScsServerClient client, RequestMessage reqMsg)
        {
            //创建Caller;
            var caller = CreateCaller(client, reqMsg);

            //设置上下文
            SetOperationContext(client, caller);

            try
            {
                //处理状态服务
                if (reqMsg.ServiceName == typeof(IStatusService).FullName)
                {
                    var s = ParseService(reqMsg);

                    //调用服务
                    return(s.CallService(reqMsg));
                }
                else
                {
                    //创建服务
                    var service = CreateService(reqMsg);

                    //启动计时
                    var watch = Stopwatch.StartNew();

                    //调用服务
                    var resMsg = service.CallService(reqMsg);

                    //停止计时
                    watch.Stop();

                    //调用参数
                    var callArgs = new CallEventArgs
                    {
                        Caller      = caller,
                        ElapsedTime = watch.ElapsedMilliseconds,
                        Count       = resMsg.Count,
                        Error       = resMsg.Error,
                        Value       = resMsg.Value
                    };

                    //响应计数
                    NotifyEventArgs(callArgs);

                    //如果是Json方式调用,则需要处理异常
                    if (resMsg.IsError && reqMsg.InvokeMethod)
                    {
                        resMsg.Error = new ApplicationException(callArgs.Error.Message);
                    }

                    return(resMsg);
                }
            }
            finally
            {
                //初始化上下文
                OperationContext.Current = null;
            }
        }
Beispiel #15
0
 public void HandleCallEvent(object o, CallEventArgs e)
 {
     if (IsNumberExist(e.ReceiverNumber) && e.PortOfCaller.Number != e.ReceiverNumber)
     {
         var item = Ports.Find(x => x.PortStatus == StatusOfPort.Connected && x.CallStatus == StatusOfCall.Avaliable && e.ReceiverNumber == x.Number);
         if (item != null)
         {
             item.GetAnswer(e);
             if (e.AnswerStatus == StatusOfAnswer.Answer)
             {
                 Console.WriteLine("Start of call");
                 item.ChangeCallStatus(StatusOfCall.Busy);
                 e.PortOfCaller.ChangeCallStatus(StatusOfCall.Busy);
                 OnGoingCalls.Add(new CallData(e.PortOfCaller, item));
             }
             else
             {
                 e.PortOfCaller.ATEMessageShow(new MessageFromAteEventArgs("Desclined"));
             }
         }
         else
         {
             e.PortOfCaller.ATEMessageShow(new MessageFromAteEventArgs("Receiver is busy"));
         }
     }
     else
     {
         e.PortOfCaller.ATEMessageShow(new MessageFromAteEventArgs("Number is wrong"));
     }
 }
Beispiel #16
0
        protected void IncommingCallEnded(object sender, CallEventArgs e)
        {
            //Debug.WriteLine("[Terminal.IncommingCallEnded]");
            //Debug.WriteLine(e);

            _call = null;
        }
Beispiel #17
0
        protected virtual void OnCall(CallEventHandler handler, CallEventArgs e, IPortId destPortId)
        {
            //Debug.WriteLine("[PhoneExchange.OnCall]");
            //Debug.WriteLine(e);

            if (handler != null)
            {
                // Только один нужный порт может быть
                var destPortHandler = handler.GetInvocationList()
                                      .Where(d => (d.Target as IPort) != null && ((IPort)d.Target).PortId.Equals(destPortId))
                                      .OfType <CallEventHandler>()
                                      .FirstOrDefault();

                var invListOthers = handler.GetInvocationList().Where(d => !(d.Target is IPort))
                                    .OfType <CallEventHandler>();

                // Вызвать событие только на порту назначения и для всех подписчиков - не портов
                if (destPortHandler != null)
                {
                    OnCallLog(e);
                    destPortHandler(this, e);
                }
                else
                {
                    e.State = CallEventStates.Invalid;
                    OnCallLog(e);
                }

                foreach (var callEventHandler in invListOthers)
                {
                    callEventHandler(this, e);
                }
            }
        }
Beispiel #18
0
        protected void TerminalCallAccepted(object sender, CallEventArgs e)
        {
            //Debug.WriteLine("[Port.TerminalCallAccepted] PortId: {0}", PortId);
            //Debug.WriteLine(e);

            OnApeCallAccepted(e);
        }
Beispiel #19
0
        public void HandleCall(CallEventArgs e)
        {
            var callerContract = PhoneOperator.Clients
                                 .SelectMany(c => c.Contracts)
                                 .First(c => c.PortId == e.PortId);

            var targetContract = PhoneOperator.Clients
                                 .SelectMany(c => c.Contracts)
                                 .First(c => c.PhoneNumber == e.TargetNumber);

            if (!CanCallStarted(callerContract, targetContract))
            {
                return;
            }

            _connections.Add(new ConnectionModel(callerContract.PhoneNumber, targetContract.PhoneNumber, e.Id));
            var targetPort = Station.Ports.First(p => p.Id == targetContract.PortId);

            if (targetPort.Status != PortStatus.Connected)
            {
                return; // Cannot handle connection.
            }

            targetPort.IncomingCall(e);
        }
Beispiel #20
0
        public void TakeIncomingCall(object sender, CallEventArgs e)
        {
            bool flag = true;

            Console.WriteLine("Have incoming Call at number: {0} to terminal {1}", e.PhoneNumber, e.TargetPhoneNumber);
            while (flag == true)
            {
                Console.WriteLine("Answer? Y/N");
                char k = Console.ReadKey().KeyChar;
                if (k == 'Y' || k == 'y')
                {
                    flag = false;
                    Console.WriteLine();
                    AnswerToCall(e.PhoneNumber, CallState.Answered);
                }
                else if (k == 'N' || k == 'n')
                {
                    flag = false;
                    Console.WriteLine();
                    AnswerToCall(e.PhoneNumber, CallState.Rejected);
                }
                else
                {
                    flag = true;
                    Console.WriteLine();
                }
            }
        }
Beispiel #21
0
        //-------------------------------------------------------------------------------------------------------------------
        // Подписки на события от портов
        protected void PortCallStarted(object sender, CallEventArgs e)
        {
            OnCallPermissionCheck(e);
            if (!e.IsAllowed)
            {
                e.State = CallEventStates.Denied;
                OnCall(CallEnded, e, e.SourcePortId);
                return;
            }

            var destPort = _ports.FirstOrDefault(p => p.PortId.Equals(e.DestinationPortId));

            if (destPort != null)
            {
                if (destPort.PortState == PortStates.Connected)
                {
                    OnCallStarted(e);
                }
                else
                {
                    e.State = CallEventStates.Missed;
                    OnCall(CallEnded, e, e.SourcePortId);
                }
            }
            else
            {
                // порт назначения не найден, ответ посылается источнику
                e.State = CallEventStates.Invalid;
                OnCall(CallEnded, e, e.SourcePortId);
            }
        }
Beispiel #22
0
        private void Call_CallEvent(object sender, CallEventArgs args)
        {
            if (args.Type == CallEventType.ConfigurationComplete)
            {
                //STEP3: configuration completed -> try calling
                Call();
            }
            else if (args.Type == CallEventType.ConfigurationFailed)
            {
                Error("Accessing audio / video failed");
            }
            else if (args.Type == CallEventType.ConnectionFailed)
            {
                Error("ConnectionFailed");
            }
            else if (args.Type == CallEventType.ListeningFailed)
            {
                Error("ListeningFailed");
            }
            else if (args.Type == CallEventType.CallAccepted)
            {
                //STEP5: We are connected
                mState = SimpleCallState.InCall;
                Log("Connection established");
            }
            else if (args.Type == CallEventType.CallEnded)
            {
                mState = SimpleCallState.Ended;
                Log("Call ended.");
            }
            else if (args.Type == CallEventType.FrameUpdate)
            {
                //STEP6: until the end of the call we receive frames here
                //Note that this is being called after Configure already for local frames even before
                //a connection is established!
                //This is triggered each video frame for local and remote video images
                FrameUpdateEventArgs frameArgs = args as FrameUpdateEventArgs;


                if (frameArgs.ConnectionId == ConnectionId.INVALID)
                {
                    bool textureCreated = UnityMediaHelper.UpdateRawImage(_LocalImage, frameArgs.Frame);
                    if (textureCreated)
                    {
                        Texture2D tex = _LocalImage.texture as Texture2D;
                        Log("Local Texture(s) created " + tex.width + "x" + tex.height + " format: " + frameArgs.Frame.Format);
                    }
                }
                else
                {
                    bool textureCreated = UnityMediaHelper.UpdateRawImage(_RemoteImage, frameArgs.Frame);
                    if (textureCreated)
                    {
                        Texture2D tex = _RemoteImage.texture as Texture2D;
                        Log("Remote Texture(s) created " + tex.width + "x" + tex.height + " format: " + frameArgs.Frame.Format);
                    }
                }
            }
        }
Beispiel #23
0
        private void OnCallRecordSend(object sender, CallEventArgs e)
        {
            IAbonent abonent = _abonentList.FirstOrDefault(a => a.PhoneNumber == e.CallerPhoneNumber);
            Call     call    = new Call(e, abonent.Tariff);

            abonent.Balance -= call.Cost;
            _callList.Add(call);
        }
Beispiel #24
0
        public void HandleAnswerEvent(object o, CallEventArgs e)
        {
            Console.WriteLine("Call from {0}", e.PortOfCaller.Number);
            Console.WriteLine("Y - to answer");
            string answer = Console.ReadLine();

            e.SetAnswerStatus(answer);
        }
Beispiel #25
0
        protected void IncommingCallReceived(object sender, CallEventArgs e)
        {
            //Debug.WriteLine("[Terminal.IncommingCallReceived]");
            //Debug.WriteLine(e);

            _call = (CallEventArgs)e.Clone();
            OnCallReceived(e);
        }
Beispiel #26
0
        protected void PortCallAccepted(object sender, CallEventArgs e)
        {
            var destPort = _ports.FirstOrDefault(p => p.PortId.Equals(e.SourcePortId));

            if (destPort != null)
            {
                OnCallAccepted(e);
            }
        }
Beispiel #27
0
 public Call(CallEventArgs e, ITariff tariff)
 {
     CallerPhoneNumber = e.CallerPhoneNumber;
     TargetPhoneNumber = e.TargetPhoneNumber;
     ResponseCode      = e.ResponseCode;
     ErrorCode         = e.ErrorCode;
     DateTimeBegin     = e.DateTimeBeginCall;
     Duration          = (e.DataTimeEndCall - e.DateTimeBeginCall).TotalSeconds;
     Cost = Duration * (tariff.CostPerMinute / 10);
 }
Beispiel #28
0
        public CallErrorCode Call(string targetPhoneNumber)
        {
            var eventArgs = new CallEventArgs(targetPhoneNumber);

            eventArgs.DateTimeBeginCall = DateTime.Now;

            Called?.Invoke(this, eventArgs);

            return(eventArgs.ErrorCode);
        }
Beispiel #29
0
 protected virtual void OnCallPermissionCheck(CallEventArgs e)
 {
     if (CallPermissionCheck != null)
     {
         CallPermissionCheck(this, e);
     }
     else
     {
         e.IsAllowed = true;
     }
 }
 private static void ClientOnIncomingCall(object sender, CallEventArgs e)
 {
     try
     {
         Console.WriteLine($"Incoming call. Sending notification to {_telegramTarget}");
         var result = _bot.SendTextMessageAsync(_telegramTarget, $"New Call from {e.CallerName}").Result;
     }
     catch (Exception exception)
     {
         Console.WriteLine(exception);
     }
 }