public ClientConnectionManagerTests() { var hubConfig = new HubConfiguration(); var transport = new AzureTransportManager(hubConfig.Resolver); hubConfig.Resolver.Register(typeof(ITransportManager), () => transport); _clientConnectionManager = new ClientConnectionManager(hubConfig); }
public ServiceConnectionTests(ITestOutputHelper output) : base(output) { var hubConfig = new HubConfiguration(); var transport = new AzureTransportManager(hubConfig.Resolver); hubConfig.Resolver.Register(typeof(ITransportManager), () => transport); _clientConnectionManager = new TestConnectionManager(); }
private ClientConnectionManager CreateClientConnectionManager() { var hubConfig = new HubConfiguration { Resolver = new DefaultDependencyResolver() }; var transport = new AzureTransportManager(hubConfig.Resolver); hubConfig.Resolver.Register(typeof(ITransportManager), () => transport); return(new ClientConnectionManager(hubConfig, null)); }
public ClientConnectionManagerTests() { var hubConfig = new HubConfiguration { Resolver = new DefaultDependencyResolver() }; var transport = new AzureTransportManager(hubConfig.Resolver); hubConfig.Resolver.Register(typeof(ITransportManager), () => transport); _clientConnectionManager = new ClientConnectionManager(hubConfig, null); }
public async Task ServiceConnectionDispatchTest() { int count = 0; using (StartVerifiableLog(out var loggerFactory, LogLevel.Debug)) { var hubConfig = Utility.GetTestHubConfig(loggerFactory); var atm = new AzureTransportManager(hubConfig.Resolver); hubConfig.Resolver.Register(typeof(ITransportManager), () => atm); var clientConnectionManager = new TestClientConnectionManager(); using (var proxy = new TestServiceConnectionProxy(clientConnectionManager, loggerFactory: loggerFactory)) { // start the server connection await proxy.StartServiceAsync().OrTimeout(); var clientConnection = Guid.NewGuid().ToString("N"); // Application layer sends OpenConnectionMessage var openConnectionMessage = new OpenConnectionMessage(clientConnection, new Claim[0], null, "?transport=webSockets"); var task = proxy.WaitForClientConnectAsync(clientConnection).OrTimeout(); await proxy.WriteMessageAsync(openConnectionMessage); await task; while (count < 1000) { task = proxy.WaitForApplicationMessageAsync(clientConnection).OrTimeout(); await proxy.WriteMessageAsync(new ConnectionDataMessage(clientConnection, "Hello World".GenerateSingleFrameBuffer())); await task; count++; } task = proxy.WaitForClientDisconnectAsync(clientConnection).OrTimeout(); await proxy.WriteMessageAsync(new CloseConnectionMessage(clientConnection)); await task; // Validate in transport for 1000 data messages. clientConnectionManager.CurrentTransports.TryGetValue(clientConnection, out var transport); Assert.NotNull(transport); await transport.WaitOnDisconnected().OrTimeout(); Assert.Equal(transport.MessageCount, count); } } }
private static ServiceHubDispatcher PrepareAndGetDispatcher(HubConfiguration configuration, ServiceOptions options, IServiceEndpointManager endpoint, IEndpointRouter router, string applicationName, IReadOnlyList <string> hubs, ILoggerFactory loggerFactory) { // TODO: Using IOptions looks wierd, thinking of a way removing it // share the same object all through var serviceOptions = Options.Create(options); // For safety, ALWAYS register abstract classes or interfaces // Some third-party DI frameworks such as Ninject, implicit self-binding concrete types: // https://github.com/ninject/ninject/wiki/dependency-injection-with-ninject#skipping-the-type-binding-bit--implicit-self-binding-of-concrete-types configuration.Resolver.Register(typeof(IOptions <ServiceOptions>), () => serviceOptions); var serviceProtocol = new ServiceProtocol(); configuration.Resolver.Register(typeof(IServiceProtocol), () => serviceProtocol); var scm = new ServiceConnectionManager(applicationName, hubs); configuration.Resolver.Register(typeof(Microsoft.Azure.SignalR.AspNet.IServiceConnectionManager), () => scm); var ccm = new ClientConnectionManager(configuration); configuration.Resolver.Register(typeof(IClientConnectionManager), () => ccm); var atm = new AzureTransportManager(configuration.Resolver); configuration.Resolver.Register(typeof(ITransportManager), () => atm); var parser = new SignalRMessageParser(hubs, configuration.Resolver); configuration.Resolver.Register(typeof(IMessageParser), () => parser); var smb = new ServiceMessageBus(configuration.Resolver); configuration.Resolver.Register(typeof(IMessageBus), () => smb); if (hubs?.Count > 0) { return(new ServiceHubDispatcher(hubs, serviceProtocol, scm, ccm, endpoint, router, serviceOptions, loggerFactory)); } else { loggerFactory.CreateLogger <IAppBuilder>().Log(LogLevel.Warning, "No hubs found."); return(null); } }
private static void RegisterServiceObjects(HubConfiguration configuration, ServiceOptions options, string applicationName, IReadOnlyList <string> hubs) { // TODO: Using IOptions looks wierd, thinking of a way removing it // share the same object all through var serviceOptions = Options.Create(options); // For safety, ALWAYS register abstract classes or interfaces // Some third-party DI frameworks such as Ninject, implicit self-binding concrete types: // https://github.com/ninject/ninject/wiki/dependency-injection-with-ninject#skipping-the-type-binding-bit--implicit-self-binding-of-concrete-types configuration.Resolver.Register(typeof(IOptions <ServiceOptions>), () => serviceOptions); var serviceProtocol = new ServiceProtocol(); configuration.Resolver.Register(typeof(IServiceProtocol), () => serviceProtocol); var provider = new EmptyProtectedData(); configuration.Resolver.Register(typeof(IProtectedData), () => provider); var endpoint = new ServiceEndpointProvider(serviceOptions.Value); configuration.Resolver.Register(typeof(IServiceEndpointProvider), () => endpoint); var scm = new ServiceConnectionManager(applicationName, hubs); configuration.Resolver.Register(typeof(IServiceConnectionManager), () => scm); var ccm = new ClientConnectionManager(configuration); configuration.Resolver.Register(typeof(IClientConnectionManager), () => ccm); var atm = new AzureTransportManager(configuration.Resolver); configuration.Resolver.Register(typeof(ITransportManager), () => atm); var parser = new SignalRMessageParser(hubs, configuration.Resolver); configuration.Resolver.Register(typeof(IMessageParser), () => parser); var smb = new ServiceMessageBus(configuration.Resolver); configuration.Resolver.Register(typeof(IMessageBus), () => smb); }