Пример #1
0
        public MsSqlServerEventStore(String connectionString, IEventTypeResolver typeResolver, IEventConverter converter)
        {
            if (String.IsNullOrEmpty(connectionString)) throw new ArgumentNullException("connectionString");

            _connectionString = connectionString;
            _converter = converter ?? new NullEventConverter();
            _formatter = new JsonEventFormatter(typeResolver ?? new SimpleEventTypeResolver());
            _translator = new StringEventTranslator();
        }
Пример #2
0
        /// <summary>
        /// <see cref="IEventSink{T}.TryPublishEvent(Disruptor.IEventTranslator{T})"/>
        /// </summary>
        public bool TryPublishEvent(IEventTranslator <T> translator)
        {
            if (_fields.Sequencer.TryNext(out var sequence))
            {
                TranslateAndPublish(translator, sequence);
                return(true);
            }

            return(false);
        }
Пример #3
0
 private void TranslateAndPublish(IEventTranslator <TEvent> translator, long sequence)
 {
     try
     {
         translator.TranslateTo(Get(sequence), sequence);
     }
     finally
     {
         Sequencer.Publish(sequence);
     }
 }
Пример #4
0
 private void TranslateAndPublish(IEventTranslator <T> translator, long sequence)
 {
     try
     {
         translator.TranslateTo(this[sequence], sequence);
     }
     finally
     {
         _fields.Sequencer.Publish(sequence);
     }
 }
Пример #5
0
        public MongoDBEventStore(string connectionString = DEFAULT_DATABASE_URI, IEventTypeResolver typeResolver = null, IEventConverter converter = null)
        {
            _database = MongoDatabase.Create(connectionString);
            _commits = _database.GetCollection<MongoCommit>("Commits");
            _events = _database.GetCollection<BsonDocument>("SourcedEvents");

            _converter = converter ?? new NullEventConverter();
            _formatter = new JsonEventFormatter(typeResolver ?? new SimpleEventTypeResolver());
            _translator = new StringEventTranslator();

            EnsureIndexes();
        }
Пример #6
0
        public PostgreServerEventStore(String connectionString, IEventTypeResolver typeResolver, IEventConverter converter)
        {
            if (String.IsNullOrEmpty(connectionString))
            {
                throw new ArgumentNullException("connectionString");
            }

            _connectionString = connectionString;
            _converter        = converter ?? new NullEventConverter();
            _formatter        = new JsonEventFormatter(typeResolver ?? new SimpleEventTypeResolver());
            _translator       = new StringEventTranslator();
        }
Пример #7
0
        public MongoDBEventStore(string connectionString = DEFAULT_DATABASE_URI, IEventTypeResolver typeResolver = null, IEventConverter converter = null)
        {
            _database = MongoDatabase.Create(connectionString);
            _commits  = _database.GetCollection <MongoCommit>("Commits");
            _events   = _database.GetCollection <BsonDocument>("SourcedEvents");

            _converter  = converter ?? new NullEventConverter();
            _formatter  = new JsonEventFormatter(typeResolver ?? new SimpleEventTypeResolver());
            _translator = new StringEventTranslator();

            EnsureIndexes();
        }
Пример #8
0
 public bool TryPublishEvent(IEventTranslator <T> translator)
 {
     try
     {
         long sequence = _fields.Sequencer.TryNext();
         TranslateAndPublish(translator, sequence);
         return(true);
     }
     catch (InsufficientCapacityException)
     {
         return(false);
     }
 }
Пример #9
0
        public Task <TResult> PublishEvent(IEventTranslator <TEvent> translator)
        {
            var taskCompletionSource = new TaskCompletionSource <TResult>();

            Events.Add(translator.Translate(Activator.CreateInstance <TEvent>(), 0));
            taskCompletionSource.SetResult(default(TResult));

            if (_publishAction != null)
            {
                _publishAction();
                _publishAction = null;
            }

            return(taskCompletionSource.Task);
        }
