internal SignalRClientConnection(HubConnection connection, IHubProxy hub) { if (connection == null) { throw new ArgumentNullException(nameof(connection)); } if (hub == null) { throw new ArgumentNullException(nameof(hub)); } _connection = connection; _hub = hub; _subject = new Subject <IClientEvent>(); Events = _subject.AsObservable(); _sender = new SignalRSender(hub, connection, new Metadata()); connection.Error += OnConnectionError; var disposables = new List <IDisposable> { hub.On <MessageEnvelope>("OnNext", e => _subject.OnNext((IClientEvent)e.Payload)), hub.On <Exception>("OnError", _subject.OnError), hub.On("OnCompleted", _subject.OnCompleted), connection }; _disposable = new CompositeDisposable(disposables); }
public Task <LoginResult> Authenticate(string accessToken) { if (string.IsNullOrEmpty(accessToken)) { throw new ArgumentException("Access token cannot be null or empty.", nameof(accessToken)); } EnsureIsNotDisposed(); var token = new JwtSecurityToken(accessToken); var userId = Guid.Parse(token.Subject); var meta = new Metadata { AccessToken = accessToken }; var sender = new SignalRSender(_hub, _connection, meta); var result = new LoginResult(new UserProxy(sender), userId, accessToken); return(Task.FromResult(result)); }