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 } }
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); } }
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)); }
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); } }
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 }
/// <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)); }