PageRenderTime 46ms CodeModel.GetById 25ms RepoModel.GetById 1ms app.codeStats 0ms

/src/Microsoft.AspNet.SignalR.Core/Hubs/Lookup/DefaultHubManager.cs

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