public void AnswerMessage(RespondState state, PhoneNumber number, PhoneNumber target)
        {
            switch (state)
            {
            case RespondState.Accept:
                Console.WriteLine("This number: {0} accepted call from number: {1}", number.ToString(), target.ToString());
                break;

            case RespondState.Decline:
                Console.WriteLine("This number: {0} declined call from number: {1}", number.ToString(), target.ToString());
                break;

            case RespondState.Ending:
                Console.WriteLine("Terminal with number: {0}, calling ended", number.ToString());
                break;

            default:
                break;
            }
        }
Beispiel #2
0
 public void EndCall(PhoneNumber targetNumber, RespondState state)
 {
     EndCallEvent?.Invoke(this, new EventArgsEndCall(phoneNumber, targetNumber, state));
 }
Beispiel #3
0
 public void AnswerCall(PhoneNumber targetNumber, RespondState state)
 {
     AnswerEvent?.Invoke(this, new EventArgsAnswer(phoneNumber, targetNumber, state));
 }
Beispiel #4
0
 public EventArgsAnswer(PhoneNumber number, PhoneNumber phoneTarget, RespondState state)
 {
     Number       = number;
     TargetNumber = phoneTarget;
     CurrentState = state;
 }
        public RespondState AnswerChoice(PhoneNumber phoneNumbur, PhoneNumber phoneTarget, RespondState state)
        {
            int actionStopper = 1;

            Console.WriteLine("Incoming call from number: {0} to terminal with number {1}", phoneNumbur.ToString(), phoneTarget.ToString());

            while (actionStopper > 0)
            {
                Console.WriteLine("Answer? Y/N");
                var k = Console.ReadKey().Key;
                if (k == ConsoleKey.Y)
                {
                    actionStopper = 0;
                    state         = RespondState.Accept;
                    Console.WriteLine();
                }
                else if (k == ConsoleKey.N)
                {
                    actionStopper = 0;
                    state         = RespondState.Decline;
                    Console.WriteLine();
                }
            }
            return(state);
        }
Beispiel #6
0
 public EventArgsEndCall(PhoneNumber number, PhoneNumber targetNumber, RespondState state)
 {
     Number       = number;
     TargetNumber = targetNumber;
     CurrentState = state;
 }
Beispiel #7
0
        public void Calling(object sender, IEventArgsCalling e)
        {
            if (usersData.ContainsKey(e.TargetNumber) &&
                e.TargetNumber != e.Number ||
                e is EventArgsEndCall)
            {
                IPort targetPort;
                IPort port;

                if (e is EventArgsEndCall)
                {
                    var callListFirst = callInfo;

                    if (callListFirst.CallerNumber == e.Number)
                    {
                        targetPort = usersData[callListFirst.TargetNumber];
                        port       = usersData[callListFirst.CallerNumber];
                    }
                    else
                    {
                        port       = usersData[callListFirst.TargetNumber];
                        targetPort = usersData[callListFirst.CallerNumber];
                    }
                }
                else
                {
                    targetPort = usersData[e.TargetNumber];
                    port       = usersData[e.Number];
                }

                if (targetPort.PortState == PortState.Connected && port.PortState == PortState.Connected)
                {
                    CallInfo info;

                    if (e is EventArgsAnswer)
                    {
                        info = callInfo;
                        var answerArgs = (EventArgsAnswer)e;

                        targetPort.AnswerCall(answerArgs.Number, answerArgs.TargetNumber, answerArgs.CurrentState);

                        Thread.Sleep(4000);
                        info.TimeEndCall = DateTime.Now;
                        GetCallTime();
                    }

                    if (e is EventArgsCall)
                    {
                        Terminal term     = new Terminal();
                        var      callArgs = (EventArgsCall)e;
                        info     = new CallInfo(callArgs.Number, callArgs.TargetNumber, DateTime.Now, DateTime.Now);
                        callInfo = info;
                        targetPort.IncomingCall(callArgs.Number, callArgs.TargetNumber);
                    }

                    if (e is EventArgsEndCall)
                    {
                        var endArgs = (EventArgsEndCall)e;
                        info = callInfo;

                        RespondState state = endArgs.CurrentState;

                        if (state == RespondState.Ending)
                        {
                            targetPort.AnswerCall(endArgs.Number, endArgs.TargetNumber, RespondState.Ending);
                        }

                        else if (state == RespondState.Decline)
                        {
                            targetPort.AnswerCall(endArgs.Number, endArgs.TargetNumber, RespondState.Decline);
                            GetCallTime();
                        }
                        SentDataEvent?.Invoke(new BillingCallInfo(GetInfoList().CallerNumber, GetInfoList().TargetNumber
                                                                  , GetInfoList().TimeStartCall, GetInfoList().TimeEndCall));
                    }
                }
                else
                {
                    interaction.CallingToDisconnectedTerminalMessage(e.TargetNumber);
                }
            }
            else if (!usersData.ContainsKey(e.TargetNumber))
            {
                interaction.CallingToNonExictentNumberMessage(e.TargetNumber);
            }
        }