// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.md in the project root for license information. using System; using System.Diagnostics.CodeAnalysis; using System.Threading; using Microsoft.AspNet.SignalR; using Microsoft.AspNet.SignalR.Hosting; using Microsoft.AspNet.SignalR.Owin; using Microsoft.AspNet.SignalR.Owin.Handlers; namespace Owin { [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Owin", Justification = "The owin namespace is for consistentcy.")] public static class OwinExtensions { public static IAppBuilder MapHubs(this IAppBuilder builder) { return builder.MapHubs(new HubConfiguration()); } public static IAppBuilder MapHubs(this IAppBuilder builder, HubConfiguration configuration) { return builder.MapHubs("/signalr", configuration); } public static IAppBuilder MapHubs(this IAppBuilder builder, string path, HubConfiguration configuration) { if (configuration == null) { throw new ArgumentNullException("configuration"); } return builder.UseType(path, configuration); } [SuppressMessage("Microsoft.Design", "CA1004:GenericMethodsShouldProvideTypeParameter", Justification = "The type parameter is syntactic sugar")] public static IAppBuilder MapConnection(this IAppBuilder builder, string url) where T : PersistentConnection { return builder.MapConnection(url, typeof(T), new ConnectionConfiguration()); } [SuppressMessage("Microsoft.Design", "CA1004:GenericMethodsShouldProvideTypeParameter", Justification = "The type parameter is syntactic sugar")] public static IAppBuilder MapConnection(this IAppBuilder builder, string url, ConnectionConfiguration configuration) where T : PersistentConnection { return builder.MapConnection(url, typeof(T), configuration); } public static IAppBuilder MapConnection(this IAppBuilder builder, string url, Type connectionType, ConnectionConfiguration configuration) { if (configuration == null) { throw new ArgumentNullException("configuration"); } return builder.UseType(url, connectionType, configuration); } private static IAppBuilder UseType(this IAppBuilder builder, params object[] args) { if (args.Length > 0) { var configuration = args[args.Length - 1] as ConnectionConfiguration; if (configuration == null) { throw new ArgumentException(Resources.Error_NoConfiguration); } var resolver = configuration.Resolver; if (resolver == null) { throw new ArgumentException(Resources.Error_NoDepenendeyResolver); } var env = builder.Properties; CancellationToken token = env.GetShutdownToken(); string instanceName = env.GetAppInstanceName(); resolver.InitializeHost(instanceName, token); } return builder.Use(typeof(T), args); } } }