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); } }
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); } } }
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)); } }