public void HandleEnter() { IListenerSocket listener = null; IConnectedSocket client = null; var connectEndpoint = networkingProxy.CreateEndPoint(clusteringConfiguration.Address, clusteringConfiguration.Port); var hostAllowed = !clusteringConfiguration.ClusteringRole.HasFlag(ClusteringRole.GuestOnly) && IPAddress.IsLoopback(clusteringConfiguration.Address); var guestAllowed = !clusteringConfiguration.ClusteringRole.HasFlag(ClusteringRole.HostOnly); while (listener == null && client == null) { if (hostAllowed && TryCreateHostListener(clusteringConfiguration, out listener)) { break; } if (guestAllowed && TryCreateGuestSocket(connectEndpoint, out client)) { break; } logger.Warn("Unable to either listen/connect to port " + clusteringConfiguration.Port); threadingProxy.Sleep(kRetryInterval); } if (listener != null) { clusteringPhaseManager.Transition(clusteringPhaseFactory.CreateHostPhase(localServiceContainer, listener)); } else { clusteringPhaseManager.Transition(clusteringPhaseFactory.CreateGuestPhase(localServiceContainer, client)); } phaseTransitionedLatch.Release(int.MaxValue); }
private void HandleDispatcherShutdown() { clusteringPhaseManager.Transition(clusteringPhaseFactory.CreateIndeterminatePhase(localServiceContainer)); }