Ejemplo n.º 1
0
        private void ConnectPorts(IPort senderPort, OutgoingCallEvent e)
        {
            var receiverPort = Ports.FirstOrDefault(x => x.PhoneNumber == e.ReceiverPhoneNumber);

            if (receiverPort == null || senderPort == null || receiverPort.PortStatus == PortStatus.SwitchedOff)
            {
                OnNotifyPortOfFailure(new FailureEvent(e.ReceiverPhoneNumber, FailureType.AbonentDoesNotExist),
                                      senderPort);

                Logger.WriteLine($"{e.ReceiverPhoneNumber} does not exist");
            }
            else if (receiverPort.PortStatus != PortStatus.Free)
            {
                OnNotifyPortOfFailure(new FailureEvent(e.ReceiverPhoneNumber, FailureType.AbonentIsBusy),
                                      senderPort);

                Logger.WriteLine($"{e.ReceiverPhoneNumber} is busy");
            }
            else
            {
                CallsWaitingToBeAnswered.Add(senderPort, receiverPort);                                  // add aour cakk information to specified list

                PortTimeout.Add(senderPort, SetTimer(senderPort, receiverPort));                         // setting timer for call waiting to be answered, wich will end call after certain ammout of time if it wasn't answered

                OnNotifyPortOfIncomingCall(new IncomingCallEvent(senderPort.PhoneNumber), receiverPort); // This method will call the event that invokes methods that changes telephones statuses and send notifications
            }
        }
Ejemplo n.º 2
0
        public void NotifyIncomingCallPort(object sender, OutgoingCallEvent e)
        {
            var senderPort = sender as IPort;

            Logger.WriteLine($"{e.SenderPhoneNumber} is calling {e.ReceiverPhoneNumber}");

            var checkBalanceEvent = new CheckBalanceEvent(e.SenderPhoneNumber); // create an event object for check balance opperations

            OnCheckBalanceInBillingSystem(checkBalanceEvent);                   // Method that checks if abonent have enough balance to make a call

            Logger.WriteLine($"Checking {e.SenderPhoneNumber} balance");

            if (checkBalanceEvent.IsAllowedCall)
            {
                Logger.WriteLine($"{e.SenderPhoneNumber} has enough money to make call");

                ConnectPorts(senderPort, e);
            }
            else
            {
                Logger.WriteLine($"{e.SenderPhoneNumber} has not enough money to make call");

                OnNotifyPortOfFailure(new FailureEvent(e.ReceiverPhoneNumber, FailureType.InsufficientFunds),
                                      senderPort);
            }
        }
Ejemplo n.º 3
0
 public void Call(int targetNumber)
 {
     if (targetNumber != TelephonNumber)
     {
         OutgoingCallEvent?.Invoke(this, new EventArgsCall(TelephonNumber, targetNumber));
     }
     else
     {
         _help.GetMessageAboutCallYourself(targetNumber);
     }
 }
        public void OutgoingCall(object sender, OutgoingCallEvent e)
        {
            if (PortStatus != PortStatus.Free || PhoneNumber == e.ReceiverPhoneNumber)
            {
                return;
            }

            PortStatus = PortStatus.Busy;

            OnNotifyStationOfOutgoingCall(new OutgoingCallEvent(PhoneNumber, e.ReceiverPhoneNumber));
        }
Ejemplo n.º 5
0
        public void OnOutgoingCall(object sender, CallEventArgs e)
        {
            if (State == PortStates.Connected)
            {
                State = PortStates.Calling;

                e.Id = Guid.NewGuid();

                Console.WriteLine($"Port {e.SourcePhoneNumber} has received an outgoing call request to {e.TargetPhoneNumber}");
                OutgoingCallEvent?.Invoke(sender, e);
            }
        }
Ejemplo n.º 6
0
 private void OutgoingCall(object sender, CallEventArgs e)
 {
     e = new CallEventArgs(Id, e.TargetNumber);
     OutgoingCallEvent?.Invoke(this, e);
 }
 private void OnNotifyStationOfOutgoingCall(OutgoingCallEvent e)
 {
     NotifyStationOfOutgoingCall?.Invoke(this, e);
 }
 private void OnNotifyPortOfOutgoingCall(OutgoingCallEvent e)
 {
     NotifyPortAboutOutgoingCall?.Invoke(this, e); // Invocation of event that checks
 }
Ejemplo n.º 9
0
 /// <summary>
 /// Method to call other client.
 /// </summary>
 /// <param name="targetNumber">Number to call.</param>
 public void Call(int targetNumber)
 {
     OutgoingCallEvent?.Invoke(this, new CallEventArgs(Guid.NewGuid(), targetNumber));
 }