/// <summary> /// Creates, builds and returns connector /// </summary> public override WebSocketModelConnector Build() { if (Connector != null) { return(Connector); } Connector = new WebSocketModelConnector <TIdentifier>(ReconnectInterval); ConfigureConnector(Connector); return(Connector); }
/// <summary> /// Creates new websocket connector and registers IWebSocketBus to the MSDI container. /// </summary> public static IServiceCollection AddWebSocketClient <TIdentifer>(this IServiceCollection services, Action <HorseWebSocketBuilder> config) { HorseWebSocketBuilder <TIdentifer> builder = new HorseWebSocketBuilder <TIdentifer>(); config(builder); WebSocketModelConnector <TIdentifer> connector = (WebSocketModelConnector <TIdentifer>)builder.Build(); AddMSDIHandlers(services, connector, builder); services.AddSingleton(connector); services.AddSingleton <IWebSocketBus <TIdentifer> >(connector); return(services); }
private static void AddMSDIHandlers(IServiceCollection services, WebSocketModelConnector connector, HorseWebSocketBuilder builder) { foreach (Tuple <ServiceLifetime, Type> pair in builder.AssembyConsumers) { List <Type> types = connector.Observer.ResolveWebSocketHandlerTypes(pair.Item2); foreach (Type type in types) { AddHandlerIntoMSDI(services, pair.Item1, type); } } foreach (Tuple <ServiceLifetime, Type, Type> tuple in builder.IndividualConsumers) { AddHandlerIntoMSDI(services, tuple.Item1, tuple.Item2); } }
/// <summary> /// Uses Websocket Client and connects to the server. /// This method should be used for only MSDI Provider. /// </summary> public static IServiceProvider UseWebSocketClient(this IServiceProvider provider) { WebSocketModelConnector connector = provider.GetService <WebSocketModelConnector>(); connector.ServiceProvider = provider; foreach (Tuple <ServiceLifetime, Type> pair in connector.Builder.AssembyConsumers) { connector.Observer.RegisterWebSocketHandlers(type => connector.ServiceProvider.GetService(type), pair.Item2); } foreach (Tuple <ServiceLifetime, Type, Type> tuple in connector.Builder.IndividualConsumers) { connector.Observer.RegisterWebSocketHandler(tuple.Item2, tuple.Item3, null, type => connector.ServiceProvider.GetService(type)); } connector.Builder = null; connector.Run(); return(provider); }