public void Handle(ClientMessage.ConnectToPersistentSubscription message) { if (!_started) { return; } var streamAccess = _readIndex.CheckStreamAccess( message.EventStreamId, StreamAccessType.Read, message.User); if (!streamAccess.Granted) { message.Envelope.ReplyWith(new ClientMessage.SubscriptionDropped(message.CorrelationId, SubscriptionDropReason.AccessDenied)); return; } List <PersistentSubscription> subscribers; if (!_subscriptionTopics.TryGetValue(message.EventStreamId, out subscribers)) { message.Envelope.ReplyWith(new ClientMessage.SubscriptionDropped(message.CorrelationId, SubscriptionDropReason.NotFound)); return; } var key = BuildSubscriptionGroupKey(message.EventStreamId, message.SubscriptionId); PersistentSubscription subscription; if (!_subscriptionsById.TryGetValue(key, out subscription)) { message.Envelope.ReplyWith(new ClientMessage.SubscriptionDropped(message.CorrelationId, SubscriptionDropReason.NotFound)); return; } if (subscription.HasReachedMaxClientCount) { message.Envelope.ReplyWith(new ClientMessage.SubscriptionDropped(message.CorrelationId, SubscriptionDropReason.SubscriberMaxCountReached)); return; } Log.Debug("New connection to persistent subscription {subscriptionKey} by {connectionId}", key, message.ConnectionId); var lastEventNumber = _readIndex.GetStreamLastEventNumber(message.EventStreamId); var lastCommitPos = _readIndex.LastIndexedPosition; var subscribedMessage = new ClientMessage.PersistentSubscriptionConfirmation(key, message.CorrelationId, lastCommitPos, lastEventNumber); message.Envelope.ReplyWith(subscribedMessage); var name = message.User == null ? "anonymous" : message.User.Identity.Name; subscription.AddClient(message.CorrelationId, message.ConnectionId, message.ConnectionName, message.Envelope, message.AllowedInFlightMessages, name, message.From); }
private void HandleAsNonMaster(ClientMessage.ConnectToPersistentSubscription message) { if (_master == null) { DenyRequestBecauseNotReady(message.Envelope, message.CorrelationId); } else { DenyRequestBecauseNotMaster(message.CorrelationId, message.Envelope); } }
protected override TcpPackage CreateSubscriptionPackage() { var dto = new ClientMessage.ConnectToPersistentSubscription(_groupName, _streamId, _bufferSize); return(new TcpPackage(TcpCommand.ConnectToPersistentSubscription, _userCredentials != null ? TcpFlags.Authenticated : TcpFlags.None, _correlationId, _userCredentials != null ? _userCredentials.Username : null, _userCredentials != null ? _userCredentials.Password : null, dto.Serialize())); }