PageRenderTime 37ms CodeModel.GetById 14ms RepoModel.GetById 0ms app.codeStats 0ms

/SignalR/ConnectionManager.cs

https://github.com/kpmrafeeq/SignalR
C# | 87 lines | 49 code | 10 blank | 28 comment | 1 complexity | ac34bd454a5f2a54cce0699073363be0 MD5 | raw file
Possible License(s): MIT
  1. using System;
  2. using System.Linq;
  3. using SignalR.Hubs;
  4. using SignalR.Infrastructure;
  5. namespace SignalR
  6. {
  7. /// <summary>
  8. /// Default <see cref="IConnectionManager"/> implementation.
  9. /// </summary>
  10. public class ConnectionManager : IConnectionManager
  11. {
  12. private readonly IDependencyResolver _resolver;
  13. /// <summary>
  14. /// Initializes a new instance of the <see cref="ConnectionManager"/> class.
  15. /// </summary>
  16. /// <param name="resolver">The <see cref="IDependencyResolver"/>.</param>
  17. public ConnectionManager(IDependencyResolver resolver)
  18. {
  19. _resolver = resolver;
  20. }
  21. /// <summary>
  22. /// Returns a <see cref="IPersistentConnectionContext"/> for the <see cref="PersistentConnection"/>.
  23. /// </summary>
  24. /// <typeparam name="T">Type of the <see cref="PersistentConnection"/></typeparam>
  25. /// <returns>A <see cref="IPersistentConnectionContext"/> for the <see cref="PersistentConnection"/>.</returns>
  26. public IPersistentConnectionContext GetConnectionContext<T>() where T : PersistentConnection
  27. {
  28. return GetConnection(typeof(T));
  29. }
  30. /// <summary>
  31. /// Returns a <see cref="IPersistentConnectionContext"/> for the <see cref="PersistentConnection"/>.
  32. /// </summary>
  33. /// <param name="type">Type of the <see cref="PersistentConnection"/></param>
  34. /// <returns>A <see cref="IPersistentConnectionContext"/> for the <see cref="PersistentConnection"/>.</returns>
  35. public IPersistentConnectionContext GetConnection(Type type)
  36. {
  37. string connectionName = type.FullName;
  38. IConnection connection = GetConnection(connectionName);
  39. return new PersistentConnectionContext(connection, new GroupManager(connection, connectionName));
  40. }
  41. /// <summary>
  42. /// Returns a <see cref="IHubContext"/> for the specified <see cref="IHub"/>.
  43. /// </summary>
  44. /// <typeparam name="T">Type of the <see cref="IHub"/></typeparam>
  45. /// <returns>a <see cref="IHubContext"/> for the specified <see cref="IHub"/></returns>
  46. public IHubContext GetHubContext<T>() where T : IHub
  47. {
  48. return GetHubContext(typeof(T).GetHubName());
  49. }
  50. /// <summary>
  51. /// Returns a <see cref="IHubContext"/>for the specified hub.
  52. /// </summary>
  53. /// <param name="hubName">Name of the hub</param>
  54. /// <returns>a <see cref="IHubContext"/> for the specified hub</returns>
  55. public IHubContext GetHubContext(string hubName)
  56. {
  57. var connection = GetConnection(connectionName: null);
  58. var hubManager = _resolver.Resolve<IHubManager>();
  59. HubDescriptor hubDescriptor = hubManager.EnsureHub(hubName);
  60. return new HubContext(new ClientProxy(connection, hubDescriptor.Name),
  61. new GroupManager(connection, hubName));
  62. }
  63. private IConnection GetConnection(string connectionName)
  64. {
  65. var signals = connectionName == null ? Enumerable.Empty<string>() : new[] { connectionName };
  66. // Give this a unique id
  67. var connectionId = Guid.NewGuid().ToString();
  68. return new Connection(_resolver.Resolve<IMessageBus>(),
  69. _resolver.Resolve<IJsonSerializer>(),
  70. connectionName,
  71. connectionId,
  72. signals,
  73. Enumerable.Empty<string>(),
  74. _resolver.Resolve<ITraceManager>());
  75. }
  76. }
  77. }