public void Start(int commandServerPort, int feederPort, IBeaconPortAvailability portAvailability) { Commander = new BeaconCommander(); StartListening(commandServerPort, Commander, portAvailability.GetAvailableCommandPortNumbers); Feeder = new BeaconFeeder(); StartListening(feederPort, Feeder, portAvailability.GetAvailableFeederPortNumbers); }
private void StartListening(int assignedPort, IBeaconPort beaconPort, Delegates.GetAvailablePortNumbersHandler portAvailability) { int[] availablePortNumbers = null; bool hasAvailablePortNumbers = false; if (assignedPort > 0) { beaconPort.Start(assignedPort); if (!beaconPort.Started) { (hasAvailablePortNumbers, availablePortNumbers) = portAvailability(assignedPort); } } else { (hasAvailablePortNumbers, availablePortNumbers) = portAvailability(); } if (!beaconPort.Started && !hasAvailablePortNumbers) { throw new Exception("No available port to open!"); } if (!beaconPort.Started && hasAvailablePortNumbers) { foreach (var portNumber in availablePortNumbers) { beaconPort.Start(portNumber); if (beaconPort.Started) { break; } } if (!beaconPort.Started) { throw new Exception("Unable to start beacon!"); } } }