Beispiel #1
0
        public Announcement Read(ReadAnnouncement request)
        {
            using (var connection = Connections.ConnectToInitializedTopic(request.TopicName))
            {
                var topicSubscriber = connection.FirstOrDefault <Subscriber>(subscriber =>
                                                                             subscriber.Id == request.SubscriberId);
                if (topicSubscriber == null)
                {
                    throw new ArgumentException("Unknown subscriber");
                }

                var announcement = ReadFromDb(connection, topicSubscriber, request);
                return(announcement);
            }
        }
Beispiel #2
0
        public void Create(CreateSubscription request)
        {
            var topicLock = Locks.TakeTopicLock(request.TopicName);

            lock (topicLock)
            {
                if (Locks.TopicsRecoveryLocks.ContainsKey(request.TopicName))
                {
                    throw new Exception($"Topic {request.TopicName} is inconsistent");
                }

                using (var connection = Connections.ConnectToInitializedTopic(request.TopicName))
                {
                    Create(connection, request);
                }
            }
        }
Beispiel #3
0
        public void Delete(DeleteSubscription request)
        {
            var topicLock = Locks.TakeTopicLock(request.TopicName);

            lock (topicLock)
            {
                if (Locks.TopicsRecoveryLocks.ContainsKey(request.TopicName))
                {
                    throw new Exception($"Topic {request.TopicName} is inconsistent");
                }

                using (var connection = Connections.ConnectToInitializedTopic(request.TopicName))
                {
                    connection.DeleteById <Subscriber>(request.SubscriberId);
                }

                Propagators.ScheduleTopicOperation(request.TopicName, () => Propagate(request));
            }
        }