Пример #10
0
 /// <summary>
 /// <see cref="IEventSink{TEvent}.TryPublishEvent(IEventTranslator{TEvent})"/>
 /// </summary>
 /// <param name="translator"></param>
 /// <returns></returns>
 public bool TryPublishEvent(IEventTranslator <TEvent> translator)
 {
     try
     {
         if (Sequencer.TryNext(out long sequence))
         {
             TranslateAndPublish(translator, sequence);
             return(true);
         }
         else
         {
             return(false);
         }
     }
     catch (InsufficientCapacityException e)
     {
         return(false);
     }
 }
Пример #11
0
        private void TranslateAndPublishBatch(IEventTranslator <T>[] translators, int batchStartsAt, int batchSize, long finalSequence)
        {
            long initialSequence = finalSequence - (batchSize - 1);

            try
            {
                long sequence    = initialSequence;
                int  batchEndsAt = batchStartsAt + batchSize;
                for (int i = batchStartsAt; i < batchEndsAt; i++)
                {
                    IEventTranslator <T> translator = translators[i];
                    translator.TranslateTo(this[sequence], sequence++);
                }
            }
            finally
            {
                _sequencerDispatcher.Sequencer.Publish(initialSequence, finalSequence);
            }
        }
Пример #12
0
        /// <summary>Initializes a new instance of the <see cref="MsSqlServerEventStore"/> class.</summary>
        /// <param name="connectionString">The database connection string to the database.</param>
        /// <param name="applicationName">The application name that is used to isolate events and surces etc...</param>
        /// <param name="typeResolver">Indicates the <see cref="IEventTypeResolver"/> to use.</param>
        /// <param name="converter">Indicates the <see cref="IEventConverter"/> to use.</param>
        public MultiAppSqlServerEventStore(
            string connectionString,
            string applicationName,
            IEventTypeResolver typeResolver,
            IEventConverter converter)
        {
            if (String.IsNullOrEmpty(connectionString))
            {
                throw new ArgumentNullException("connectionString");
            }

            if (String.IsNullOrEmpty(applicationName))
            {
                throw new ArgumentNullException("applicationName");
            }

            _connectionString = connectionString;
            _applicationName  = applicationName;
            _converter        = converter ?? new NullEventConverter();
            _formatter        = new JsonEventFormatter(typeResolver ?? new SimpleEventTypeResolver());
            _translator       = new StringEventTranslator();

            InitializeEventStore();
        }
Пример #13
0
 /// <summary>
 /// Publish an event to the ring buffer.
 /// </summary>
 /// <param name="eventTranslator">the translator that will load data into the event.</param>
 public void PublishEvent(IEventTranslator <T> eventTranslator)
 {
     _ringBuffer.PublishEvent(eventTranslator);
 }
Пример #14
0
 public Task <TResult> PublishEvent(IEventTranslator <TEvent> translator, TimeSpan timeout)
 {
     return(PublishEvent(translator));
 }
Пример #15
0
 public void PublishEvent(IEventTranslator <T> translator, TimeSpan timeout)
 {
     _eventPublisher.PublishEvent(translator.Translate, timeout);
 }
Пример #16
0
        public void PublishEvent(IEventTranslator <T> translator)
        {
            long sequence = _fields.Sequencer.Next();

            TranslateAndPublish(translator, sequence);
        }
Пример #17
0
        public void PublishEvent(IEventTranslator <T> translator)
        {
            long sequence = _sequencerDispatcher.Sequencer.Next();

            TranslateAndPublish(translator, sequence);
        }
Пример #18
0
 public void PublishEvent(IEventTranslator <TEvent> translator)
 {
     throw new NotImplementedException();
 }
Пример #19
0
        /// <summary>
        /// <see cref="IEventSink{TEvent}.PublishEvent(IEventTranslator{TEvent})"/>
        /// </summary>
        /// <param name="translator"></param>
        public void PublishEvent(IEventTranslator <TEvent> translator)
        {
            var sequence = Sequencer.Next();

            TranslateAndPublish(translator, sequence);
        }
Пример #20
0
 public void PublishEvent(IEventTranslator <T> translator)
 {
     _eventPublisher.PublishEvent(translator.Translate);
 }