Example #1
0
        internal SessionInformation(Session session, SessionLocalInfo info, ISessionTrackingData trackingData, IExecutionResultInternal messages)
        {
            DebugContract.Requires(session, "session");
            DebugContract.Requires(trackingData);

            _context          = session.SessionContext;
            TrackingData      = trackingData;
            CancellationToken = session.CancellationToken;
            IsAborted         = session.IsAborted;
            IsNested          = session.IsNested;
            Store             = session.Store;
            IsReadOnly        = session.IsReadOnly;
            Mode               = info.Mode;
            OriginStoreId      = info.OriginStoreId;
            SessionId          = session.SessionId;
            DefaultDomainModel = info.DefaultDomainModel;
            _contextInfos      = info.Infos;
            Events             = session.Events.ToList();
            if (messages != null)
            {
                HasErrors   = messages.HasErrors;
                HasWarnings = messages.HasWarnings;
            }
        }
Example #2
0
        /// <summary>
        ///     Notification de la fin de la session
        /// </summary>
        private ISessionInformation OnSessionCompleted(SessionLocalInfo info, IEnumerable <IEventNotifier> notifiers, IExecutionResultInternal messages)
        {
            DebugContract.Requires(notifiers != null, "notifiers");
            // On fait une copie de la session car les événements peuvent
            // être souscrits dans un autre thread
            var sessionContext = new SessionInformation(this, info, SessionDataContext.TrackingData, messages);

            try
            {
                // Notifications via RX.
                foreach (var notifier in notifiers)
                {
                    notifier.NotifySessionCompleted(sessionContext, SessionContext);
                }

                // Déclenchement des événements
                // D'abord évenement hard
                var tmp = Completing;
                if (tmp != null)
                {
                    tmp(this, new SessionCompletingEventArgs(sessionContext));
                }
            }
            catch (Exception ex)
            {
                // Si une erreur survient dans une notification, on l'intercepte
                Log(new DiagnosticMessage(MessageType.Error, ex.Message, "SessionTerminated", SessionDataContext.InValidationProcess, null, ex));
            }
            return(sessionContext);
        }