Skip to content
This repository has been archived by the owner on Jul 26, 2022. It is now read-only.

Commit

Permalink
Added service events, adding unit test host, refactored service confi…
Browse files Browse the repository at this point in the history
…gurators
  • Loading branch information
phatboyg committed Sep 14, 2012
1 parent f8fbe86 commit 0b3fd31
Show file tree
Hide file tree
Showing 29 changed files with 929 additions and 208 deletions.
43 changes: 24 additions & 19 deletions src/Topshelf.Rehab/RehabServiceExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,10 @@
namespace Topshelf
{
using System;
using Builders;
using HostConfigurators;
using Rehab;
using Runtime;
using ServiceConfigurators;

public static class RehabServiceExtensions
{
Expand All @@ -26,44 +26,49 @@ public static HostConfigurator RehabService<T>(this HostConfigurator configurato
if (configurator == null)
throw new ArgumentNullException("configurator");

ServiceBuilderFactory factory = settings => new ControlServiceBuilder<T>(x => new T());
ServiceBuilderFactory serviceBuilderFactory = ServiceExtensions.CreateServiceBuilderFactory(x => new T(),
NoCallback);

ServiceBuilderFactory updaterFactory = settings => new RehabServiceBuilder<T>(factory);

configurator.UseServiceBuilder(updaterFactory);

return configurator;
return RehabService<T>(configurator, serviceBuilderFactory);
}

public static HostConfigurator RehabService<T>(this HostConfigurator configurator, Func<T> serviceFactory)
public static HostConfigurator RehabService<T>(this HostConfigurator configurator, Func<T> factory)
where T : class, ServiceControl
{
if (configurator == null)
throw new ArgumentNullException("configurator");

ServiceBuilderFactory factory = settings => new ControlServiceBuilder<T>(x => serviceFactory());

ServiceBuilderFactory updaterFactory = settings => new RehabServiceBuilder<T>(factory);
ServiceBuilderFactory serviceBuilderFactory = ServiceExtensions.CreateServiceBuilderFactory(x => factory(),
NoCallback);

configurator.UseServiceBuilder(updaterFactory);

return configurator;
return RehabService<T>(configurator, serviceBuilderFactory);
}

public static HostConfigurator RehabService<T>(this HostConfigurator configurator,
Func<HostSettings, T> serviceFactory)
public static HostConfigurator RehabService<T>(this HostConfigurator configurator, Func<HostSettings, T> factory)
where T : class, ServiceControl
{
if (configurator == null)
throw new ArgumentNullException("configurator");

ServiceBuilderFactory factory = settings => new ControlServiceBuilder<T>(x => serviceFactory(x));
ServiceBuilderFactory serviceBuilderFactory = ServiceExtensions.CreateServiceBuilderFactory(factory,
NoCallback);

ServiceBuilderFactory updaterFactory = settings => new RehabServiceBuilder<T>(factory);
return RehabService<T>(configurator, serviceBuilderFactory);
}

public static HostConfigurator RehabService<T>(this HostConfigurator configurator,
ServiceBuilderFactory serviceBuilderFactory)
where T : class
{
ServiceBuilderFactory rehabFactory = settings => new RehabServiceBuilder<T>(serviceBuilderFactory);

configurator.UseServiceBuilder(updaterFactory);
configurator.UseServiceBuilder(rehabFactory);

return configurator;
}

static void NoCallback(ServiceConfigurator configurator)
{
}
}
}
4 changes: 3 additions & 1 deletion src/Topshelf.Supervise/SuperviseConfigurator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,14 @@
namespace Topshelf
{
using HostConfigurators;
using ServiceConfigurators;

/// <summary>
/// Configures the service that is to be supervised, including any of the parameters
/// of the supervision service
/// </summary>
public interface SuperviseConfigurator
public interface SuperviseConfigurator :
ServiceConfigurator
{
/// <summary>
/// Sets the service builder to use for creating the service
Expand Down
6 changes: 4 additions & 2 deletions src/Topshelf.Supervise/SuperviseServiceBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,12 @@ public class SuperviseServiceBuilder :
ServiceBuilder
{
readonly ServiceBuilderFactory _serviceBuilderFactory;
readonly ServiceEvents _serviceEvents;

public SuperviseServiceBuilder(ServiceBuilderFactory serviceBuilderFactory)
public SuperviseServiceBuilder(ServiceBuilderFactory serviceBuilderFactory, ServiceEvents serviceEvents)
{
_serviceBuilderFactory = serviceBuilderFactory;
_serviceEvents = serviceEvents;
}

public ServiceHandle Build(HostSettings settings)
Expand All @@ -35,7 +37,7 @@ public ServiceHandle Build(HostSettings settings)


var builder = new ControlServiceBuilder<SuperviseService>(
x => new SuperviseService(x, serviceAvailability, _serviceBuilderFactory));
x => new SuperviseService(x, serviceAvailability, _serviceBuilderFactory), _serviceEvents);

ServiceHandle serviceHandle = builder.Build(settings);

Expand Down
4 changes: 3 additions & 1 deletion src/Topshelf.Supervise/SuperviseServiceConfigurator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,10 @@ namespace Topshelf.Supervise
using Builders;
using Configurators;
using HostConfigurators;
using ServiceConfigurators;

public class SuperviseServiceConfigurator :
ServiceConfiguratorBase,
SuperviseConfigurator,
Configurator
{
Expand All @@ -36,7 +38,7 @@ public void UseServiceBuilder(ServiceBuilderFactory serviceBuilderFactory)

public ServiceBuilder Build()
{
return new SuperviseServiceBuilder(_serviceBuilderFactory);
return new SuperviseServiceBuilder(_serviceBuilderFactory, ServiceEvents);
}
}
}
94 changes: 69 additions & 25 deletions src/Topshelf.Supervise/SuperviseServiceExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,6 @@
namespace Topshelf
{
using System;
using System.Linq;
using Builders;
using Configurators;
using HostConfigurators;
using Runtime;
using ServiceConfigurators;
Expand All @@ -28,9 +25,25 @@ public static SuperviseConfigurator Service<T>(this SuperviseConfigurator config
if (configurator == null)
throw new ArgumentNullException("configurator");

ServiceBuilderFactory factory = settings => new ControlServiceBuilder<T>(x => new T());
ServiceBuilderFactory serviceBuilderFactory = ServiceExtensions.CreateServiceBuilderFactory(x => new T(),
NoCallback);

configurator.UseServiceBuilder(factory);
configurator.UseServiceBuilder(serviceBuilderFactory);

return configurator;
}

public static SuperviseConfigurator Service<T>(this SuperviseConfigurator configurator,
Action<ServiceConfigurator> callback)
where T : class, ServiceControl, new()
{
if (configurator == null)
throw new ArgumentNullException("configurator");

ServiceBuilderFactory serviceBuilderFactory = ServiceExtensions.CreateServiceBuilderFactory(x => new T(),
callback);

configurator.UseServiceBuilder(serviceBuilderFactory);

return configurator;
}
Expand All @@ -41,9 +54,25 @@ public static SuperviseConfigurator Service<T>(this SuperviseConfigurator config
if (configurator == null)
throw new ArgumentNullException("configurator");

ServiceBuilderFactory factory = settings => new ControlServiceBuilder<T>(x => serviceFactory());
ServiceBuilderFactory serviceBuilderFactory =
ServiceExtensions.CreateServiceBuilderFactory(x => serviceFactory(), NoCallback);

configurator.UseServiceBuilder(factory);
configurator.UseServiceBuilder(serviceBuilderFactory);

return configurator;
}

public static SuperviseConfigurator Service<T>(this SuperviseConfigurator configurator, Func<T> serviceFactory,
Action<ServiceConfigurator> callback)
where T : class, ServiceControl
{
if (configurator == null)
throw new ArgumentNullException("configurator");

ServiceBuilderFactory serviceBuilderFactory =
ServiceExtensions.CreateServiceBuilderFactory(x => serviceFactory(), callback);

configurator.UseServiceBuilder(serviceBuilderFactory);

return configurator;
}
Expand All @@ -55,9 +84,34 @@ public static SuperviseConfigurator Service<T>(this SuperviseConfigurator config
if (configurator == null)
throw new ArgumentNullException("configurator");

ServiceBuilderFactory factory = settings => new ControlServiceBuilder<T>(x => serviceFactory(x));
ServiceBuilderFactory serviceBuilderFactory =
ServiceExtensions.CreateServiceBuilderFactory(serviceFactory, NoCallback);

configurator.UseServiceBuilder(factory);
configurator.UseServiceBuilder(serviceBuilderFactory);

return configurator;
}

public static SuperviseConfigurator Service<T>(this SuperviseConfigurator configurator,
Func<HostSettings, T> serviceFactory, Action<ServiceConfigurator> callback)
where T : class, ServiceControl
{
if (configurator == null)
throw new ArgumentNullException("configurator");

ServiceBuilderFactory serviceBuilderFactory =
ServiceExtensions.CreateServiceBuilderFactory(serviceFactory, callback);

configurator.UseServiceBuilder(serviceBuilderFactory);

return configurator;
}

public static HostConfigurator Service<T>(this HostConfigurator configurator,
ServiceBuilderFactory serviceBuilderFactory)
where T : class
{
configurator.UseServiceBuilder(serviceBuilderFactory);

return configurator;
}
Expand All @@ -69,26 +123,16 @@ public static SuperviseConfigurator Service<TService>(this SuperviseConfigurator
{
if (configurator == null)
throw new ArgumentNullException("configurator");
if (callback == null)
throw new ArgumentNullException("callback");

var serviceConfigurator = new DelegateServiceConfigurator<TService>();

callback(serviceConfigurator);
ServiceBuilderFactory serviceBuilderFactory = ServiceExtensions.CreateServiceBuilderFactory(callback);

configurator.UseServiceBuilder(x =>
{
ConfigurationResult configurationResult =
ValidateConfigurationResult.CompileResults(serviceConfigurator.Validate());
if (configurationResult.Results.Any())
throw new HostConfigurationException("The service was not properly configured");
ServiceBuilder serviceBuilder = serviceConfigurator.Build();
return serviceBuilder;
});
configurator.UseServiceBuilder(serviceBuilderFactory);

return configurator;
}

static void NoCallback(ServiceConfigurator configurator)
{
}
}
}
Loading

0 comments on commit 0b3fd31

Please sign in to comment.