示例#1
0
        public void Handle(ClientMessage.SubscribeToStream msg)
        {
            var streamAccess = _readIndex.CheckStreamAccess(
                msg.EventStreamId.IsEmptyString() ? SystemStreams.AllStream : msg.EventStreamId,
                StreamAccessType.Read,
                msg.User);

            if (streamAccess.Granted)
            {
                var lastEventNumber = msg.EventStreamId.IsEmptyString()
                                        ? (long?)null
                                        : _readIndex.GetStreamLastEventNumber(msg.EventStreamId);
                var lastIndexedPos = _readIndex.LastIndexedPosition;
                SubscribeToStream(msg.CorrelationId, msg.Envelope, msg.ConnectionId, msg.EventStreamId,
                                  msg.ResolveLinkTos, lastIndexedPos, lastEventNumber, EventFilter.None);
                var subscribedMessage =
                    new ClientMessage.SubscriptionConfirmation(msg.CorrelationId, lastIndexedPos, lastEventNumber);
                msg.Envelope.ReplyWith(subscribedMessage);
            }
            else
            {
                msg.Envelope.ReplyWith(
                    new ClientMessage.SubscriptionDropped(msg.CorrelationId, SubscriptionDropReason.AccessDenied));
            }
        }
示例#2
0
        public void CreateSubscription()
        {
            var subscribeMsg = new ClientMessage.SubscribeToStream(Guid.NewGuid(), Guid.NewGuid(),
                                                                   new CallbackEnvelope(x =>
            {
                switch (x.GetType().Name)
                {
                case "SubscriptionConfirmation":
                    SubscriptionsConfirmed.Signal();
                    break;

                case "StreamEventAppeared":
                    EventAppeared.Signal();
                    break;

                case "SubscriptionDropped":
                    break;

                default:
                    Assert.Fail("Unexpected message type :" + x.GetType().Name);
                    break;
                }
            }), Guid.NewGuid(), StreamId, false, SystemAccount.Principal);

            Node.Node.MainQueue.Publish(subscribeMsg);
        }
        protected override TcpPackage CreateSubscriptionPackage()
        {
            var dto = new ClientMessage.SubscribeToStream(_streamId, _resolveLinkTos);

            return(new TcpPackage(
                       TcpCommand.SubscribeToStream, _userCredentials != null ? TcpFlags.Authenticated : TcpFlags.None,
                       _correlationId, _userCredentials != null ? _userCredentials.Username : null,
                       _userCredentials != null ? _userCredentials.Password : null, dto.Serialize()));
        }
示例#4
0
        public void Handle(ClientMessage.SubscribeToStream message)
        {
            List <Tuple <Guid, TcpConnectionManager> > subscribers;

            if (!_subscriptions.TryGetValue(message.EventStreamId, out subscribers))
            {
                subscribers = new List <Tuple <Guid, TcpConnectionManager> >();
                _subscriptions.Add(message.EventStreamId, subscribers);
            }
            subscribers.Add(Tuple.Create(message.CorrelationId, message.Connection));
        }
        public void Handle(ClientMessage.SubscribeToStream msg)
        {
            var lastEventNumber = msg.EventStreamId.IsEmptyString()
                                ? (long?)null
                                : _readIndex.GetStreamLastEventNumber(msg.EventStreamId);
            var lastIndexedPos = _readIndex.LastIndexedPosition;

            SubscribeToStream(msg.CorrelationId, msg.Envelope, msg.ConnectionId, msg.EventStreamId,
                              msg.ResolveLinkTos, lastIndexedPos, lastEventNumber, EventFilter.None);
            var subscribedMessage =
                new ClientMessage.SubscriptionConfirmation(msg.CorrelationId, lastIndexedPos, lastEventNumber);

            msg.Envelope.ReplyWith(subscribedMessage);
        }
示例#6
0
        public Task Subscribe(string stream, Action <RecordedEvent, Position> eventAppeared, Action subscriptionDropped)
        {
            var id     = Guid.NewGuid();
            var source = new TaskCompletionSource <object>();

            if (_subscriptions.TryAdd(id, new Subscription(source, id, stream, eventAppeared, subscriptionDropped)))
            {
                var subscribe = new ClientMessage.SubscribeToStream(stream);
                var pkg       = new TcpPackage(TcpCommand.SubscribeToStream, id, subscribe.Serialize());
                _connection.EnqueueSend(pkg.AsByteArray());
            }
            else
            {
                source.SetException(new Exception("Failed to add subscription. Concurrency failure."));
            }

            return(source.Task);
        }