public TestableDebugHub(Mock<IContext> mockDbContext) : base(mockDbContext.Object) { const string connectionId = "1234"; const string hubName = "debug"; var mockConn = new Mock<IConnection>(); var mockUser = new Mock<IPrincipal>(); var mockCookies = new Mock<IRequestCookieCollection>(); var mockRequest = new Mock<IRequest>(); mockRequest.Setup(r => r.User).Returns(mockUser.Object); mockRequest.Setup(r => r.Cookies).Returns(mockCookies.Object); Clients = new ClientProxy(mockConn.Object, hubName); Groups = new GroupManager(mockConn.Object, hubName); Context = new HubCallerContext(mockRequest.Object, connectionId); var trackingDict = new TrackingDictionary(); Caller = new StatefulSignalProxy(mockConn.Object, connectionId, hubName, trackingDict); }
/// <summary> /// Handles all requests for <see cref="PersistentConnection"/>s. /// </summary> /// <param name="context">The <see cref="HostContext"/> for the current request.</param> /// <returns>A <see cref="Task"/> that completes when the <see cref="PersistentConnection"/> pipeline is complete.</returns> /// <exception cref="T:System.InvalidOperationException"> /// Thrown if connection wasn't initialized. /// Thrown if the transport wasn't specified. /// Thrown if the connection id wasn't specified. /// </exception> public virtual Task ProcessRequestAsync(HostContext context) { if (!_initialized) { throw new InvalidOperationException("Connection not initialized."); } if (IsNegotiationRequest(context.Request)) { return(ProcessNegotiationRequest(context)); } _transport = GetTransport(context); if (_transport == null) { throw new InvalidOperationException("Protocol error: Unknown transport."); } string connectionId = _transport.ConnectionId; // If there's no connection id then this is a bad request if (String.IsNullOrEmpty(connectionId)) { throw new InvalidOperationException("Protocol error: Missing connection id."); } var groups = new List <string>(_transport.Groups); Connection connection = CreateConnection(connectionId, groups, context.Request); Connection = connection; Groups = new GroupManager(connection, DefaultSignal); _transport.TransportConnected = () => { var command = new ServerCommand { Type = ServerCommandType.RemoveConnection, Value = connectionId }; return(_serverMessageHandler.SendCommand(command)); }; _transport.Connected = () => { return(OnConnectedAsync(context.Request, connectionId).OrEmpty()); }; _transport.Reconnected = () => { return(OnReconnectedAsync(context.Request, groups, connectionId).OrEmpty()); }; _transport.Received = data => { return(OnReceivedAsync(context.Request, connectionId, data).OrEmpty()); }; _transport.Disconnected = () => { return(OnDisconnectAsync(connectionId).OrEmpty()); }; return(_transport.ProcessRequest(connection).OrEmpty().Catch(_allErrorsTotalCounter, _allErrorsPerSecCounter)); }
/// <summary> /// Handles all requests for <see cref="PersistentConnection"/>s. /// </summary> /// <param name="context">The <see cref="HostContext"/> for the current request.</param> /// <returns>A <see cref="Task"/> that completes when the <see cref="PersistentConnection"/> pipeline is complete.</returns> /// <exception cref="T:System.InvalidOperationException"> /// Thrown if connection wasn't initialized. /// Thrown if the transport wasn't specified. /// Thrown if the connection id wasn't specified. /// </exception> public virtual Task ProcessRequestAsync(HostContext context) { if (!_initialized) { throw new InvalidOperationException("Connection not initialized."); } if (IsNegotiationRequest(context.Request)) { return ProcessNegotiationRequest(context); } _transport = GetTransport(context); if (_transport == null) { throw new InvalidOperationException("Protocol error: Unknown transport."); } string connectionId = _transport.ConnectionId; // If there's no connection id then this is a bad request if (String.IsNullOrEmpty(connectionId)) { throw new InvalidOperationException("Protocol error: Missing connection id."); } var groups = new List<string>(_transport.Groups); Connection connection = CreateConnection(connectionId, groups, context.Request); Connection = connection; Groups = new GroupManager(connection, DefaultSignal); _transport.TransportConnected = () => { var command = new ServerCommand { Type = ServerCommandType.RemoveConnection, Value = connectionId }; return _serverMessageHandler.SendCommand(command); }; _transport.Connected = () => { return OnConnectedAsync(context.Request, connectionId); }; _transport.Reconnected = () => { return OnReconnectedAsync(context.Request, groups, connectionId); }; _transport.Received = data => { return OnReceivedAsync(context.Request, connectionId, data); }; _transport.Error = OnErrorAsync; _transport.Disconnected = () => { return OnDisconnectAsync(connectionId); }; return _transport.ProcessRequest(connection) ?? TaskAsyncHelper.Empty; }
/// <summary> /// Handles all requests for <see cref="PersistentConnection"/>s. /// </summary> /// <param name="context">The <see cref="HostContext"/> for the current request.</param> /// <returns>A <see cref="Task"/> that completes when the <see cref="PersistentConnection"/> pipeline is complete.</returns> /// <exception cref="T:System.InvalidOperationException"> /// Thrown if connection wasn't initialized. /// Thrown if the transport wasn't specified. /// Thrown if the connection id wasn't specified. /// </exception> public virtual Task ProcessRequestAsync(HostContext context) { if (!_initialized) { throw new InvalidOperationException("Connection not initialized."); } if (IsNegotiationRequest(context.Request)) { return ProcessNegotiationRequest(context); } _transport = GetTransport(context); if (_transport == null) { throw new InvalidOperationException("Protocol error: Unknown transport."); } string connectionId = _transport.ConnectionId; // If there's no connection id then this is a bad request if (String.IsNullOrEmpty(connectionId)) { throw new InvalidOperationException("Protocol error: Missing connection id."); } IEnumerable<string> signals = GetSignals(connectionId); IEnumerable<string> groups = OnRejoiningGroups(context.Request, _transport.Groups, connectionId); Connection connection = CreateConnection(connectionId, signals, groups); Connection = connection; Groups = new GroupManager(connection, DefaultSignal); _transport.TransportConnected = () => { var command = new ServerCommand { Type = ServerCommandType.RemoveConnection, Value = connectionId }; return _serverMessageHandler.SendCommand(command); }; _transport.Connected = () => { return OnConnectedAsync(context.Request, connectionId).OrEmpty(); }; _transport.Reconnected = () => { return OnReconnectedAsync(context.Request, connectionId).OrEmpty(); }; _transport.Received = data => { return OnReceivedAsync(context.Request, connectionId, data).OrEmpty(); }; _transport.Disconnected = () => { return OnDisconnectAsync(context.Request, connectionId).OrEmpty(); }; return _transport.ProcessRequest(connection).OrEmpty().Catch(_counters.ErrorsAllTotal, _counters.ErrorsAllPerSec); }