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 uSerialPort(BaudRate _baudrate) { baudrate = _baudrate; checkedPortNames = new List <string>(); port_NewNMEAMessageHandler = new EventHandler <NewNMEAMessageEventArgs>(port_NewNMEAMessage); port_PortErrorHandler = new EventHandler <SerialErrorReceivedEventArgs>(port_PortError); timer = new PrecisionTimer(); timer.Mode = Mode.Periodic; timer.Period = timer_period_ms; timer.Tick += (o, e) => { if (timer_cnt++ > timer_cnt_max) { timer_cnt = 0; if (!_detected) { TryNextPort(); } else { PortTimeout.Rise(this, new EventArgs()); detected = false; if (IsTryAlways) { checkedPortNames.Clear(); TryNextPort(); } } } }; }
private void DisposeTimer(IPort port) { PortTimeout[port].Dispose(); PortTimeout.Remove(port); }