/// <summary> /// Applies configurations on connector /// </summary> private void ConfigureConnector(HmqStickyConnector connector) { connector.Observer.Configurator = _configurator; connector.AutoSubscribe = _autoSubscribe; connector.DisconnectionOnAutoJoinFailure = _disconnectOnSubscribeFailure; if (_contentSerializer != null) { connector.ContentSerializer = _contentSerializer; } foreach (string host in _hosts) { connector.AddHost(host); } if (_connected != null) { connector.Connected += new ConnectionEventMapper(connector, _connected).Action; } if (_disconnected != null) { connector.Disconnected += new ConnectionEventMapper(connector, _disconnected).Action; } if (_error != null) { connector.ExceptionThrown += new ExceptionEventMapper(connector, _error).Action; } }
/// <summary> /// Uses horse bus and connects to the server /// </summary> public static IServiceProvider UseHorseBus <TIdentifier>(this IServiceProvider provider) { MicrosoftDependencyConsumerFactory.Provider = provider; HmqStickyConnector <TIdentifier> connector = provider.GetService <HmqStickyConnector <TIdentifier> >(); connector.Run(); return(provider); }
/// <summary> /// Releases all resources /// </summary> internal void Dispose() { _connector = null; _connected = null; _disconnected = null; _error = null; _enhance = null; _hosts.Clear(); _assembyConsumers.Clear(); _individualConsumers.Clear(); }
/// <summary> /// Registers all consumers. /// This method is called if implementation is done without ioc container. /// </summary> private void RegisterConsumers(HmqStickyConnector connector) { foreach (Tuple <ServiceLifetime, Type> pair in _assembyConsumers) { connector.Observer.RegisterAssemblyConsumers(pair.Item2); } foreach (Tuple <ServiceLifetime, Type> pair in _individualConsumers) { connector.Observer.RegisterConsumer(pair.Item2); } }
/// <summary> /// Builds new HmqStickyConnector with defined properties /// </summary> public HmqStickyConnector <TIdentifier> Build <TIdentifier>() { if (_connector != null) { return((HmqStickyConnector <TIdentifier>)_connector); } _connector = new HmqStickyConnector <TIdentifier>(_reconnectInterval, new ConnectorInstanceCreator(_id, _name, _type, _token, _enhance).CreateInstance); ConfigureConnector(_connector); return((HmqStickyConnector <TIdentifier>)_connector); }
/// <summary> /// Builds new HmqStickyConnector with defined properties. /// </summary> public HmqStickyConnector Build() { if (_connector != null) { return(_connector); } _connector = new HmqStickyConnector(_reconnectInterval, new ConnectorInstanceCreator(_id, _name, _type, _token, _enhance).CreateInstance); ConfigureConnector(_connector); if (_serviceContainer == null) { RegisterConsumers(_connector); } return(_connector); }
/// <summary> /// Adds Horse connector with configuration /// </summary> public static IServiceCollection AddHorseBus(this IServiceCollection services, Action <HorseConnectorBuilder> config) { HorseConnectorBuilder builder = new HorseConnectorBuilder(services); config(builder); HmqStickyConnector connector = builder.Build(); AddConsumersMicrosoftDI(services, connector, builder); services.AddSingleton(connector); services.AddSingleton(connector.Bus); services.AddSingleton(connector.Bus.Direct); services.AddSingleton(connector.Bus.Queue); services.AddSingleton(connector.Bus.Route); return(services); }
private static void AddConsumersMicrosoftDI(IServiceCollection services, HmqStickyConnector connector, HorseConnectorBuilder builder) { foreach (Tuple <ServiceLifetime, Type> pair in builder.AssembyConsumers) { IEnumerable <Type> types = connector.Observer .RegisterAssemblyConsumers(() => new MicrosoftDependencyConsumerFactory(pair.Item1), pair.Item2); foreach (Type type in types) { AddConsumerIntoCollection(services, pair.Item1, type); } } foreach (Tuple <ServiceLifetime, Type> pair in builder.IndividualConsumers) { connector.Observer.RegisterConsumer(pair.Item2, () => new MicrosoftDependencyConsumerFactory(pair.Item1)); AddConsumerIntoCollection(services, pair.Item1, pair.Item2); } }
/// <summary> /// Adds Horse connector with configuration /// </summary> public static IServiceCollection AddHorseBus <TIdentifier>(this IServiceCollection services, Action <HorseConnectorBuilder> config) { HorseConnectorBuilder builder = new HorseConnectorBuilder(services); config(builder); HmqStickyConnector <TIdentifier> connector = builder.Build <TIdentifier>(); AddConsumersMicrosoftDI(services, connector, builder); services.AddSingleton(connector); HorseBus <TIdentifier> bus = (HorseBus <TIdentifier>)connector.Bus; services.AddSingleton <IHorseBus <TIdentifier> >(bus); services.AddSingleton <IHorseDirectBus <TIdentifier> >((HorseDirectBus <TIdentifier>)bus.Direct); services.AddSingleton <IHorseQueueBus <TIdentifier> >((HorseQueueBus <TIdentifier>)bus.Queue); services.AddSingleton <IHorseRouteBus <TIdentifier> >((HorseRouteBus <TIdentifier>)bus.Route); return(services); }
/// <summary> /// Creates new connection event wrapper /// </summary> public ExceptionEventMapper(HmqStickyConnector connector, Action <Exception> action) { _connector = connector; _action = action; }
/// <summary> /// Creates new connection event wrapper /// </summary> public ConnectionEventMapper(HmqStickyConnector connector, Action <HmqStickyConnector> action) { _connector = connector; _action = action; }