private static void HandleRegisterProxy <TCoordinator>(this TCoordinator coordinator, PersistentShardCoordinator.RegisterProxy registerProxy) where TCoordinator : IShardCoordinator { var proxy = registerProxy.ShardRegionProxy; coordinator.Log.Debug("ShardRegion proxy registered: [{0}]", proxy); if (coordinator.CurrentState.RegionProxies.Contains(proxy)) { proxy.Tell(new PersistentShardCoordinator.RegisterAck(coordinator.Self)); } else { var context = coordinator.Context; var self = coordinator.Self; coordinator.Update(new PersistentShardCoordinator.ShardRegionProxyRegistered(proxy), e => { coordinator.CurrentState = coordinator.CurrentState.Updated(e); context.Watch(proxy); proxy.Tell(new PersistentShardCoordinator.RegisterAck(self)); }); } }