///------------------------------------------------------------------------------------------------- /// <summary> /// Starts the asynchronous. /// </summary> /// <returns> /// A Task. /// </returns> ///------------------------------------------------------------------------------------------------- protected override Task StartAsync() { var tcs = new TaskCompletionSource <object>(); _messages = new Subject <InprocMessage>(EventBus.Store.Services); try { if (EventsProcessor != null) { if (HasInputProperty()) { // Reception des messages _messages.Subscribe(msg => EventsProcessor.ProcessEvents(msg.OriginStoreId, msg.Mode, msg.Events) ); } } tcs.SetResult(null); } catch (Exception ex) { tcs.SetException(ex); } return(tcs.Task); }
///------------------------------------------------------------------------------------------------- /// <summary> /// Constructor. /// </summary> /// <param name="services"> /// The services. /// </param> ///------------------------------------------------------------------------------------------------- public EventManager(IServicesContainer services) { var factory = services.Resolve <ISubjectFactory>() ?? new DefaultSubjectFactory(services); _messageOccurs = factory.CreateSubject <ISessionResult>(); _sessionCompleted = factory.CreateSubject <ISessionInformation>(); _sessionCompleting = factory.CreateSubject <ISessionInformation>(); _attributeChanged = factory.CreateSubject <EventContext <ChangePropertyValueEvent> >(); _attributeRemoved = factory.CreateSubject <EventContext <RemovePropertyEvent> >(); _elementAdded = factory.CreateSubject <EventContext <AddEntityEvent> >(); _elementRemoved = factory.CreateSubject <EventContext <RemoveEntityEvent> >(); _relationshipAdded = factory.CreateSubject <EventContext <AddRelationshipEvent> >(); _relationshipRemoved = factory.CreateSubject <EventContext <RemoveRelationshipEvent> >(); _customEvents = factory.CreateSubject <EventContext <IEvent> >(); _metadataAdded = factory.CreateSubject <EventContext <AddSchemaEntityEvent> >(); _relationshipMetadataAdded = factory.CreateSubject <EventContext <AddSchemaRelationshipEvent> >(); _attributeChanging = factory.CreateSubject <EventContext <ChangePropertyValueEvent> >(); _attributeRemoving = factory.CreateSubject <EventContext <RemovePropertyEvent> >(); _elementAdding = factory.CreateSubject <EventContext <AddEntityEvent> >(); _elementRemoving = factory.CreateSubject <EventContext <RemoveEntityEvent> >(); _relationshipAdding = factory.CreateSubject <EventContext <AddRelationshipEvent> >(); _relationshipRemoving = factory.CreateSubject <EventContext <RemoveRelationshipEvent> >(); _customEventRaising = factory.CreateSubject <EventContext <IEvent> >(); _metadataAdding = factory.CreateSubject <EventContext <AddSchemaEntityEvent> >(); _relationshipMetadataAdding = factory.CreateSubject <EventContext <AddSchemaRelationshipEvent> >(); }
///------------------------------------------------------------------------------------------------- /// <summary> /// Releases the unmanaged resources used by the Hyperstore.Modeling.Messaging.AbstractChannel /// and optionally releases the managed resources. /// </summary> /// <param name="disposing"> /// true to release both managed and unmanaged resources; false to release only unmanaged /// resources. /// </param> ///------------------------------------------------------------------------------------------------- protected override void Dispose(bool disposing) { base.Dispose(disposing); if (TokenSource != null) { TokenSource.Cancel(); } if (_messages != null) { _messages.Dispose(); } _messages = null; EventQueue.CompleteAdding(); }