using System; using System.Collections.Generic; using System.Linq; using System.Text; using HeuristicLab.Hive.Contracts.Interfaces; using System.ServiceModel; using HeuristicLab.Hive.Contracts; namespace HeuristicLab.Hive.Server.ServerConsole { internal class ServiceLocator { private static IServerConsoleFacade serverConsoleFacade = null; internal static string Address { get; set; } internal static string Port { get; set; } internal static ISlaveManager GetSlaveManager() { return GetServerConsoleFacade() as ISlaveManager; } internal static IJobManager GetJobManager() { return GetServerConsoleFacade() as IJobManager; } internal static IServerConsoleFacade GetServerConsoleFacade() { if (serverConsoleFacade == null && Address != String.Empty && Port != String.Empty) { ChannelFactory factory = new ChannelFactory( WcfSettings.GetBinding(), new EndpointAddress("net.tcp://" + Address + ":" + Port + "/HiveServerConsole/ServerConsoleFacade")); serverConsoleFacade = factory.CreateChannel(); ((ICommunicationObject)serverConsoleFacade).Faulted += ServiceLocator_Faulted; } return serverConsoleFacade; } static void ServiceLocator_Faulted(object sender, EventArgs e) { ((ICommunicationObject)serverConsoleFacade).Abort(); ((ICommunicationObject)serverConsoleFacade).Faulted -= ServiceLocator_Faulted; serverConsoleFacade = null; } internal static void ShutDownFacade() { serverConsoleFacade = null; } } }