PageRenderTime 45ms CodeModel.GetById 18ms RepoModel.GetById 1ms app.codeStats 0ms

/SignalR/Hubs/Lookup/DefaultHubManager.cs

https://github.com/kpmrafeeq/SignalR
C# | 93 lines | 74 code | 19 blank | 0 comment | 13 complexity | 3d9a7f93eac6998e913cfe71408a9dc2 MD5 | raw file
Possible License(s): MIT
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using Newtonsoft.Json.Linq;
  5. namespace SignalR.Hubs
  6. {
  7. public class DefaultHubManager : IHubManager
  8. {
  9. private readonly IEnumerable<IMethodDescriptorProvider> _methodProviders;
  10. private readonly IHubActivator _activator;
  11. private readonly IEnumerable<IHubDescriptorProvider> _hubProviders;
  12. public DefaultHubManager(IDependencyResolver resolver)
  13. {
  14. _hubProviders = resolver.ResolveAll<IHubDescriptorProvider>();
  15. _methodProviders = resolver.ResolveAll<IMethodDescriptorProvider>();
  16. _activator = resolver.Resolve<IHubActivator>();
  17. }
  18. public HubDescriptor GetHub(string hubName)
  19. {
  20. HubDescriptor descriptor = null;
  21. if(_hubProviders.FirstOrDefault(p => p.TryGetHub(hubName, out descriptor)) != null)
  22. {
  23. return descriptor;
  24. }
  25. return null;
  26. }
  27. public IEnumerable<HubDescriptor> GetHubs(Func<HubDescriptor, bool> predicate = null)
  28. {
  29. var hubs = _hubProviders.SelectMany(p => p.GetHubs());
  30. if(predicate != null)
  31. {
  32. return hubs.Where(predicate);
  33. }
  34. return hubs;
  35. }
  36. public MethodDescriptor GetHubMethod(string hubName, string method, params IJsonValue[] parameters)
  37. {
  38. HubDescriptor hub = GetHub(hubName);
  39. if (hub == null)
  40. {
  41. return null;
  42. }
  43. MethodDescriptor descriptor = null;
  44. if (_methodProviders.FirstOrDefault(p => p.TryGetMethod(hub, method, out descriptor, parameters)) != null)
  45. {
  46. return descriptor;
  47. }
  48. return null;
  49. }
  50. public IEnumerable<MethodDescriptor> GetHubMethods(string hubName, Func<MethodDescriptor, bool> predicate = null)
  51. {
  52. HubDescriptor hub = GetHub(hubName);
  53. if (hub == null)
  54. {
  55. return null;
  56. }
  57. var methods = _methodProviders.SelectMany(p => p.GetMethods(hub));
  58. if(predicate != null)
  59. {
  60. return methods.Where(predicate);
  61. }
  62. return methods;
  63. }
  64. public IHub ResolveHub(string hubName)
  65. {
  66. HubDescriptor hub = GetHub(hubName);
  67. return hub == null ? null : _activator.Create(hub);
  68. }
  69. public IEnumerable<IHub> ResolveHubs()
  70. {
  71. return GetHubs().Select(hub => _activator.Create(hub));
  72. }
  73. }
  74. }